VM 일괄 생성


서로 같지만 상호 독립적인 가상 머신(VM) 인스턴스를 여러 개 만들려면 Google Cloud CLI 또는 Compute Engine API를 사용하여 VM을 일괄 생성합니다. 이러한 VM을 리전 하나의 모든 영역에 만들거나 특정 영역에 분산할 수 있습니다.

자세한 내용과 관련 제한사항은 VM 일괄 생성 정보를 참조하세요.

시작하기 전에

  • 만들려는 VM과 관련 리소스의 경우 할당량이 충분하고 필요한 권한이 있는지 확인합니다.
  • 아직 인증을 설정하지 않았다면 설정합니다. 인증은 Google Cloud 서비스 및 API에 액세스하기 위해 ID를 확인하는 프로세스입니다. 로컬 개발 환경에서 코드 또는 샘플을 실행하려면 다음과 같이 Compute Engine에 인증하면 됩니다.

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

    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 일괄 생성에 필요한 권한을 얻으려면 관리자에게 프로젝트에 대한 Compute 인스턴스 관리자(v1)(roles/compute.instanceAdmin.v1) IAM 역할을 부여해 달라고 요청하세요. 역할 부여에 대한 자세한 내용은 프로젝트, 폴더, 조직에 대한 액세스 관리를 참조하세요.

이 사전 정의된 역할에는 VM을 일괄적으로 만드는 데 필요한 권한이 포함되어 있습니다. 필요한 정확한 권한을 보려면 필수 권한 섹션을 펼치세요.

필수 권한

VM을 일괄 생성하려면 다음 권한이 필요합니다.

  • 프로젝트에 대한 compute.instances.create 권한
  • 커스텀 이미지를 사용하여 VM 만들기: 이미지에 대한 compute.images.useReadOnly 권한
  • 스냅샷을 사용하여 VM 만들기: 스냅샷에 대한 compute.snapshots.useReadOnly 권한
  • 인스턴스 템플릿을 사용하여 VM 만들기: 인스턴스 템플릿에 대한 compute.instanceTemplates.useReadOnly 권한
  • VM에 레거시 네트워크 할당: 프로젝트에 대한 compute.networks.use 권한
  • VM의 고정 IP 주소 지정: 프로젝트에 대한 compute.addresses.use 권한
  • 레거시 네트워크 사용 시 VM에 외부 IP 주소 할당: 프로젝트에 대한 compute.networks.useExternalIp 권한
  • VM의 서브넷 지정: 프로젝트 또는 선택한 서브넷에 대한 compute.subnetworks.use 권한
  • VPC 네트워크를 사용할 때 VM에 외부 IP 주소 할당: 프로젝트 또는 선택한 서브넷에 대한 compute.subnetworks.useExternalIp 권한
  • VM에 VM 인스턴스 메타데이터 설정: 프로젝트에 대한 compute.instances.setMetadata 권한
  • VM에 태그 설정: VM에 대한 compute.instances.setTags 권한
  • VM에 라벨 설정: VM에 대한 compute.instances.setLabels 권한
  • VM에 사용할 서비스 계정 설정: VM에 대한 compute.instances.setServiceAccount 권한
  • VM의 새 디스크 만들기: 프로젝트에 대한 compute.disks.create 권한
  • 기존 디스크를 읽기 전용 또는 읽기-쓰기 모드로 연결: 디스크에 대한 compute.disks.use 권한
  • 기존 디스크를 읽기 전용 모드로 연결: 디스크에 대한 compute.disks.useReadOnly 권한

커스텀 역할이나 다른 사전 정의된 역할을 사용하여 이 권한을 부여받을 수도 있습니다.

리전 하나에서 VM 일괄 생성

리전 하나에서 VM을 일괄 생성하려면 gcloud CLI 또는 Compute Engine API를 사용합니다.

사용자가 머신 유형을 지정하거나 GPU 또는 로컬 SSD와 같은 추가 하드웨어를 지원하면 Compute Engine은 해당 머신 유형 및 추가 하드웨어를 지원하는 리전 내 영역에 VM을 배치합니다.

gcloud

리전 하나에서 VM을 일괄 생성하려면 다음 gcloud compute instances bulk create 명령어를 사용합니다.

gcloud compute instances bulk create \
    ( --name-pattern="NAME_PATTERN" | --predefined-names=[PREDEFINED_NAMES] ) \
    --region=REGION \
    --count=COUNT \
    [ --min-count=MIN_COUNT \ ]
    [--location-policy=LOCATION_POLICY \ ]
    [--target-distribution-shape=TARGET_SHAPE ]

