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_DISTRIBUTION_SHAPE ]

次のように置き換えます。

  • NAME_PATTERN: VM の名前パターン。Compute Engine の一連のハッシュ(#)文字を使用して、一連の数値に置き換えます。たとえば、名前パターンに vm-# を使用すると、vm-1vm-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 は、少なくとも MIN_COUNT 台の VM、最大 COUNT 台の VM を作成します。MIN_COUNT 台の VM を作成できない場合、リクエストは失敗し、VM は作成されません。
  • LOCATION_POLICY: リージョン内に含めるゾーンまたは除外するゾーン。ゾーンをキー、ポリシーを値とする Key-Value ペアのリストを使用します。ポリシーの有効な値は、デフォルトの allowdeny です。このフラグの値の例を次に示します。

    --location-policy=us-east1-b=allow,us-east1-c=deny
    
  • TARGET_DISTRIBUTION_SHAPE: 指定されたゾーンでの VM の分布。--location-policy フラグを使用してゾーンを指定します。このフラグの有効な値を次の表に示します。

    説明
    ANY_SINGLE_ZONE 単一のゾーンに VM の配置を適用し、未使用の予約の使用を優先します。これは、ゾーンをまたぐ下り(外向き)ネットワークを回避したり、ネットワーク レイテンシを短縮したりするために使用します。これがデフォルト値です。
    BALANCED VM をリージョン内のすべてのゾーンに均等に分散しようとします。
    ANY リージョン内の複数のゾーンに VM を分散できます。使用可能なリソースがあり、未使用のゾーン予約を最大化するゾーンを選択します。

REST

リージョン内に VM を一括作成するには、次の instances.bulkInsert メソッドを使用します。

POST https://compute.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_DISTRIBUTION_SHAPE"
  ...
}

次のように置き換えます。

  • PROJECT_ID: プロジェクト ID。

  • REGION: VM を作成するリージョン。

  • NAME_PATTERN: VM の名前パターン。これを指定するか、perInstanceProperties を指定します。Compute Engine の一連のハッシュ(#)文字を使用して、一連の数値に置き換えます。たとえば、名前パターンに vm-# を使用すると、vm-1vm-2 といった名前の VM が、--count で指定された VM の数まで生成されます。この数は、名前パターンで許可されている VM の数以下にする必要があります。

    名前パターンを使用すると、Compute Engine は以前のリクエストから作成された既存の VM の名前を確認して名前の競合を回避しようとします。

  • PREDEFINED_NAME_1PREDEFINED_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 は、少なくとも MIN_COUNT 台の VM、最大 COUNT 台の VM を作成します。MIN_COUNT 台の VM を作成できない場合、リクエストは失敗し、VM は作成されません。
  • LOCATION_POLICY: リージョン内に含めるゾーンまたは除外するゾーン。ゾーンをキー、ポリシーを値とする Key-Value ペアのリストを使用します。ポリシーの有効な値は、デフォルトの ALLOWDENY です。このフィールドの値の例を次に示します。

    "locations": {
      "zones/us-central1-a": { "preference": "ALLOW" },
      "zones/us-central1-c": { "preference": "DENY"  },
      ...
    },
    
  • TARGET_DISTRIBUTION_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-1vm-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 は、少なくとも MIN_COUNT 台の VM、最大 COUNT 台の VM を作成します。MIN_COUNT 台の VM を作成できない場合、リクエストは失敗し、VM は作成されません。

REST

ゾーン内に VM を一括作成するには、次の instances.bulkInsert メソッドを使用します。

POST https://compute.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-1vm-2 といった名前の VM が、--count で指定された VM の数まで生成されます。この数は、名前パターンで許可されている VM の数以下にする必要があります。

    名前パターンを使用すると、Compute Engine は以前のリクエストから作成された既存の VM の名前を確認して名前の競合を回避しようとします。

  • PREDEFINED_NAME_1PREDEFINED_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 は、少なくとも MIN_COUNT 台の VM、最大 COUNT 台の VM を作成します。MIN_COUNT 台の VM を作成できない場合、リクエストは失敗し、VM は作成されません。

カスタムホスト名を使用して VM を一括作成する

gcloud CLI または Compute Engine API を使用すると、リージョンまたはゾーンにカスタムホスト名を指定して VM を一括作成できます。

カスタムホスト名の DNS レコードは手動で構成する必要があります。詳細については、制限事項をご覧ください。

ホスト名を指定しない場合、Compute Engine は VM のホスト名を次のいずれかに設定します。

  • グローバル DNS を有効にする場合: VM_NAME.c.PROJECT_ID.internal
  • ゾーン DNS を有効にする場合: VM_NAME.ZONE.c.PROJECT_ID.internal

詳細については、内部 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_DISTRIBUTION_SHAPE ]

