バルクモードを使用する MIG を作成する

このドキュメントでは、MIG でバルクモードを使用して、必要なすべての仮想マシン(VM)インスタンスを同時に作成する方法について説明します。インスタンスを一度に作成することで、MIG は必要なすべてのリソースが使用可能になった場合にのみインスタンスを作成できます。

バルクモードの仕組みについては、 MIG でのインスタンスの一括作成についてをご覧ください。

インスタンス テンプレートの作成

MIG のバルクモードは、予約で制限されたプロビジョニング モデルまたは Flex Start プロビジョニング モデルを指定するインスタンス テンプレートでのみサポートされています。バルクモードを使用するには、次のセクションで説明するように、これらのプロビジョニング モデルのいずれかを使用してインスタンス テンプレートを作成します。プロビジョニング モデルの詳細については、 Compute Engine インスタンスのプロビジョニング モデルをご覧ください。

予約にバインドされたプロビジョニング モデルを使用する

インスタンス テンプレートを作成するには、次のいずれかのオプションを選択します。

コンソール

  1. Google Cloud コンソールで、[インスタンス テンプレート] ページに移動します。

    [インスタンス テンプレート] に移動

  2. [インスタンス テンプレートを作成] をクリックします。[インスタンス テンプレートの作成] ページが開きます。

  3. [名前] フィールドに、インスタンス テンプレートの名前を入力します。

  4. [ロケーション] セクションで、次のいずれかのオプションを選択します。

    • リージョン インスタンス テンプレートを作成するには、[リージョン(推奨)] を選択し、テンプレートを作成するリージョンを選択します。

    • グローバル インスタンス テンプレートを作成するには、[グローバル] を選択します。

  5. [マシンの構成] セクションで、マシンタイプを指定します。

  6. [プロビジョニング モデル] セクションで、次の操作を行います。

    1. [VM プロビジョニング モデルの詳細設定] を開きます。

    2. [VM の終了時] リストで、[削除] を選択します。

  7. 省略可: デフォルト値のブートディスクのタイプまたはイメージを変更するには、[ブートディスク] セクションで [変更] をクリックします。プロンプトに従ってブートディスクを変更します。

  8. [詳細オプション] セクションを開き、次の操作を行います。

    1. [管理] セクションを開きます。

    2. [予約] セクションで [予約を選択] を選択し、[予約を選択] をクリックします。 表示されたペインで、プロンプトに沿って使用する予約を選択します。

  9. [作成] をクリックします。

gcloud

インスタンス テンプレートを作成するには、 instance-templates create コマンドを次のフラグ設定で使用します。

  • --instance-termination-action フラグ。DELETE に設定します。

  • --maintenance-policy フラグ。TERMINATE に設定します。

  • --provisioning-model フラグ。RESERVATION_BOUND に設定します。

  • --reservation-affinity フラグ。specific に設定します。

  • --reservation フラグ。

次のコマンド例は、リージョン インスタンス テンプレートを作成します。グローバル インスタンス テンプレートを作成する場合は、--instance-template-region フラグを使用せずに同じコマンドを使用します。

gcloud compute instance-templates create INSTANCE_TEMPLATE_NAME \
    --image-project=IMAGE_PROJECT \
    --image-family=IMAGE_FAMILY \
    --instance-termination-action=DELETE \
    --instance-template-region=REGION \
    --machine-type=MACHINE_TYPE \
    --maintenance-policy=TERMINATE \
    --provisioning-model=RESERVATION_BOUND \
    --reservation-affinity=specific \
    --reservation=RESERVATION_URL

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

  • INSTANCE_TEMPLATE_NAME: 作成するインスタンス テンプレートの名前。

  • IMAGE_PROJECT: イメージを含むイメージ プロジェクト。例: debian-cloud サポートされているイメージ プロジェクトの詳細については、公開イメージをご覧ください。

  • IMAGE_FAMILY: イメージ ファミリー 。イメージ ファミリーを指定して、非推奨ではない最新の OS イメージを使用します。たとえば、debian-12 を指定すると、Debian 12 イメージ ファミリーの最新バージョンが使用されます。イメージ ファミリーの使用の詳細については、 イメージ ファミリーのベスト プラクティスをご覧ください。

  • REGION: インスタンス テンプレートを作成するリージョン。

  • MACHINE_TYPE: 使用する予約で指定されたマシンタイプ。

  • RESERVATION_URL: 使用するカレンダー モードの将来の予約用に自動作成された予約の URL。次のいずれかの値を指定します。

    • 自動作成された予約がこのプロジェクトに存在する場合: RESERVATION_NAME

    • 自動作成された予約が別のプロジェクトに存在する場合: projects/PROJECT_ID/reservations/RESERVATION_NAME

