머신 이미지에서 VM 인스턴스 만들기


머신 이미지를 만든 후 이 이미지를 사용하여 소스 VM 인스턴스의 사본을 만들 수 있습니다. 머신 이미지 사용에 대한 자세한 내용은 머신 이미지를 사용하는 경우를 참조하세요.

머신 이미지에는 인스턴스를 클론하는 데 필요한 대부분의 정보와 데이터가 포함되어 있습니다.

머신 이미지는 변경할 수 없습니다. 하지만 머신 이미지에서 인스턴스를 만들 때 대부분의 머신 이미지 속성을 재정의 할 수 있습니다.

Google Cloud 콘솔, Google Cloud CLI 또는 REST 중 하나를 사용하여 머신 이미지에서 인스턴스를 만들 수 있습니다

시작하기 전에

  • 아직 인증을 설정하지 않았다면 설정합니다. 인증은 Google Cloud 서비스 및 API에 액세스하기 위해 ID를 확인하는 프로세스입니다. 로컬 개발 환경에서 코드 또는 샘플을 실행하려면 다음과 같이 Compute Engine에 인증하면 됩니다.

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

    1. Install the Google Cloud CLI, then initialize it by running the following command:

      gcloud init
    2. Set a default region and zone.
    3. REST

      로컬 개발 환경에서 이 페이지의 REST API 샘플을 사용하려면 gcloud CLI에 제공하는 사용자 인증 정보를 사용합니다.

        Install the Google Cloud CLI, then initialize it by running the following command:

        gcloud init

      자세한 내용은 Google Cloud 인증 문서의 REST 사용 인증을 참조하세요.

제한사항

머신 이미지에서 VM을 만들 때 다음 제한사항이 적용됩니다.

  • 60분 동안 소스 머신 이미지에서 VM을 최대 6개까지 만들 수 있습니다. 이 한도를 초과하면 인스턴스 만들기 작업이 실패하고 다음과 비슷한 오류가 반환됩니다.

    Operation rate exceeded for resource 'projects/test/global/machineImages/machine-image-1'.
    Too frequent operations from the source resource.
    

    정의된 한도(60분 동안 VM 6개)보다 더 많은 VM을 만들려면 소스 VM에서 추가 머신 이미지를 만들거나 새 VM에서 단기 머신 이미지를 만듭니다. 그런 후 새 머신 이미지에서 필요한 개수의 VM을 만들 수 있습니다.

  • Google Cloud 콘솔을 사용해서는 리전 영구 디스크가 연결되어 있는 머신 이미지에서 VM을 만들 수 없습니다. Google Cloud CLI 또는 REST를 사용하고 연결된 각 리전 영구 디스크에 대해 replicaZonesdeviceName 매개변수를 지정하세요. 자세한 내용은 속성 재정의를 사용해서 머신 이미지에서 VM 만들기를 참조하세요.

머신 이미지를 사용하여 VM 만들기(재정의 안 함)

속성에 대한 변경 없이 전적으로 머신 이미지를 기반으로 VM을 만들려면 이 방법을 사용합니다.

Console

  1. Google Cloud 콘솔에서 인스턴스 만들기 페이지로 이동합니다.

    인스턴스 만들기로 이동

  2. 머신 이미지의 새 VM 인스턴스를 클릭합니다.

  3. 머신 이미지를 선택하고 계속을 클릭합니다.

  4. 선택사항: VM 세부정보를 맞춤설정합니다.

  5. 만들기를 클릭합니다.

gcloud

gcloud compute instances create 명령어를 사용하여 머신 이미지에서 인스턴스를 만듭니다.

gcloud compute instances create VM_NAME \
    --zone=ZONE \
    --source-machine-image=SOURCE_MACHINE_IMAGE_NAME

다음을 바꿉니다.

  • VM_NAME: 만들려는 VM의 이름입니다.
  • ZONE: VM의 영역입니다.
  • SOURCE_MACHINE_IMAGE_NAME: VM을 만들 머신 이미지입니다.

예시

예를 들어 다음 gcloud 명령어를 사용하여 my-machine-image라는 머신 이미지에서 us-east1-b 영역에 my-instance라는 VM을 만들 수 있습니다.

gcloud compute instances create my-instance \
    --zone=us-east1-b \
    --source-machine-image=my-machine-image

VM이 생성되면 다음과 유사한 결과가 출력됩니다.