次のように置き換えます。

  • NAME_PATTERN: VM の名前パターン。Compute Engine の一連のハッシュ(#)文字を使用して、一連の数値に置き換えます。たとえば、名前パターンに vm-# を使用すると、vm-1vm-2 といった名前の VM が、--count で指定された VM の数まで生成されます。この数は、名前パターンで許可されている VM の数以下にする必要があります。

    名前パターンを使用すると、Compute Engine は以前のリクエストから作成された既存の VM の名前を確認して名前の競合を回避しようとします。

  • PREDEFINED_NAMES: 作成する VM の事前定義名のリスト。このフラグを使用して COUNT を指定する場合、COUNT は指定された名前の数と同じである必要があります。

  • [VM_NAME=HOSTNAME, ...]: 事前定義された VM 名と VM に割り当てる完全修飾ドメインホスト名の key-value ペアのリスト。カスタムホスト名は、有効なホスト名に関する 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 は、少なくとも MIN_COUNT 台の VM、最大 COUNT 台の VM を作成します。MIN_COUNT 台の VM を作成できない場合、リクエストは失敗し、VM は作成されません。
  • LOCATION_POLICY: リージョン内に含めるゾーンまたは除外するゾーン。ゾーンをキー、ポリシーを値とする Key-Value ペアのリストを使用します。ポリシーの有効な値は、デフォルトの ALLOWDENY です。このフィールドの値の例を次に示します。

    "locations": {
      "zones/us-central1-a": { "preference": "ALLOW" },
      "zones/us-central1-c": { "preference": "DENY"  },
      ...
    },
    
  • TARGET_DISTRIBUTION_SHAPE: 指定されたゾーンでの VM の分布。locationPolicy フィールドを使用してゾーンを指定します。このフィールドの有効な値を次の表に示します。

    説明
    ANY_SINGLE_ZONE 単一のゾーンに VM の配置を適用し、未使用の予約の使用を優先します。これは、ゾーンをまたぐ下り(外向き)ネットワークを回避したり、ネットワーク レイテンシを短縮したりするために使用します。これがデフォルト値です。
    BALANCED VM をリージョン内のすべてのゾーンに均等に分散しようとします。
    ANY リージョン内の複数のゾーンに VM を分散できます。使用可能なリソースがあり、未使用のゾーン予約を最大化するゾーンを選択します。

REST

特定のリージョンでカスタムホスト名を使用して VM を一括作成するには、次の instances.bulkInsert メソッドを使用します。

POST https://compute.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_DISTRIBUTION_SHAPE"
  ...
}