REST

インスタンス テンプレートを作成するには、次のいずれかのメソッドに POST リクエストを送信します。

リクエスト本文で、次のフィールドを指定します。

  • SPECIFIC_RESERVATION に設定した reservationAffinity.consumeReservationType フィールド。

  • compute.googleapis.com/reservation-name に設定した reservationAffinity.key フィールド。

  • reservationAffinity.values フィールドは、自動作成された予約の URL に設定されます。

  • DELETE に設定した scheduling.instanceTerminationAction フィールド。

  • TERMINATE に設定した scheduling.onHostMaintenance フィールド。

  • RESERVATION_BOUND に設定した scheduling.provisioningModel フィールド。

たとえば、リージョン インスタンス テンプレートを作成するには、次のようにリクエストを送信します。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/instanceTemplates

{
  "name": "INSTANCE_TEMPLATE_NAME",
  "properties": {
    "disks": [
      {
        "boot": true,
        "initializeParams": {
          "sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE"
        }
      }
    ],
    "machineType": "MACHINE_TYPE",
    "networkInterfaces": [
      {
        "network": "global/networks/default"
      }
    ],
    "reservationAffinity": {
      "consumeReservationType": "SPECIFIC_RESERVATION",
      "key": "compute.googleapis.com/reservation-name",
      "values": [
        "RESERVATION_URL"
      ]
    },
    "scheduling": {
      "instanceTerminationAction": "DELETE",
      "onHostMaintenance": "TERMINATE",
      "provisioningModel": "RESERVATION_BOUND"
    }
  }
}

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

  • PROJECT_ID: インスタンス テンプレートを作成するプロジェクトの ID。

  • REGION: インスタンス テンプレートを作成するリージョン。

  • INSTANCE_TEMPLATE_NAME: 作成するインスタンス テンプレートの名前。

  • IMAGE_PROJECT: イメージを含むイメージ プロジェクト。例: debian-cloud サポートされているイメージ プロジェクトの詳細については、公開イメージをご覧ください。

  • IMAGE: 次のいずれかを指定します。

  • MACHINE_TYPE: 使用する予約で指定されたマシンタイプ。

  • RESERVATION_URL: 使用するカレンダー モードの将来の予約用に自動作成された予約の URL。次のいずれかの値を指定します。

    • 自動作成された予約がこのプロジェクトに存在する場合: RESERVATION_NAME

    • 自動作成された予約が別のプロジェクトに存在する場合: projects/PROJECT_ID/reservations/RESERVATION_NAME

インスタンス テンプレートの作成の詳細については、 インスタンス テンプレートを作成するをご覧ください。

Flex Start プロビジョニング モデルを使用する

インスタンス テンプレートを作成するには、次のいずれかのオプションを選択します。

