Spot VM を使用する MIG を作成する

このドキュメントでは、スポット VM を使用するマネージド インスタンス グループ(MIG)を作成する方法について説明します。

Spot VM は、大幅な割引価格で取得できる仮想マシン(VM)インスタンスです。ただし、Compute Engine は容量を再利用するために、Spot VM を任意のタイミングで停止または削除する場合があります。Spot VM を使用して、バッチ処理ジョブやステートレス アプリケーションなどのフォールト トレラントなワークロードを低コストで実行します。

MIG の作成に使用できる他の方法については、MIG を作成するための基本的なシナリオをご覧ください。

始める前に

  • Spot VM、特に制限事項について確認します。
  • リクエストするリソースに対して十分な割り当てがあることを確認します。詳細については、数量に基づく割り当てをご覧ください。
  • ワークロードの Spot VM を作成する前に、次の手順を完了します。

    1. プリエンプションを管理するようにワークロードを構成します。具体的には、ワークロードの一部として実行されるプリエンプションを処理するスクリプトを準備するか、シャットダウン中に実行するために VM メタデータに追加できるファイルを用意することをおすすめします。手順については、Spot VM のプリエンプションを管理するをご覧ください。

    2. Spot VM のデータを表示して、マシンタイプとロケーションを選択することを強くおすすめします。リソースの可用性が高いマシンタイプとロケーションを選択すると、リソースの可用性エラーを回避し、プリエンプションまでの稼働時間を長くすることができます。

  • まだ設定していない場合は、認証を設定します。認証では、 Cloud de Confiance by S3NS サービスと API にアクセスするための ID が確認されます。ローカル開発環境からコードまたはサンプルを実行するには、次のいずれかのオプションを選択して Compute Engine に対する認証を行います。

    このページのサンプルをどのように使うかに応じて、タブを選択してください。

    コンソール

    Cloud de Confiance コンソールを使用して Cloud de Confiance by S3NS サービスと API にアクセスする場合、認証を設定する必要はありません。

    gcloud

    1. Google Cloud CLI をインストールし、 フェデレーション ID を使用して gcloud CLI にログインします。ログイン後、次のコマンドを実行して Google Cloud CLI を初期化します。

      gcloud init
  • デフォルトのリージョンとゾーンを設定します。
  • REST

    このページの REST API サンプルをローカル開発環境で使用するには、gcloud CLI に指定した認証情報を使用します。

      Google Cloud CLI をインストールし、 フェデレーション ID を使用して gcloud CLI にログインします。

    詳細については、 Cloud de Confiance 認証ドキュメントの REST を使用して認証するをご覧ください。

必要なロール

スポット VM を使用する MIG の作成に必要な権限を取得するには、プロジェクトに対する Compute インスタンス管理者(v1) (roles/compute.instanceAdmin.v1)IAM ロールを付与するよう管理者に依頼します。ロールの付与については、プロジェクト、フォルダ、組織に対するアクセス権の管理をご覧ください。

この事前定義ロールには、スポット VM を使用する MIG の作成に必要な権限が含まれています。必要とされる正確な権限については、「必要な権限」セクションを開いてご確認ください。

必要な権限

Spot VM を使用する MIG を作成するには、次の権限が必要です。

  • インスタンス テンプレートを作成する: プロジェクトに対する compute.instanceTemplates.create
  • MIG を作成する: プロジェクトに対する compute.instanceGroupManagers.create

カスタムロールや他の事前定義ロールを使用して、これらの権限を取得することもできます。

Spot VM を使用する MIG を作成する

Spot VM を使用する MIG を作成するには、次の操作を行う必要があります。

  1. Spot VM の作成用に構成されたインスタンス テンプレートを作成する

  2. リージョン MIG またはゾーン MIG を作成する

Spot VM の作成用に構成されたインスタンス テンプレートを作成する

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