다음을 바꿉니다.

  • NAME_PATTERN: VM의 이름 패턴 Compute Engine에 일련의 해시(#) 문자를 사용하여 일련의 숫자로 바꿉니다. 예를 들어 이름 패턴에 vm-#을 사용하면 vm-1, vm-2 등의 이름으로 VM이 생성되므로 최대 --count에서 지정한 최대 VM 수는 이름 패턴에서 허용하는 VM 수보다 작거나 같아야 합니다.

    이름 패턴을 사용할 경우 Compute Engine은 이전 요청에서 생성된 기존 VM의 이름을 확인하여 이름 충돌을 방지합니다.

  • PREDEFINED_NAMES: 생성할 VM의 사전 정의된 이름 목록. 이 플래그를 사용하여 COUNT를 지정하는 경우 COUNT는 제공된 이름 수와 같아야 합니다.

  • REGION: VM을 생성할 리전

  • COUNT: 만들 VM 수. 이 수는 NAME_PATTERN에서 허용하는 VM 수보다 작거나 같아야 합니다. 또는 --predefined-names를 사용하는 경우에는 COUNT를 지정할 필요는 없지만, 지정할 경우 제공된 이름 수와 동일해야 합니다.

  • MIN_COUNT: 만들 최소 VM 수. 다음 표에서는 이 플래그 설정 방법에 따른 요청 동작을 설명합니다.

    설명
    설정되지 않음 기본값은 COUNT입니다. Compute Engine에서 COUNT로 지정된 VM 수를 만들 수 없으면 요청이 실패하고 VM이 생성되지 않습니다.
    1 Compute Engine은 가능한 한 많은 VM을 최대 COUNT개까지 만듭니다.
    1보다 크고 COUNT보다 작음 Compute Engine은 VM을 최소 MIN_COUNT 이상, 최대 COUNT 이하로 만듭니다. MIN_COUNT VM을 만들 수 없으면 요청이 실패하고 VM이 생성되지 않습니다.
  • LOCATION_POLICY: 리전 내에 포함하거나 제외할 영역. 영역을 키로 사용하고 정책을 값으로 사용하여 키-값 쌍 목록을 사용합니다. 정책에 유효한 값은 allow(기본값) 및 deny입니다. 이 플래그의 예시 값은 다음과 같습니다.

    --location-policy=us-east1-b=allow,us-east1-c=deny
    
  • TARGET_SHAPE: 지정된 영역에서 VM 분산입니다. --location-policy 플래그를 사용하여 영역을 지정합니다. 다음 표에는 이 플래그의 유효한 값이 나와 있습니다.

    설명
    ANY_SINGLE_ZONE 단일 영역에서 VM 배치를 적용하고 미사용 예약의 사용률에 우선순위를 지정합니다. 영역 간 네트워크 이그레스를 방지하거나 네트워크 지연 시간을 줄이려면 이를 사용합니다. 이 설정이 기본 설정입니다.
    BALANCED 리전의 모든 영역에 VM을 균일하게 배포하려고 합니다.
    ANY 리전 하나의 여러 영역에 VM을 배포할 수 있습니다. 사용 가능한 리소스가 있고 미사용 영역 예약을 극대화하는 영역을 선택합니다.

REST

리전 하나에서 VM을 일괄 생성하려면 다음 instances.bulkInsert 메서드를 사용합니다.

POST https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/instances/bulkInsert

{
  ...
  "namePattern": "NAME_PATTERN",
  "perInstanceProperties": {
    "PREDEFINED_NAME_1": {},
    "PREDEFINED_NAME_2": {},
    ...
  },
  "count": COUNT,
  "minCount": MIN_COUNT,
  "locationPolicy": {
    "LOCATION_POLICY"
    },
    "targetShape": "TARGET_SHAPE"
  ...
}

다음을 바꿉니다.

  • PROJECT_ID: 프로젝트 ID

  • REGION: VM을 생성할 리전

  • NAME_PATTERN: VM의 이름 패턴 이름을 지정하거나 perInstanceProperties을 지정하세요. Compute Engine에 일련의 해시(#) 문자를 사용하여 일련의 숫자로 바꿉니다. 예를 들어 이름 패턴에 vm-#을 사용하면 vm-1, vm-2 등의 이름으로 VM이 생성되므로 최대 --count에서 지정한 최대 VM 수는 이름 패턴에서 허용하는 VM 수보다 작거나 같아야 합니다.

    이름 패턴을 사용할 경우 Compute Engine은 이전 요청에서 생성된 기존 VM의 이름을 확인하여 이름 충돌을 방지합니다.

  • PREDEFINED_NAME_1, PREDEFINED_NAME_2, ...: 생성할 VM의 사전 정의된 이름 목록입니다. 이름을 지정하거나 namePattern을 지정하세요. 이 플래그를 사용하여 COUNT를 지정하는 경우 COUNT는 제공된 이름 수와 같아야 합니다.

  • COUNT: 만들 VM 수. 이 수는 NAME_PATTERN에서 허용하는 VM 수보다 작거나 같아야 합니다. 또는 perInstanceProperties를 사용하는 경우에는 COUNT를 지정할 필요는 없지만, 지정할 경우 제공된 이름 수와 동일해야 합니다.

  • MIN_COUNT: 만들 최소 VM 수. 다음 표에서는 이 플래그 설정 방법에 따른 요청 동작을 설명합니다.

    설명
    설정되지 않음 기본값은 COUNT입니다. Compute Engine에서 COUNT로 지정된 VM 수를 만들 수 없으면 요청이 실패하고 VM이 생성되지 않습니다.
    1 Compute Engine은 가능한 한 많은 VM을 최대 COUNT개까지 만듭니다.
    1보다 크고 COUNT보다 작음 Compute Engine은 VM을 최소 MIN_COUNT 이상, 최대 COUNT 이하로 만듭니다. MIN_COUNT VM을 만들 수 없으면 요청이 실패하고 VM이 생성되지 않습니다.
  • LOCATION_POLICY: 리전 내에 포함하거나 제외할 영역. 영역을 키로 사용하고 정책을 값으로 사용하여 키-값 쌍 목록을 사용합니다. 정책에 유효한 값은 ALLOW(기본값) 및 DENY입니다. 이 필드의 예시 값은 다음과 같습니다.

    "locations": {
      "zones/us-central1-a": { "preference": "ALLOW" },
      "zones/us-central1-c": { "preference": "DENY"  },
      ...
    },
    
  • TARGET_SHAPE: 지정된 영역에서 VM 분산. locationPolicy 필드를 사용하여 영역을 지정합니다. 다음 표에는 이 필드의 유효한 값이 나와 있습니다.

    설명
    ANY_SINGLE_ZONE 단일 영역에서 VM 배치를 적용하고 미사용 예약의 사용률에 우선순위를 지정합니다. 영역 간 네트워크 이그레스를 방지하거나 네트워크 지연 시간을 줄이려면 이를 사용합니다. 이 설정이 기본 설정입니다.
    BALANCED 리전의 모든 영역에 VM을 균일하게 배포하려고 합니다.
    ANY 리전 하나의 여러 영역에 VM을 배포할 수 있습니다. 사용 가능한 리소스가 있고 미사용 영역 예약을 극대화하는 영역을 선택합니다.

영역 하나에서 VM 일괄 생성

영역 하나에서 VM을 일괄 생성하려면 gcloud CLI 또는 Compute Engine API를 사용합니다.

gcloud

특정 영역에서 VM을 일괄 생성하려면 다음 gcloud compute instances bulk create 명령어를 사용합니다.

gcloud compute instances bulk create \
    ( --name-pattern="NAME_PATTERN" | --predefined-names=[PREDEFINED_NAMES] ) \
    --zone=ZONE \
    --count=COUNT \
    [ --min-count=MIN_COUNT ]

다음을 바꿉니다.

  • NAME_PATTERN: VM의 이름 패턴 Compute Engine에 일련의 해시(#) 문자를 사용하여 일련의 숫자로 바꿉니다. 예를 들어 이름 패턴에 vm-#을 사용하면 vm-1, vm-2 등의 이름으로 VM이 생성되므로 최대 --count에서 지정한 최대 VM 수는 이름 패턴에서 허용하는 VM 수보다 작거나 같아야 합니다.

    이름 패턴을 사용할 경우 Compute Engine은 이전 요청에서 생성된 기존 VM의 이름을 확인하여 이름 충돌을 방지합니다.

  • PREDEFINED_NAMES: 생성할 VM의 사전 정의된 이름 목록. 이 플래그를 사용하여 COUNT를 지정하는 경우 COUNT는 제공된 이름 수와 같아야 합니다.

  • ZONE: VM을 생성할 영역입니다.

  • COUNT: 만들 VM 수. 이 수는 NAME_PATTERN에서 허용하는 VM 수보다 작거나 같아야 합니다. 또는 --predefined-names를 사용하는 경우에는 COUNT를 지정할 필요는 없지만, 지정할 경우 제공된 이름 수와 동일해야 합니다.

  • MIN_COUNT: 만들 최소 VM 수. 다음 표에서는 이 플래그 설정 방법에 따른 요청 동작을 설명합니다.

    설명
    설정되지 않음 기본값은 COUNT입니다. Compute Engine에서 COUNT로 지정된 VM 수를 만들 수 없으면 요청이 실패하고 VM이 생성되지 않습니다.
    1 Compute Engine은 가능한 한 많은 VM을 최대 COUNT개까지 만듭니다.
    1보다 크고 COUNT보다 작음 Compute Engine은 VM을 최소 MIN_COUNT 이상, 최대 COUNT 이하로 만듭니다. MIN_COUNT VM을 만들 수 없으면 요청이 실패하고 VM이 생성되지 않습니다.

REST

영역 하나에서 VM을 일괄 생성하려면 다음 instances.bulkInsert 메서드를 사용합니다.

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

{
  ...
  "namePattern": "NAME_PATTERN",
  "perInstanceProperties": {
    "PREDEFINED_NAME_1": {},
    "PREDEFINED_NAME_2": {},
    ...
  },
  "count": COUNT,
  "minCount": MIN_COUNT,
  ...
}

다음을 바꿉니다.

  • PROJECT_ID: 프로젝트 ID

  • ZONE: VM을 생성할 영역입니다.

  • NAME_PATTERN: VM의 이름 패턴 이름을 지정하거나 perInstanceProperties을 지정하세요. Compute Engine에 일련의 해시(#) 문자를 사용하여 일련의 숫자로 바꿉니다. 예를 들어 이름 패턴에 vm-#을 사용하면 vm-1, vm-2 등의 이름으로 VM이 생성되므로 최대 --count에서 지정한 최대 VM 수는 이름 패턴에서 허용하는 VM 수보다 작거나 같아야 합니다.

    이름 패턴을 사용할 경우 Compute Engine은 이전 요청에서 생성된 기존 VM의 이름을 확인하여 이름 충돌을 방지합니다.

  • PREDEFINED_NAME_1, PREDEFINED_NAME_2, ...: 생성할 VM의 사전 정의된 이름 목록입니다. 이름을 지정하거나 namePattern을 지정하세요. 이 플래그를 사용하여 COUNT를 지정하는 경우 COUNT는 제공된 이름 수와 같아야 합니다.

  • COUNT: 만들 VM 수. 이 수는 NAME_PATTERN에서 허용하는 VM 수보다 작거나 같아야 합니다. 또는 perInstanceProperties를 사용하는 경우에는 COUNT를 지정할 필요는 없지만, 지정할 경우 제공된 이름 수와 동일해야 합니다.

  • MIN_COUNT: 만들 최소 VM 수. 다음 표에서는 이 플래그 설정 방법에 따른 요청 동작을 설명합니다.

    설명
    설정되지 않음 기본값은 COUNT입니다. Compute Engine에서 COUNT로 지정된 VM 수를 만들 수 없으면 요청이 실패하고 VM이 생성되지 않습니다.
    1 Compute Engine은 가능한 한 많은 VM을 최대 COUNT개까지 만듭니다.
    1보다 크고 COUNT보다 작음 Compute Engine은 VM을 최소 MIN_COUNT 이상, 최대 COUNT 이하로 만듭니다. MIN_COUNT VM을 만들 수 없으면 요청이 실패하고 VM이 생성되지 않습니다.

커스텀 호스트 이름으로 VM 일괄 만들기

gcloud CLI 또는 Compute Engine API를 사용하여 리전 또는 영역에서 커스텀 호스트 이름으로 VM을 일괄 생성할 수 있습니다.

커스텀 호스트 이름에 대한 DNS 레코드를 수동으로 구성해야 합니다. 자세한 내용은 제한사항을 참조하세요.

호스트 이름을 지정하지 않으면 Compute Engine이 VM의 호스트 이름을 다음 중 하나로 설정합니다.

  • VM_NAME.c.PROJECT_ID.internal 전역 DNS를 사용 설정하는 경우
  • VM_NAME.ZONE.c.PROJECT_ID.internal 영역 DNS를 사용 설정하는 경우

자세한 내용은 내부 DNS 이름을 참조하세요.

gcloud

특정 리전에서 커스텀 호스트 이름으로 VM을 일괄 생성하려면 다음 gcloud beta compute instances bulk create 명령어를 사용합니다.

gcloud beta compute instances bulk create \
    ( --name-pattern="NAME_PATTERN" | --predefined-names=[PREDEFINED_NAMES] ) \
    --per-instance-hostnames=[VM_NAME=HOSTNAME,...] \
    --zone=REGION \
    --count=COUNT \
    [ --min-count=MIN_COUNT ]
    [--location-policy=LOCATION_POLICY \ ]
    [--target-distribution-shape=TARGET_SHAPE ]

다음을 바꿉니다.

  • NAME_PATTERN: VM의 이름 패턴 Compute Engine에 일련의 해시(#) 문자를 사용하여 일련의 숫자로 바꿉니다. 예를 들어 이름 패턴에 vm-#을 사용하면 vm-1, vm-2 등의 이름으로 VM이 생성되므로 최대 --count에서 지정한 최대 VM 수는 이름 패턴에서 허용하는 VM 수보다 작거나 같아야 합니다.

    이름 패턴을 사용할 경우 Compute Engine은 이전 요청에서 생성된 기존 VM의 이름을 확인하여 이름 충돌을 방지합니다.

  • PREDEFINED_NAMES: 생성할 VM의 사전 정의된 이름 목록. 이 플래그를 사용하여 COUNT를 지정하는 경우 COUNT는 제공된 이름 수와 같아야 합니다.

  • [VM_NAME=HOSTNAME, ...]: VM에 사전 정의된 이름의 키-값 쌍과 VM에 할당할 정규화된 도메인 호스트 이름의 목록입니다. 커스텀 호스트 이름은 유효한 호스트 이름의 RFC 1035 요구사항을 준수해야 합니다.

  • REGION: VM을 생성할 영역입니다.

  • COUNT: 만들 VM 수. 이 수는 NAME_PATTERN에서 허용하는 VM 수보다 작거나 같아야 합니다. 또는 --predefined-names를 사용하는 경우에는 COUNT를 지정할 필요는 없지만, 지정할 경우 제공된 이름 수와 동일해야 합니다.

  • MIN_COUNT: 만들 최소 VM 수. 다음 표에서는 이 플래그 설정 방법에 따른 요청 동작을 설명합니다.

    설명
    설정되지 않음 기본값은 COUNT입니다. Compute Engine에서 COUNT로 지정된 VM 수를 만들 수 없으면 요청이 실패하고 VM이 생성되지 않습니다.
    1 Compute Engine은 가능한 한 많은 VM을 최대 COUNT개까지 만듭니다.
    1보다 크고 COUNT보다 작음 Compute Engine은 VM을 최소 MIN_COUNT 이상, 최대 COUNT 이하로 만듭니다. MIN_COUNT VM을 만들 수 없으면 요청이 실패하고 VM이 생성되지 않습니다.
  • LOCATION_POLICY: 리전 내에 포함하거나 제외할 영역. 영역을 키로 사용하고 정책을 값으로 사용하여 키-값 쌍 목록을 사용합니다. 정책에 유효한 값은 ALLOW(기본값) 및 DENY입니다. 이 필드의 예시 값은 다음과 같습니다.

    "locations": {
      "zones/us-central1-a": { "preference": "ALLOW" },
      "zones/us-central1-c": { "preference": "DENY"  },
      ...
    },
    
  • TARGET_SHAPE: 지정된 영역에서 VM 분산. locationPolicy 필드를 사용하여 영역을 지정합니다. 다음 표에는 이 필드의 유효한 값이 나와 있습니다.

    설명
    ANY_SINGLE_ZONE 단일 영역에서 VM 배치를 적용하고 미사용 예약의 사용률에 우선순위를 지정합니다. 영역 간 네트워크 이그레스를 방지하거나 네트워크 지연 시간을 줄이려면 이를 사용합니다. 이 설정이 기본 설정입니다.
    BALANCED 리전의 모든 영역에 VM을 균일하게 배포하려고 합니다.
    ANY 리전 하나의 여러 영역에 VM을 배포할 수 있습니다. 사용 가능한 리소스가 있고 미사용 영역 예약을 극대화하는 영역을 선택합니다.

REST

특정 리전에서 커스텀 호스트 이름으로 VM을 일괄적으로 만들려면 다음 instances.bulkInsert 메서드를 사용합니다.

POST https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/instances/bulkInsert

{
  ...
  "namePattern": "NAME_PATTERN",
  "perInstanceProperties": {
    "PREDEFINED_NAME_1": {"hostname": HOSTNAME_1},
    "PREDEFINED_NAME_2": {"hostname": HOSTNAME_2},
    ...
  },
  "count": COUNT,
  "minCount": MIN_COUNT,
  "locationPolicy": {
    "LOCATION_POLICY"
    },
    "targetShape": "TARGET_SHAPE"
  ...
}

다음을 바꿉니다.

  • PROJECT_ID: 프로젝트 ID

  • REGION: VM을 생성할 리전

  • NAME_PATTERN: VM의 이름 패턴 이름을 지정하거나 perInstanceProperties을 지정하세요. Compute Engine에 일련의 해시(#) 문자를 사용하여 일련의 숫자로 바꿉니다. 예를 들어 이름 패턴에 vm-#을 사용하면 vm-1, vm-2 등의 이름으로 VM이 생성되므로 최대 --count에서 지정한 최대 VM 수는 이름 패턴에서 허용하는 VM 수보다 작거나 같아야 합니다.

    이름 패턴을 사용할 경우 Compute Engine은 이전 요청에서 생성된 기존 VM의 이름을 확인하여 이름 충돌을 방지합니다.

  • PREDEFINED_NAME_1, PREDEFINED_NAME_2, ...: 생성할 VM의 사전 정의된 이름 목록입니다. 이름을 지정하거나 namePattern을 지정하세요. 이 플래그를 사용하여 COUNT를 지정하는 경우 COUNT는 제공된 이름 수와 같아야 합니다.

  • HOSTNAME_1, HOSTNAME_2, ...: VM에 할당할 정규화된 도메인 호스트 이름입니다. 커스텀 호스트 이름은 유효한 호스트 이름의 RFC 1035 요구사항을 준수해야 합니다.

    예를 들어 각각 커스텀 호스트 이름 my-host1234.example.comtest.example.com으로 2개의 VM vm-1vm-2를 만들려면 다음과 같이 perInstanceProperties에서 hostname 속성을 지정합니다.

    {
    ...
    "perInstanceProperties": {
    "vm-1": { "hostname": "my-host1234.example.com" },
    "vm-2": { "hostname": "test.example.com" },
    ...
    },
    
  • COUNT: 만들 VM 수. 이 수는 NAME_PATTERN에서 허용하는 VM 수보다 작거나 같아야 합니다. 또는 perInstanceProperties를 사용하는 경우에는 COUNT를 지정할 필요는 없지만, 지정할 경우 제공된 이름 수와 동일해야 합니다.

  • MIN_COUNT: 만들 최소 VM 수. 다음 표에서는 이 플래그 설정 방법에 따른 요청 동작을 설명합니다.

    설명
    설정되지 않음 기본값은 COUNT입니다. Compute Engine에서 COUNT로 지정된 VM 수를 만들 수 없으면 요청이 실패하고 VM이 생성되지 않습니다.
    1 Compute Engine은 가능한 한 많은 VM을 최대 COUNT개까지 만듭니다.
    1보다 크고 COUNT보다 작음 Compute Engine은 VM을 최소 MIN_COUNT 이상, 최대 COUNT 이하로 만듭니다. MIN_COUNT VM을 만들 수 없으면 요청이 실패하고 VM이 생성되지 않습니다.
  • LOCATION_POLICY: 리전 내에 포함하거나 제외할 영역. 영역을 키로 사용하고 정책을 값으로 사용하여 키-값 쌍 목록을 사용합니다. 정책에 유효한 값은 ALLOW(기본값) 및 DENY입니다. 이 필드의 예시 값은 다음과 같습니다.

    "locations": {
      "zones/us-central1-a": { "preference": "ALLOW" },
      "zones/us-central1-c": { "preference": "DENY"  },
      ...
    },
    
  • TARGET_SHAPE: 지정된 영역에서 VM 분산. locationPolicy 필드를 사용하여 영역을 지정합니다. 다음 표에는 이 필드의 유효한 값이 나와 있습니다.

    설명
    ANY_SINGLE_ZONE 단일 영역에서 VM 배치를 적용하고 미사용 예약의 사용률에 우선순위를 지정합니다. 영역 간 네트워크 이그레스를 방지하거나 네트워크 지연 시간을 줄이려면 이를 사용합니다. 이 설정이 기본 설정입니다.
    BALANCED 리전의 모든 영역에 VM을 균일하게 배포하려고 합니다.
    ANY 리전 하나의 여러 영역에 VM을 배포할 수 있습니다. 사용 가능한 리소스가 있고 미사용 영역 예약을 극대화하는 영역을 선택합니다.

VM 일괄 생성 요청 상태 확인

변형 요청을 만들면 폴링하여 Compute Engine에서 작업 상태를 가져올 수 있는 operation 리소스를 반환합니다. 자세한 내용은 API 응답 처리를 참조하세요.

일괄 삽입 요청의 상태를 가져오려면 operation 리소스에 HTTP GET 요청을 전송합니다.

GET compute/v1/projects/PROJECT_ID/zones/ZONE/operations/OPERATION_ID

리전 일괄 삽입 요청의 상태를 가져오려면 다음 요청을 보냅니다.

GET compute/v1/projects/PROJECT_ID/regions/REGION/operations/OPERATION_ID

다음을 바꿉니다.

  • PROJECT_ID: VM을 만들 프로젝트의 ID
  • REGION: VM을 만들 리전
  • ZONE: VM을 만들 영역
  • OPERATION_ID: 일괄 삽입 작업 ID

응답의 instancesBulkInsertOperationMetadata 객체에는 다음 작업 세부정보가 포함됩니다.

  • status: 상태는 다음 중 하나입니다.
    • CREATING: VM 생성이 진행 중입니다.
    • ROLLING_BACK: 요청이 실패하여 롤백되는 중입니다.
    • DONE: VM 생성 또는 롤백이 성공적으로 완료되었습니다.
  • targetVmCount: 지정된 영역에 만들 VM 수입니다.
  • createdVmCount: 지정된 영역에 이미 생성된 VM 수입니다.
  • failedToCreateVmCount: 지정된 영역에서 생성에 실패한 VM 수입니다.
  • deletedVmCount: 실패한 작업의 롤백의 일부로 삭제된 VM 수입니다.

응답의 progress 필드는 작업 완료 비율을 나타냅니다.

Compute Engine에서 최소 VM 수를 성공적으로 만들고 더 이상 VM 생성 또는 요청 롤백이 발생하지 않을 때까지는 일괄 삽입 작업의 상태가 RUNNING입니다.

일괄 삽입 작업이 진행 중이면 다음과 비슷한 응답이 표시됩니다.

{
  "kind" : "compute#operation",
  "id": "4653028658507445766",
  "name": "operation-1587661030638-5a3f823c143e3-e33bbfa3-bd72185c",
  "operationType": "bulkInsert",
  "targetLink":  "https://googleapis.com/compute/v1/projects/my-project"
  "targetId": 4653028658507445766,
  "status": "RUNNING",
  "progress": 2,
  "user": "example@google.com",
  "insertTime": "2023-04-23T09:57:13.474-07:00",
  "startTime": "2023-04-23T09:57:13.474-07:00",
  "selfLink": "https://googleapis.com/compute/v1/projects/my-project/zones/us-central1-a/operations/operation-1587661030638-5a3f823c143e3-e33bbfa3-bd72185c",
  "operationGroupId": "4653028658507445766",
  "metadata":
    "instances_bulk_insert_operation_metadata": {
      "per_location_status": {
         "zones/us-central1-a": {
           "status": "CREATING",
           "targetVmCount": 50,
           "createdVmCount": 1
         }
      }
    }
}

이 예시에서는 인스턴스 하나가 성공적으로 생성되었으며 작업은 2% 완료되었습니다.

Compute Engine이 minCount로 지정된 최소 VM 수를 성공적으로 만들거나 Compute Engine이 요청 롤백을 완료하면 작업에서 DONE 상태를 반환합니다. 요청된 수의 VM을 성공적으로 만들면 다음과 비슷한 응답이 표시됩니다.

{
  "endTime": "2023-04-23T09:58:13.474-07:00",
  "id": "5053101474378293244",
  "insertTime": "2023-04-23T09:57:13.474-07:00",
  "instancesBulkInsertOperationMetadata": {
    "perLocationStatus": {
      "zones/us-central1-a": {
        "status": "DONE",
        "createdVmCount": 50,
        "targetVmCount": 50
      }
    }
  },
  "kind": "compute#operation",
  "name": "operation-1587661030638-5a3f823c143e3-e33bbfa3-bd72185c",
  "operationGroupId": "4653028658507445766",
  "operationType": "bulkInsert",
  "progress": 100,
  "selfLink": "https://www.googleapis.com/compute/v1/projects/my-project/zones/us-central1-a/operations/operation-1587661030638-5a3f823c143e3-e33bbfa3-bd72185c",
  "startTime": "2023-09-11T16:21:55.629-07:00",
  "status": "DONE",
  "targetId": "625521788110",
  "targetLink": "https://www.googleapis.com/compute/v1/projects/my-project",
  "user": "example@google.com",
  "zone": "https://www.googleapis.com/compute/v1/projects/my-project/zones/us-central1-a"
}

자세한 내용은 instancesBulkInsertOperationMetadata 객체 문서를 참조하세요.

단일 VM 상태 확인

VM 일괄 생성 요청으로 생성된 단일 VM의 상태를 확인하려면 gcloud CLI 또는 Compute Engine API를 사용합니다.

gcloud

  1. 요청에서 반환된 Operation에서 operationGroupId 속성 값을 가져옵니다.

  2. gcloud compute operations list 명령어operationGroupId 속성을 필터로 사용하여 리전 또는 영역 요청과 연결된 VM의 프로젝트에서 모든 작업과 모든 영역을 검색합니다.

    gcloud compute operations list \
       --filter=(operationGroupId=OPERATION_GROUP_ID)
    
  3. 다음 중 하나를 수행하여 VM의 나머지 속성을 가져오세요.

    • 작업 목록에서 targetLink는 VM 경로를 나타냅니다. 이 경로와 함께 gcloud compute instances describe 명령어를 VM 이름으로 사용하여 VM 속성을 가져옵니다.

      gcloud compute instances describe VM_NAME
      
    • 작업 목록에서 VM 이름이 포함된 필터와 함께 gcloud compute instances list 명령어를 사용합니다.

      gcloud compute instances list VM_NAME \
         --filter=(name=VM_NAME_1) OR (name=VM_NAME_2)
      
    • gcloud compute instances list 명령어를 사용하여 모든 영역과 리전의 VM 속성을 가져오고, 인스턴스 고유의 라벨 또는 인스턴스 이름으로 필터링합니다.

      gcloud compute instances list \
         --filter=(name=VM_NAME_1) OR (name=VM_NAME_2)
      

REST

  1. 요청에서 반환된 Operation에서 operationGroupId 속성 값을 가져옵니다.

  2. operationGroupId 속성을 사용하여 리전 또는 영역 요청과 관련된 VM 작업 목록을 가져옵니다.

    • 리전 요청을 전송한 경우 프로젝트의 모든 작업과 모든 영역을 검색하려면 globalOperations.aggregatedList 메서드를 사용하고 operationGroupId 속성을 필터로 사용합니다.

      GET https://compute.googleapis.com/compute/v1/projects/PROJECT_NAME/aggregated/operations?filter=(operationGroupId=OPERATION_GROUP_ID)
      
    • 영역 요청을 전송한 경우 해당 영역의 작업을 나열하려면 zoneOperations.get 메서드를 사용하고 요청 본문에 operationGroupId 속성을 포함합니다.

      GET https://compute.googleapis.com/compute/v1/projects/PROJECT_NAME/zones/ZONE/instances/bulkInsert
      
      {
      ...
      "operationGroupId":"OPERATION_GROUP_ID"
      ...
      }
      
  3. 다음 중 하나를 수행하여 VM의 나머지 속성을 가져오세요.

    • 작업 목록에서 targetLink는 VM 경로를 나타냅니다. instances.get 메서드를 이 경로와 함께 VM 이름으로 사용하여 VM의 모든 속성을 가져옵니다.

      GET https://compute.googleapis.com/compute/v1/projects/PROJECT_NAME/zones/ZONE/instances/VM_NAME
      
    • 작업 목록에서 VM의 이름이 포함된 필터와 함께 instances.get 메서드를 사용합니다.

      GET https://compute.googleapis.com/compute/v1/projects/PROJECT_NAME/zones/ZONE/instances?filter=(name=VM_NAME_1) OR (name=VM_NAME_2)
      
    • instances.aggregatedList 메서드를 사용하여 모든 영역과 리전의 VM 속성을 가져오고, 인스턴스 고유의 라벨 또는 인스턴스 이름으로 필터링합니다.

      GET https://compute.googleapis.com/compute/v1/projects/PROJECT_NAME/aggregated/instances?filter=(name=VM_NAME_1) OR (name=VM_NAME_2)
      

의사코드 예시

다음 의사코드 예시에서는 VM 일괄 생성 요청을 맞춤설정하는 방법을 보여줍니다.

리전 집합의 리전 하나에서 VM 일괄 생성

다음 의사코드에서는 리전 집합의 리전 하나에 VM 1,000개를 만드는 방법을 설명합니다. 리전 집합의 리전 하나에 VM을 일괄 생성하려는 경우 먼저 요청에서 용량을 확인합니다. 용량이 부족하면 요청이 즉시 실패하고 집합의 다음 리전을 사용하여 다시 시도합니다.

  1. 영역 내에 만들 VM 수를 지정하세요.

    nTarget = 1000
    
  2. VM을 만들 리전을 지정하세요.

    acceptableRegions = ["us-central1", "us-east1", "us-west1"]
    
  3. 리전을 반복하고 성공할 때까지 각 리전에 VM 만들기를 시도하세요.

    for region in acceptableRegions:
      call bulk API: region=region, location-policy=location-policy, count=nTarget
      if request succeeds and the operation succeeds:
        break
    

머신 유형의 영역 하나에서 VM 일괄 생성

다음 의사코드에서는 지정된 머신 유형의 영역 하나에 VM을 여러 개 만드는 방법을 설명합니다. 같은 머신 유형에서 VM을 일괄 생성하려는 경우 먼저 요청에서 이러한 머신 유형의 가용성을 확인합니다. 사용 가능한 머신 유형이 부족하면 요청이 즉시 실패하고 다음 머신 유형을 사용하여 다시 시도합니다.

  1. 생성할 VM 수와 VM을 생성할 리전을 지정하세요.

    nTarget = 1000
    region = "us-central1"
    
  2. VM을 만들 머신 계열을 지정하세요.

    acceptableMachineFamilies = ["n2","c2","e2","n1"]
    
  3. 머신 유형 집합을 반복하면서 성공할 때까지 머신 유형에서 VM 생성을 시도하세요.

    for family in acceptableMachineFamilies:
      call bulk APIs: region=region, count=nTarget, machineFamily=family
      if request succeeds and the operation succeeds:
        break
    

영역 하나에 VM을 5,000개 넘게 만들기

VM을 일괄 생성할 때 요청마다 VM을 5,000개까지만 만들 수 있습니다. 다음 의사코드에서는 요청을 여러 개 실행하여 영역 하나에 VM을 5,000개 넘게 만드는 방법을 설명합니다.

  1. 생성할 VM 수, 생성된 총 VM 수를 추적하는 카운터, VM을 만들 리전, Compute Engine이 VM을 생성하는 영역을 저장할 변수를 지정하세요.

    nTarget = 10000
    nCreated = 0
    region = "us-central1"
    targetZone = ""
    
  2. 초기 요청을 실행하여 VM 5,000개를 만들고 요청에서 반환된 영역을 저장한 후 생성된 VM 수의 카운터를 업데이트합니다.

    call bulk API: region=region, count=5000
    targetZone = zone chosen by bulk API
    nCreated += # of VMs created
    
  3. 요청을 계속 실행하면 Compute Engine에서 VM을 지정된 수만큼 만들 때까지 영역 하나에서 VM을 한 번에 최대 5,000개까지 만들 수 있습니다.

    while(nTarget - nCreated > 0):
      call bulk API: zone=targetZone, count=5000
      nCreated += # of VMs created
    

VM 일괄 생성 및 상태 보기

다음 절차에서는 사전 정의된 이름의 VM 그룹을 만든 후 상태를 보는 방법을 보여줍니다.

  1. 만들 VM 수, VM을 만들 영역, 이름을 저장할 데이터 구조를 지정하세요.

    nTarget = 1000
    targetZone = "us-central-1a"
    names = []
    
  2. 패턴의 VM 이름을 생성하고 데이터 구조에 추가하세요.

    for n in range(0, 1000):
      names.push("instance-%d".format(n))
    
  3. VM을 만들고 perInstanceProperties을 사용하여 이름을 지정하세요.

    call bulk API(zone=targetZone, count=nTarget, names=perInstanceProperties)
    
  4. 세부정보를 반환하기 위해 VM의 이름 필터와 함께 instances.list 메서드를 사용하여 VM의 세부정보를 가져옵니다.

    instances.list(filter=(name = "instance-1") OR (name = "instance-2") ...)
    

다음 단계

VM을 일괄 생성한 후 다음 중 하나 또는 둘 다 수행하여 VM 관리를 간소화합니다.