コンソール

  1. Google Cloud コンソールで、[インスタンス テンプレート] ページに移動します。

    [インスタンス テンプレート] に移動

  2. [インスタンス テンプレートを作成] をクリックします。[インスタンス テンプレートの作成] ページが開きます。

  3. [名前] フィールドに、インスタンス テンプレートの名前を入力します。

  4. [ロケーション] セクションで、次のいずれかのオプションを選択します。

    • リージョン インスタンス テンプレートを作成するには、[リージョン(推奨)] を選択し、テンプレートを作成するリージョンを選択します。

    • グローバル インスタンス テンプレートを作成するには、[グローバル] を選択します。

  5. [マシンの構成] セクションで、マシンタイプを指定します。

  6. [プロビジョニング モデル] セクションで、次の操作を行います。

    1. [VM プロビジョニング モデル] フィールドで、[Flex Start] を選択します。

    2. [VM プロビジョニング モデルの詳細設定] を開きます。

    3. [VM の制限時間を設定する] チェックボックスをオンにします。

    4. インスタンス テンプレートを使用して作成された VM の実行時間を設定するには、[時間を入力] フィールドに時間数を入力します。値は 36 秒(0.01)から 7 日間(168)の範囲で指定する必要があります。

  7. 省略可: デフォルト値のブートディスクのタイプまたはイメージを変更するには、[ブートディスク] セクションで [変更] をクリックします。プロンプトに従ってブートディスクを変更します。

  8. [作成] をクリックします。

gcloud

インスタンス テンプレートを作成するには、 instance-templates create コマンドを次のフラグ設定で使用します。

  • --instance-termination-action フラグ。DELETE に設定します。

  • --maintenance-policy フラグ。TERMINATE に設定します。

  • --max-run-duration フラグ。

  • --provisioning-model フラグ。FLEX_START に設定します。

  • --reservation-affinity フラグ。none に設定します。

次のコマンド例は、リージョン インスタンス テンプレートを作成します。グローバル インスタンス テンプレートを作成する場合は、--instance-template-region フラグを使用せずに同じコマンドを使用します。

gcloud compute instance-templates create INSTANCE_TEMPLATE_NAME \
    --image-project=IMAGE_PROJECT \
    --image-family=IMAGE_FAMILY \
    --instance-template-region=REGION \
    --instance-termination-action=DELETE \
    --machine-type=MACHINE_TYPE \
    --maintenance-policy=TERMINATE \
    --max-run-duration=RUN_DURATION \
    --provisioning-model=FLEX_START \
    --reservation-affinity=none

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

  • INSTANCE_TEMPLATE_NAME: 作成するインスタンス テンプレートの名前。

  • IMAGE_PROJECT: イメージを含むイメージ プロジェクト。例: debian-cloud サポートされているイメージ プロジェクトの詳細については、公開イメージをご覧ください。

  • IMAGE_FAMILY: イメージ ファミリー 。イメージ ファミリーを指定して、非推奨ではない最新の OS イメージを使用します。たとえば、debian-12 を指定すると、Debian 12 イメージ ファミリーの最新バージョンが使用されます。イメージ ファミリーの使用の詳細については、 イメージ ファミリーのベスト プラクティスをご覧ください。

  • REGION: インスタンス テンプレートを作成するリージョン。

  • MACHINE_TYPE: Flex Start VM に使用するマシンタイプ。N1 マシンタイプを指定する場合は、 --accelerator フラグ を設定して、VM にアタッチする GPU の数とタイプを定義する必要があります。

  • RUN_DURATION: リクエストされた VM を実行する期間。値は、日数、時間、分、秒として指定し、その後にそれぞれ dhms を続ける必要があります。たとえば、30 分の場合は 30m を指定し、1 日と 2 時間 3 分 4 秒の場合は 1d2h3m4s を指定します。値は 10 分~7 日の範囲で指定してください。

REST

インスタンス テンプレートを作成するには、次のいずれかのメソッドに POST リクエストを送信します。

リクエスト本文で、次のフィールドを指定します。

  • NO_RESERVATION に設定した reservationAffinity.consumeReservationType フィールド。

  • DELETE に設定した scheduling.instanceTerminationAction フィールド。

  • scheduling.maxRunDuration フィールド。

  • TERMINATE に設定した scheduling.onHostMaintenance フィールド。

  • scheduling.provisioningModel フィールド。FLEX_START に設定します。

次のリクエスト例は、リージョン インスタンス テンプレートを作成します。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/instanceTemplates