コンソール

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

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

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

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

  4. [ロケーション] セクションで、作成するインスタンス テンプレートのタイプを選択します。

    • リージョン インスタンス テンプレートの場合は、[リージョン] を選択し、テンプレートを作成するリージョンを選択します。Spot VM で使用するマシンタイプに基づいて、サポートされているリージョンを指定します。

    • グローバル インスタンス テンプレートの場合は、[グローバル] を選択します。

  5. [マシンの構成] セクションで、Spot VM でサポートされているマシンシリーズを選択します。

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

    1. [VM プロビジョニング モデル] リストで、[スポット] を選択します。[VM プロビジョニング モデルの詳細設定] セクションが開きます。

    2. [プリエンプション通知期間] リストで、プリエンプションの処理方法に基づいてオプションを選択します。

      • [120 秒](推奨)を選択した場合は、Spot VM を作成する前に、ワークロード内でプリエンプションを処理してください。たとえば、プリエンプションが検出されるまで実行を待機する進行状況を保存するスクリプトがワークロードに含まれていることを確認します。

      • [0 秒(デフォルト)] を選択した場合は、シャットダウン スクリプトを使用してプリエンプションを処理してください。Spot VM を作成する前に、プリエンプションによってシャットダウンが発生したときに進行状況を保存するシャットダウン スクリプトを含むファイルを作成します。このシャットダウン スクリプトは、後の手順で説明するように添付します。

    3. プリエンプション時に Spot VM を停止するか削除するかを指定するには、[VM の終了時] リストで、次のいずれかのオプションを選択します。

      • Spot VM を停止するには、[停止] を選択します。

      • スポット VM を削除するには、[削除] を選択します。

  7. シャットダウン スクリプトを追加する手順は次のとおりです。[プリエンプション通知の期間] で [0 秒(デフォルト)] を選択した場合は、プリエンプションを処理するためにこの手順が必要です。それ以外の場合で、[120 秒] を選択した場合は、この手順は省略可能です。

    1. [詳細オプション] セクションを開きます。
    2. [管理] セクションを開きます。
    3. [メタデータ] セクションで、[ 項目を追加] をクリックします。
    4. [キー] フィールドに、メタデータキーとして「shutdown-script」と入力します。
    5. [値] フィールドに、プリエンプションを処理するシャットダウン スクリプトの内容を追加します。
  8. 省略可: デフォルト値のブートディスクのタイプまたはイメージを変更するには、[ブートディスク] セクションで [変更] をクリックします。プロンプトに従ってブートディスクを変更します。

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

gcloud

スポット VM の作成用に構成されたインスタンス テンプレートを作成するには、gcloud compute instance-templates create コマンドを使用します。

次のコマンドは、リージョン インスタンス テンプレートを作成します。グローバル インスタンス テンプレートを作成する場合は、--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=TERMINATION_ACTION \
    --machine-type=MACHINE_TYPE \
    --provisioning-model=SPOT \
    --preemption-notice-duration=PREEMPTION_NOTICE_DURATION \
    --metadata shutdown-script=SHUTDOWN_SCRIPT

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

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

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

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

  • REGION: インスタンス テンプレートを作成するリージョン。スポット VM で使用するマシンタイプに基づいて、サポートされているリージョンを指定します。

  • TERMINATION_ACTION: プリエンプション時に Compute Engine が Spot VM を停止するか削除するか。VM を停止(STOP)するか削除(DELETE)するかを指定する必要があります。

  • MACHINE_TYPE: スポット VM でサポートされているマシンタイプ。N1 マシンタイプを指定する場合は、--accelerator フラグを設定して、VM にアタッチする GPU の数とタイプを定義する必要があります。

  • PREEMPTION_NOTICE_DURATION: プリエンプション通知期間を有効にするかどうか。gcloud CLI の場合、値は 120s または 0s のいずれかである必要があります。

    • 120s(推奨)を指定する場合は、ワークロード内でプリエンプションを処理します。(必要に応じて、シャットダウン スクリプトを指定することもできます)。

    • 0s(デフォルト)を指定する場合は、シャットダウン スクリプト内でプリエンプションを処理します。

  • SHUTDOWN_SCRIPT: シャットダウン スクリプト。

    • PREEMPTION_NOTICE_DURATION を 0s(デフォルト)に設定した場合は、プリエンプションを処理するためにシャットダウン スクリプトを指定する必要があります。シャットダウン スクリプトの形式と指定方法については、シャットダウン スクリプトを実行するをご覧ください。

    • シャットダウン スクリプトを指定しない場合は、--metadata shutdown-script フラグを削除できます。

REST

Spot VM の作成用に構成されたインスタンス テンプレートを作成するには、次のいずれかの POST リクエストを送信します。

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

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"
      }
    ],
    "scheduling": {
      "instanceTerminationAction": "TERMINATION_ACTION",
      "provisioningModel": "SPOT",
      "preemptionNoticeDuration": { "seconds": PREEMPTION_NOTICE_DURATION }
    },
    "metadata": {
      "items": [
        {
          "key": "shutdown-script",
          "value": "SHUTDOWN_SCRIPT"
        }
      ]
    }
  }
}

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

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

  • REGION: インスタンス テンプレートを作成するリージョン。スポット VM で使用するマシンタイプに基づいて、サポートされているリージョンを指定します。

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

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

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

    • OS イメージの特定のバージョン。例: debian-12-bookworm-v20240617。

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

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

  • TERMINATION_ACTION: プリエンプション時に Compute Engine が Spot VM を停止するか削除するか。VM を停止(STOP)するか削除(DELETE)するかを指定する必要があります。

  • PREEMPTION_NOTICE_DURATION: プリエンプション通知期間を有効にするかどうか。REST の場合、値は 120 または 0 のいずれかである必要があります。

    • 120(推奨)を指定する場合は、ワークロード内でプリエンプションを処理します。(必要に応じて、シャットダウン スクリプトを指定することもできます)。

    • 0(デフォルト)を指定する場合は、シャットダウン スクリプト内でプリエンプションを処理します。

  • SHUTDOWN_SCRIPT: シャットダウン スクリプト。

    • PREEMPTION_NOTICE_DURATION を 0s(デフォルト)に設定した場合は、プリエンプションを処理するためにシャットダウン スクリプトを指定する必要があります。シャットダウン スクリプトの形式と指定方法については、シャットダウン スクリプトを実行するをご覧ください。

    • シャットダウン スクリプトを指定しない場合は、metadata フィールドとサブフィールドを削除できます。

  • TERMINATION_ACTION: 省略可。Compute Engine が VM をプリエンプトするときに実行する終了アクション。STOP(デフォルト)または DELETE を指定します。