次のように置き換えます。

  • PROJECT_ID: プロジェクト ID。

  • REGION: VM を作成するリージョン。

  • NAME_PATTERN: VM の名前パターン。これを指定するか、perInstanceProperties を指定します。Compute Engine の一連のハッシュ(#)文字を使用して、一連の数値に置き換えます。たとえば、名前パターンに vm-# を使用すると、vm-1vm-2 といった名前の VM が、--count で指定された VM の数まで生成されます。この数は、名前パターンで許可されている VM の数以下にする必要があります。

    名前パターンを使用すると、Compute Engine は以前のリクエストから作成された既存の VM の名前を確認して名前の競合を回避しようとします。

  • PREDEFINED_NAME_1PREDEFINED_NAME_2、...: 作成する VM の事前定義名のリスト。これを指定するか、namePattern を指定します。このフラグを使用して COUNT を指定する場合、COUNT は指定された名前の数と同じである必要があります。

  • HOSTNAME_1, HOSTNAME_2, ...: VM に割り当てる完全修飾ドメインホスト名。カスタムホスト名は、有効なホスト名に関する RFC 1035 の要件を満たしている必要があります。

    たとえば、2 台の VM vm-1vm-2 にそれぞれカスタムホスト名 my-host1234.example.comtest.example.com を付けて作成するには、perInstancePropertieshostname プロパティを次のように指定します。

    {
    ...
    "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 は、少なくとも MIN_COUNT 台の VM、最大 COUNT 台の VM を作成します。MIN_COUNT 台の VM を作成できない場合、リクエストは失敗し、VM は作成されません。
  • LOCATION_POLICY: リージョン内に含めるゾーンまたは除外するゾーン。ゾーンをキー、ポリシーを値とする Key-Value ペアのリストを使用します。ポリシーの有効な値は、デフォルトの ALLOWDENY です。このフィールドの値の例を次に示します。

    "locations": {
      "zones/us-central1-a": { "preference": "ALLOW" },
      "zones/us-central1-c": { "preference": "DENY"  },
      ...
    },
    
  • TARGET_DISTRIBUTION_SHAPE: 指定されたゾーンでの VM の分布。locationPolicy フィールドを使用してゾーンを指定します。このフィールドの有効な値を次の表に示します。

    説明
    ANY_SINGLE_ZONE 単一のゾーンに VM の配置を適用し、未使用の予約の使用を優先します。これは、ゾーンをまたぐ下り(外向き)ネットワークを回避したり、ネットワーク レイテンシを短縮したりするために使用します。これがデフォルト値です。
    BALANCED VM をリージョン内のすべてのゾーンに均等に分散しようとします。
    ANY リージョン内の複数のゾーンに VM を分散できます。使用可能なリソースがあり、未使用のゾーン予約を最大化するゾーンを選択します。

VM の一括作成リクエストのステータスを確認する

ミューテーション リクエストを作成すると、Compute Engine から operation リソースが返されます。このリソースをポーリングすると、オペレーションのステータスを取得できます。詳細については、API レスポンスの処理をご覧ください。

一括挿入リクエストのステータスを取得するには、operation リソースに HTTP GET リクエストを送信します。

GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/operations/OPERATION_ID

リージョンの一括挿入リクエストのステータスを取得するには、次のリクエストを送信します。

GET https://compute.googleapis.com/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://www.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://www.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
         }
      }
    }
}

この例では、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 のパスを表します。このパスを VM の名前として指定して gcloud compute instances describe メソッドを使用し、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 のパスを表します。このパスを VM の名前として指定した instances.get メソッドを使用し、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 の一括作成リクエストをカスタマイズする方法を示します。

複数のリージョンの 1 つに VM を一括作成する

次の疑似コードでは、複数のリージョンの 1 つに 1,000 台の VM を作成する方法を示します。複数のリージョンの 1 つに 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
    

1 つのマシンタイプに対してゾーンで VM を一括作成する

次の疑似コードでは、指定されたマシンタイプに対してゾーンで複数の VM を作成する方法を示します。同じマシンタイプで VM を一括作成しようとすると、リクエストで最初にマシンタイプの利用可否が確認されます。使用可能なマシンタイプが十分でないとリクエストはすぐに失敗し、次のマシンタイプで再試行されます。

  1. 作成する 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
    

1 つのゾーンに 5,000 台以上の VM を作成する

VM を一括作成する場合、各リクエストで作成できる VM は 5,000 台です。次の擬似コードでは、複数のリクエストを発行することで 1 つのゾーンに 5,000 台以上の VM を作成する方法を示します。

  1. 作成する VM の数、作成された VM の合計数を追跡するカウンタ、VM を作成するリージョン、Compute Engine が VM を作成するゾーンを保存する変数を指定します。

    nTarget = 10000
    nCreated = 0
    region = "us-central1"
    targetZone = ""
    
  2. 最初のリクエストを発行して 5,000 台の VM を作成し、そのリクエストで返されるゾーンを保存して、作成した VM の数のカウンタを更新します。

    call bulk API: region=region, count=5000
    targetZone = zone chosen by bulk API
    nCreated += # of VMs created
    
  3. Compute Engine が指定された数の VM を作成するまで、ゾーンで一度に最大 5,000 台の VM を作成するリクエストを発行し続けます。

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

VM を一括作成してステータスを表示する

次の手順では、事前定義された名前を付けて VM のグループを作成し、そのステータスを表示する方法を示します。

  1. 作成する 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 の管理を簡素化します。