{
  "name": "INSTANCE_TEMPLATE_NAME",
  "properties": {
    "disks": [
      {
        "boot": true,
        "initializeParams": {
          "sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE"
        }
      }
    ],
    "machineType": "MACHINE_TYPE",
    "networkInterfaces": [
      {
        "network": "global/networks/default"
      }
    ],
    "reservationAffinity": {
      "consumeReservationType": "NO_RESERVATION"
    },
    "scheduling": {
      "instanceTerminationAction": "DELETE",
      "maxRunDuration": {
        "seconds": RUN_DURATION
      },
      "onHostMaintenance": "TERMINATE",
      "provisioningModel": "FLEX_START"
    }
  }
}

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

  • PROJECT_ID: インスタンス テンプレートを作成するプロジェクトの ID。

  • REGION: インスタンス テンプレートを作成するリージョン。

  • INSTANCE_TEMPLATE_NAME: 作成するインスタンス テンプレートの名前。

  • IMAGE_PROJECT: イメージを含むイメージ プロジェクト。例: debian-cloud サポートされているイメージ プロジェクトの詳細については、公開イメージをご覧ください。

  • IMAGE: 次のいずれかを指定します。

  • MACHINE_TYPE: VM に使用するマシンタイプ。N1 マシンタイプを指定する場合は、 guestAccelerators フィールド を含めて、VM にアタッチする GPU の数とタイプを定義する必要があります。

  • RUN_DURATION: リクエストされた VM の実行時間(秒単位)。値は 600(600 秒、10 分)から 604800(604,800 秒、7 日間)の範囲で指定する必要があります。

インスタンス テンプレートの作成の詳細については、 インスタンス テンプレートを作成するをご覧ください。

バルクモードを使用する MIG を作成する

MIG でインスタンスの一括作成を有効にするには、MIG の構成で targetSizePolicy.mode フィールドを BULK に設定します。このバルクモードを使用すると、MIG はリソースが完全に利用可能になるまで待機してから、インスタンスを一度に作成します。

コンソール

  1. [インスタンス グループ] ページに移動します。

    [インスタンス グループ] に移動

  2. [インスタンス グループを作成] をクリックします。[インスタンス グループの作成] ページが開きます。

  3. [名前] フィールドに、MIG の名前を入力します。

  4. インスタンス テンプレートを選択する前に、次の操作を行う必要があります。

    1. Flex Start プロビジョニング モデルを使用する場合は、次のように修復を無効にする必要があります。
      1. [VM インスタンスのライフサイクル] セクションで、[代替ゾーンでの VM の修復を許可する] チェックボックスをオフにします。
      2. [失敗時のデフォルトのアクション] リストで、[アクションなし] を選択します。
    2. [ロケーション] セクションで、次の操作を行います。
      • ゾーン MIG を作成するには、[単一ゾーン] を選択します。
      • リージョン MIG を作成する場合は、[マルチゾーン] を選択します。In the [Target distribution shape], select [Any single zone].表示されたダイアログで、[インスタンスの再分配を無効化] を選択します。
  5. [インスタンス テンプレート] フィールドに戻ります。[インスタンス テンプレート] リストで、前のセクションで作成したインスタンス テンプレートを選択します。

  6. [インスタンス数] フィールドに、一度に作成するインスタンスの数を指定します。

  7. [バルク ターゲット サイズ ポリシーを使用して、一度に VM を取得します] チェックボックスをオンにします。

  8. [作成] をクリックします。

gcloud

一括作成が有効になっている MIG を作成するには、 gcloud compute instance-groups managed create コマンド を使用し、--target-size-policy-mode フラグを bulk に設定します。

Flex Start プロビジョニング モデルを使用する場合は、次のコマンドに --default-action-on-vm-failure=do-nothing フラグを含めて、MIG で修復を無効にする必要があります。

  • ゾーン MIG を作成するには、次のコマンドを実行します。
gcloud compute instance-groups managed create INSTANCE_GROUP_NAME \
    --size=SIZE \
    --target-size-policy-mode=bulk \
    --template=INSTANCE_TEMPLATE_URL \
    --zone=ZONE \
  • リージョン MIG を作成するには、次のコマンドを実行します。