インスタンス テンプレートを作成したら、テンプレートの詳細を表示してプロパティを確認できます。

リージョン MIG またはゾーン MIG を作成する

リージョン MIG またはゾーン MIG を作成するには、次のいずれかのオプションを選択します。

コンソール

  1. Cloud de Confiance コンソールで、[インスタンス グループ] ページに移動します。

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

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

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

  4. [インスタンス テンプレート] リストで、前のセクションで作成したインスタンス テンプレートを選択します。

  5. [インスタンス数] フィールドに、MIG で作成するスポット VM の数を入力します。ワークロードで特定の名前の VM が必要な場合は、0 と入力して、この段階での VM の作成をスキップします。MIG を作成したら、特定の名前を持つ VM を追加します。

  6. [ロケーション] セクションで、ゾーン MIG またはリージョン MIG を作成するかどうかを次のように指定します。

    1. ゾーン MIG を作成するには、[単一ゾーン] を選択します。リージョン MIG を作成する場合は、[マルチゾーン] を選択します。

    2. MIG のリージョンとゾーンを選択します。

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

gcloud

MIG を作成するには、gcloud compute instance-groups managed create コマンドを使用します。

作成する MIG のタイプに基づいて、コマンドに次のフラグを指定します。

  • ゾーン MIG を作成するには、--zone フラグを含めます。

    gcloud compute instance-groups managed create INSTANCE_GROUP_NAME \
        --size=SIZE \
        --template=INSTANCE_TEMPLATE_URL \
        --zone=ZONE
    
  • リージョン MIG を作成するには、--region フラグを指定します。

    gcloud compute instance-groups managed create INSTANCE_GROUP_NAME \
        --size=SIZE \
        --template=INSTANCE_TEMPLATE_URL \
        --region=REGION
    

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

  • INSTANCE_GROUP_NAME: MIG の名前。

  • INSTANCE_TEMPLATE_URL: 前のセクションで作成したインスタンス テンプレートの URL。この URL には、インスタンス テンプレートの ID または名前を含めることができます。次のいずれかの値を指定します。

    • リージョン インスタンス テンプレートの場合: projects/PROJECT_ID/regions/REGION/instanceTemplates/INSTANCE_TEMPLATE_ID

    • グローバル インスタンス テンプレートの場合: INSTANCE_TEMPLATE_ID

  • SIZE: MIG で作成する Spot VM の数。ワークロードで特定の VM 名が必要な場合は、0 を指定して、この段階での VM の作成をスキップします。MIG を作成したら、特定の名前を持つ VM を追加します。

  • ZONE: ゾーン MIG を作成するゾーン。リージョン インスタンス テンプレートを使用して MIG を作成する場合は、テンプレートと同じリージョン内のゾーンを指定する必要があります。

  • REGION: リージョン MIG を作成するリージョン。リージョン インスタンス テンプレートを使用して MIG を作成する場合は、テンプレートのリージョンと同じリージョンを指定する必要があります。

REST

MIG を作成するには、次のいずれかのメソッドに POST リクエストを送信します。

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

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

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

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

  • PROJECT_ID: リージョン MIG またはゾーン MIG を作成するプロジェクトの ID。

  • ZONE: ゾーン MIG を作成するゾーン。リージョン インスタンス テンプレートを使用して MIG を作成する場合は、テンプレートと同じリージョン内のゾーンを指定する必要があります。

  • REGION: リージョン MIG を作成するリージョン。リージョン インスタンス テンプレートを使用して MIG を作成する場合は、テンプレートのリージョンと同じリージョンを指定する必要があります。

  • INSTANCE_GROUP_NAME: MIG の名前。

  • INSTANCE_TEMPLATE_URL: 前のセクションで作成したインスタンス テンプレートの URL。この URL には、インスタンス テンプレートの ID または名前を含めることができます。次のいずれかの値を指定します。

    • リージョン インスタンス テンプレートの場合: projects/PROJECT_ID/regions/REGION/instanceTemplates/INSTANCE_TEMPLATE_ID

    • グローバル インスタンス テンプレートの場合: INSTANCE_TEMPLATE_ID

  • SIZE: MIG で作成する Spot VM の数。ワークロードに特定の VM 名が必要な場合は、0 を指定して、この段階での VM の作成をスキップします。MIG を作成したら、特定の名前を持つ VM を MIG に追加します。

MIG を作成したら、MIG の詳細を表示してプロパティを確認できます。

次のステップ