Created [https://www.googleapis.com/compute/v1/projects/project-12345/zones/us-east1-b/instances/my-instance].
NAME               ZONE        MACHINE_TYPE   PREEMPTIBLE  INTERNAL_IP  EXTERNAL_IP   STATUS
my-instance        us-east1-b  e2-standard-2               192.0.2.1   203.224.0.113  RUNNING

REST

API에서 instances.insert 메서드에 대해 POST 요청을 작성합니다. 요청 본문에 다음 매개변수를 포함합니다.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances

{
  "name": "VM_NAME",
  "sourceMachineImage": "SOURCE_MACHINE_IMAGE_URL"
}

다음을 바꿉니다.

  • PROJECT_ID: 프로젝트 ID입니다.
  • ZONE: VM의 영역입니다.
  • VM_NAME: 만들려는 VM의 이름입니다.
  • SOURCE_MACHINE_IMAGE_URL: VM을 만드는 데 사용할 머신 이미지의 전체 또는 부분 URL입니다. 예를 들어 myProject라는 프로젝트에 my-machine-image라는 머신 이미지가 있는 경우 유효한 URL은 다음과 같습니다.

    • https://www.googleapis.com/compute/v1/projects/myProject/global/machineImages/my-machine-image
    • projects/myProject/global/machineImages/my-machine-image
    • global/machineImages/my-machine-image

속성 재정의를 사용해서 머신 이미지에서 VM 만들기

주로 머신 이미지를 기반으로 VM을 만들되 몇 가지 변경사항을 적용하면 재정의 동작을 사용할 수 있습니다. 재정의 동작을 사용하려면 인스턴스를 만들 때 기존 머신 이미지 속성을 재정의할 속성을 전달합니다.

재정의 기능을 사용할 때 다음 사항을 고려하세요.

  • 머신 이미지에서 VM을 만드는 동안에는 디스크 이름 외의 연결된 디스크 속성을 재정의할 수 없습니다.
  • 머신 이미지에서 리전 디스크의 deviceName과 함께 연결된 각 리전 영구 디스크에 대해 replicaZones 매개변수를 지정해야 합니다.

  • 머신 이미지와 새 VM을 생성하는 데 사용된 소스 VM이 동일한 프로젝트 및 리전에 속하는 경우 다음 사항이 적용됩니다.

    • 소스 인스턴스와 새 VM의 속성 대부분이 동일합니다. 자동 할당되는 임시 IP 주소 등의 속성은 다릅니다.
    • 새 VM을 만들 때 소스 VM 인스턴스가 여전히 존재하는 경우 새 VM은 소스 인스턴스와 동일한 이름과 영역을 사용할 수 없습니다.
  • 머신 이미지와 새 VM을 생성하는 데 사용된 소스 VM이 동일한 프로젝트에 속하지만 리전이 다른 경우 다음 사항이 적용됩니다.

    • 새 VM의 모든 영역 및 리전 리소스를 재정의해야 합니다. 예를 들어 소스 인스턴스가 다른 리전에 속한 머신 이미지에서 VM 인스턴스를 만드는 경우 서브네트워크 및 리전 방화벽 규칙과 같은 리전 리소스를 재정의해야 합니다. 그러나 부하 분산기 및 서비스 계정과 같은 전역 리소스는 이를 수정하지 않는 한 재정의할 필요가 없습니다.

Console

  1. Google Cloud 콘솔에서 인스턴스 만들기 페이지로 이동합니다.

    인스턴스 만들기로 이동

  2. 머신 이미지의 새 VM 인스턴스를 클릭합니다.

  3. 머신 이미지를 선택하고 계속을 클릭합니다.

  4. 선택사항: VM 세부정보를 맞춤설정합니다.

  5. 만들기를 클릭합니다.

    설정 세부정보는 이미지에서 VM 인스턴스 만들기를 참조하세요.

gcloud

gcloud compute instances create 명령어를 사용하여 머신 이미지에서 인스턴스를 만들고 재정의할 속성을 추가합니다.

예를 들어 다음 gcloud 명령어를 사용하여 my-machine-image라는 머신 이미지에서 us-east1-b 영역에 my-instance라는 VM을 만들 수 있습니다. 이 예시에서는 머신 유형을 변경하고, 호스트 유지보수 정책을 중지하고, regional-disk-0 이름으로 리전 영구 디스크를 구성하도록 재정의가 적용됩니다.

gcloud compute instances create my-instance \
    --zone=us-east1-b \
    --source-machine-image=my-machine-image \
    --machine-type=e2-standard-2 \
    --maintenance-policy=TERMINATE \
    --create-disk=device-name=boot-device-0,boot=true,auto-delete=true \
    --create-disk=device-name=regional-disk-0,\
      replica-zones=^:^us-east1-b:us-east1-c,boot=false

REST

VM 생성 중에 머신 이미지 속성을 재정의하려면 instances.insert() API를 사용하고 요청 본문에서 재정의할 필드를 제공합니다.

API에서 instances.insert 메서드에 대해 POST 요청을 작성합니다. 요청 본문에 sourceMachineImage 매개변수와 필요한 재정의를 포함합니다. 인스턴스 생성 중에 일반적으로 설정하는 속성을 추가할 수 있습니다. 예를 들어 머신 유형을 변경하려면 API 호출에 machineType 매개변수를 포함합니다.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances

{
  "name": "VM_NAME",
  "machineType": "zones/ZONE/machineTypes/NEW_MACHINE_TYPE",
  "sourceMachineImage": "SOURCE_MACHINE_IMAGE_URL"
}

다음을 바꿉니다.

  • PROJECT_ID: 프로젝트 ID입니다.
  • ZONE: VM의 영역입니다.
  • VM_NAME: 만들려는 VM의 이름입니다.
  • NEW_MACHINE_TYPE: VM에 사용할 머신 유형입니다.
  • SOURCE_MACHINE_IMAGE_URL: 인스턴스를 만드는 데 사용할 머신 이미지의 전체 또는 부분 URL입니다. 예를 들어 myProject라는 프로젝트에 my-machine-image라는 머신 이미지가 있는 경우 유효한 URL은 다음과 같습니다.

    • https://www.googleapis.com/compute/v1/projects/myProject/global/machineImages/my-machine-image
    • projects/myProject/global/machineImages/my-machine-image
    • global/machineImages/my-machine-image

재정의 동작

API의 재정의 동작은 RFC 7396에서 설명하는 JSON 병합 패치 규칙을 따릅니다. 요약하면 다음 규칙이 적용됩니다.

  • 기본 필드를 재정의하면 머신 이미지의 해당 기본 필드가 요청의 기본 필드 값으로 바뀝니다. 기본 필드에는 machineType, name 등의 매개변수가 포함됩니다.
  • 반복되는 필드를 재정의하면 해당 속성에 대해 반복되는 모든 값이 요청에 제공된 해당 값으로 바뀝니다. 반복되는 필드는 일반적으로 list 유형의 속성입니다. 예를 들어 disksnetworkInterfaces는 반복되는 필드입니다.
  • nested object를 재정의하면 머신 이미지의 객체가 요청의 해당 객체 사양과 병합됩니다. 중첩된 객체가 반복되는 필드 내에 있는 경우 해당 필드는 반복되는 필드의 규칙에 따라 처리됩니다. 라벨은 이 규칙의 예외이며 라벨이 object 유형이더라도 반복되는 필드로 간주됩니다.

예를 들어 머신 이미지에서 VM을 만들고 VM을 사용해서 리전 영구 디스크를 만들려면 replicaZones 옵션을 지정할 수 있도록 디스크에 대해 재정의를 사용합니다. disks 필드가 반복 필드이기 때문에 리전 디스크뿐만 아니라 연결된 모든 디스크 및 부팅 디스크에 대해서도 디스크 구성을 지정해야 합니다.

POST /compute/projects/my-proj/zones/us-west1-a/instances
{
  "name": "vm-from-image",
  "sourceMachineImage": "global/machineImages/my-machine-image",
  "disks": [
    {
      "kind": "compute#attachedDisks",
      "boot": true,
      "autoDelete": true,
      "deviceName": "boot-device",
      "initializeParams": {
        "sourceImage": "projects/my-proj/global/images/my-image",
        "diskType": "projects/my-proj/zones/us-west1-a/diskTypes/pd-standard",
      }
    },
    {
      "kind": "compute#attachedDisk",
      "boot": false,
      "autoDelete": true,
      "deviceName": "regional-device-0",
      "initializeParams": {
         "diskType": "projects/my-proj/zones/us-west1-a/diskTypes/pd-standard",
         "replicaZones": [
            "projects/my-proj/zones/us-west1-a",
            "projects/my-proj/zones/us-west1-c"
         ]
      }
    }
  ]
}

다른 프로젝트의 머신 이미지를 사용하여 VM 만들기

다른 프로젝트의 머신 이미지를 사용하여 VM을 만들면 해당 소스 프로젝트에 연결된 서비스 계정에 액세스하지 못할 수 있습니다. 다른 프로젝트에 있는 머신 이미지를 사용하여 VM을 만들려면 머신 이미지에 대한 액세스 권한이 있는지 확인하고 새 VM의 서비스 계정 속성을 재정의해야 합니다.

공유 VPC 네트워크를 사용하는 프로젝트 간에 머신 이미지를 공유하는 경우 머신 이미지에서 VM을 만들 때 공유 VPC 세부정보를 명시적으로 지정해야 합니다. 예를 들어 비호스트 프로젝트에서 VM을 만들 때 --network, --subnet, --network-interface 옵션을 사용하여 호스트 프로젝트의 공유 VPC 세부정보를 제공합니다.

다음 섹션에서는 Google Cloud CLI를 사용하여 다른 프로젝트에 있는 머신 이미지에서 VM을 만드는 방법을 설명합니다.

  1. 다른 프로젝트에 저장된 머신 이미지에 대한 액세스 권한을 부여합니다.

    권한은 소스 프로젝트 또는 머신 이미지에 부여할 수 있습니다. gcloud compute machine-images add-iam-policy-binding 명령어를 사용하여 머신 이미지에 대한 권한을 부여합니다.

    gcloud compute machine-images add-iam-policy-binding MACHINE_IMAGE_NAME \
        --project=MACHINE_IMAGE_PROJECT \
        --member='ACCOUNT_EMAIL' \
        --role='roles/compute.admin'
    

    다음을 바꿉니다.

    • MACHINE_IMAGE_PROJECT: 소스 머신 이미지가 포함된 프로젝트의 프로젝트 ID입니다.
    • MACHINE_IMAGE_NAME: 권한 결합을 추가할 머신 이미지의 이름입니다.
    • ACCOUNT_EMAIL: VM을 만드는 serviceAccount 또는 user의 이메일 주소입니다. 필수 프리픽스를 포함하도록 이메일의 형식이 지정되었는지 확인합니다. 프리픽스는 다음 중 하나여야 합니다.

      • user: 이메일 주소가 사용자 계정과 연결된 경우 지정합니다. 예를 들면 user:user@example.com입니다.
      • serviceAccount: 이메일 주소가 서비스 계정과 연결된 경우 지정합니다. 예를 들면 serviceAccount:123456789000-compute@developer.gserviceaccount.com입니다.

    예시

    예를 들어 my-machine-image라는 머신 이미지에 대한 compute.admin 결합을 서비스 계정 이메일 123456789000-compute@developer.gserviceaccount.com에 추가하려면 다음 gcloud 명령어를 사용합니다.

    gcloud compute machine-images add-iam-policy-binding my-machine-image \
        --project=machine-image-project \
        --member='serviceAccount:123456789000-compute@developer.gserviceaccount.com' \
        --role='roles/compute.admin'
    
  2. gcloud compute instances create 명령어를 실행하는 사용자에게 머신 이미지와 연결된 서비스 계정에 대한 서비스 계정 사용자 역할(roles/iam.serviceAccountUser)을 부여합니다.

  3. gcloud compute instances create 명령어를 사용하여 머신 이미지에서 VM을 만듭니다.

    gcloud compute instances create VM_NAME \
        --project=VM_PROJECT_ID \
        --zone=ZONE \
        --source-machine-image=projects/MACHINE_IMAGE_PROJECT/global/machineImages/MACHINE_IMAGE_NAME \
        --service-account=SERVICE_ACCOUNT_EMAIL
        --subnet=SUBNET
    

    다음을 바꿉니다.

    • VM_PROJECT_ID: VM을 만들 프로젝트의 프로젝트 ID
    • VM_NAME: 만들려는 VM의 이름
    • ZONE: VM의 영역
    • MACHINE_IMAGE_PROJECT: 머신 이미지가 있는 프로젝트의 프로젝트 ID
    • MACHINE_IMAGE_NAME: VM을 만들 머신 이미지
    • SERVICE_ACCOUNT_EMAIL: VM에 연결할 서비스 계정의 이메일 주소
    • SUBNET: 서브넷과 인스턴스가 같은 프로젝트에 있으면 SUBNET을 인스턴스와 동일한 리전에 있는 서브넷의 이름으로 바꿉니다.

      공유 VPC 네트워크에서 서브넷을 지정하려면 SUBNET

      projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME
      
      형식의 문자열로 바꿉니다.

      다음을 바꿉니다.

      • HOST_PROJECT_ID: 공유 VPC 호스트 프로젝트의 프로젝트 ID
      • REGION: 서브넷의 리전입니다.
      • SUBNET_NAME: 서브넷의 이름

      예시

      예를 들어 다음 명령어는 my-machine-image라는 머신 이미지에서 us-east1-b 영역의 vm-projectmy-instance라는 VM을 만듭니다.

      --service-account 플래그는 새로 만든 VM에 연결할 서비스 계정을 지정합니다. 이 플래그를 제공하지 않으면 소스 서비스 계정을 두 프로젝트 간에 공유할 수 없으며 작업이 실패합니다.

      gcloud compute instances create my-instance \
       --project=vm-project \
       --zone=us-east1-b \
       --source-machine-image=projects/machine-image-project/global/machineImages/my-machine-image \
       --service-account=000123456789-compute@developer.gserviceaccount.com
      

      VM이 생성되면 다음과 유사한 결과가 출력됩니다.

      Created [https://www.googleapis.com/compute/v1/projects/project-12345/zones/us-east1-b/instances/my-instance].
      NAME               ZONE        MACHINE_TYPE   PREEMPTIBLE  INTERNAL_IP  EXTERNAL_IP   STATUS
      my-instance        us-east1-b  e2-standard-2               192.0.2.1   203.224.0.113  RUNNING
      

다음 단계