gcloud compute instance-groups managed create INSTANCE_GROUP_NAME \
    --size=SIZE \
    --target-size-policy-mode=bulk \
    --template=INSTANCE_TEMPLATE_URL \
    --zones=LIST_OF_ZONES \

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

  • INSTANCE_GROUP_NAME: MIG の名前。
  • SIZE: MIG 内のインスタンス数。
  • INSTANCE_TEMPLATE_URL: MIG でインスタンスの作成に使用するインスタンス テンプレートの URL。この URL には、インスタンス テンプレートの ID または名前を含めることができます。次のいずれかの値を指定します。
    • リージョン インスタンス テンプレートの場合: projects/PROJECT_ID/regions/REGION/instanceTemplates/INSTANCE_TEMPLATE_ID
    • グローバル インスタンス テンプレートの場合: INSTANCE_TEMPLATE_ID
  • ZONE: MIG がインスタンスを作成するゾーン。
  • LIST_OF_ZONES: リージョン MIG がインスタンスを作成するゾーンのカンマ区切りのリスト。例: us-central1-a, us-central1-b, us-central1-c

REST

一括作成が有効になっている MIG を作成するには、次のように POST リクエストを送信します。リクエストの本文で、targetSizePolicy.mode フィールドを bulk に設定します。

Flex Start プロビジョニング モデルを使用する場合は、次のリクエストに "instanceLifecyclePolicy": {"defaultActionOnFailure": "DO_NOTHING"} フィールド を含めて、MIG で修復を無効にする必要があります。

  • ゾーン MIG を作成するには、POST リクエストを instanceGroupManagers.insert メソッドに送信します。

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instanceGroupManagers
    
    {
      "name": "INSTANCE_GROUP_NAME",
      "targetSize": SIZE,
      "targetSizePolicy": {
        "mode": "bulk"
      },
      "versions": [
        {
          "instanceTemplate": "INSTANCE_TEMPLATE_URL"
        }
      ]
    }
    
  • リージョン MIG を作成するには、POST リクエストを regionInstanceGroupManagers.insert メソッドに送信します。

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/instanceGroupManagers
    
    {
      "name": "INSTANCE_GROUP_NAME",
      "targetSize": SIZE,
      "targetSizePolicy": {
        "mode": "bulk"
      },
      "versions": [
        {
          "instanceTemplate": "INSTANCE_TEMPLATE_URL"
        }
      ]
    }
    

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

  • PROJECT_ID:プロジェクト ID。
  • ZONE:MIG がインスタンスを作成するゾーン。
  • REGION:MIG がインスタンスを作成するリージョン。
  • INSTANCE_GROUP_NAME:MIG の名前。
  • SIZE:MIG 内のインスタンス数。
  • INSTANCE_TEMPLATE_URL: MIG でインスタンスの作成に使用するインスタンス テンプレートの URL。この URL には、インスタンス テンプレートの ID または名前を含めることができます。次のいずれかの値を指定します。
    • リージョン インスタンス テンプレートの場合: projects/PROJECT_ID/regions/REGION/instanceTemplates/INSTANCE_TEMPLATE_ID
    • グローバル インスタンス テンプレートの場合: INSTANCE_TEMPLATE_ID

インスタンスを追加または削除する

バルクモードを使用する MIG では、MIG のターゲット サイズを手動で増減することで、インスタンスを追加または削除できます。

  • インスタンスを追加する: ターゲット サイズをゼロから増やすと、MIG は MIG の作成時と同じ方法で インスタンスを追加します。MIG にインスタンスがない場合は、createInstances メソッドを使用して、特定の名前のインスタンスを作成することもできます。特定の名前のインスタンスを作成するには、 MIG に特定の名前のインスタンスを作成するをご覧ください。

  • インスタンスを削除する: ターゲット サイズをゼロに減らすと、MIG は グループ内の既存のインスタンスをすべて削除し、進行中の作成オペレーションをキャンセルします 。 ターゲット サイズを 0 に減らすことで、インスタンスを削除できます。ゼロ以外のサイズに減らすには、MIG で一括インスタンス オペレーションが進行中であってはなりません(bulkInstanceOperation.inProgressfalse である必要があります)。

ターゲット サイズを変更して MIG からインスタンスを追加または削除するには、MIG のサイズを手動で設定するをご覧ください。

次のステップ