MIG 内の VM の実行時間を制限する


このドキュメントでは、VM に制限時間を指定して、マネージド インスタンス グループ(MIG)内の仮想マシン(VM)を自動的に終了する方法について説明します。また、MIG 内の VM の制限時間の仕組みについても説明します。

MIG 内の VM に制限時間を指定すると、一時的なワークロードを最適化できます。VM が制限時間に達すると、MIG は対象の VM を自動的に終了(削除)します。制限時間により MIG 内の VM の実行時間を制限すると、費用を最小限に抑えて割り当てを解放できます。

スタンドアロン VM に対する制限時間の指定については、VM の実行時間を制限するをご覧ください。ワークロードに基づいて MIG が VM を自動的に追加または削除するように設定する場合は、インスタンスのグループの自動スケーリングをご覧ください。

始める前に

  • まだ設定していない場合は、認証を設定します。認証とは、Google Cloud サービスと API にアクセスするために ID を確認するプロセスです。ローカル開発環境からコードまたはサンプルを実行するには、次のように Compute Engine に対する認証を行います。

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

    コンソール

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

    gcloud

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

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

    REST

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

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

      gcloud init

MIG 内の VM の実行時間を制限する

MIG に使用されるインスタンス テンプレートで制限時間を指定することで、MIG 内の VM の実行時間を制限できます。MIG がテンプレートに基づいて VM を作成すると、各 VM に制限時間が適用されます

次の 2 種類のいずれかの制限時間を指定できます。

  • 制限時間を実行期間として指定します
  • 制限時間を終了時刻として指定します

MIG 内の VM に制限時間を指定するには、次の手順を行います。

  1. VM の実行期間を指定または VM の終了時刻を指定して、インスタンス テンプレートを作成します。

  2. インスタンス テンプレートを使用して、MIG を作成するか、既存の MIG を更新します。

制限事項

VM の実行期間を指定してインスタンス テンプレートを作成する

MIG 内の VM を一定期間実行した後に自動的に終了するには、インスタンス テンプレートで最大実行期間(maxRunDuration)を設定します。

コンソール

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

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

  2. [インスタンス テンプレートを作成] をクリックします。

  3. 次のように [ロケーション] を選択します。

    • 複数リージョンを対象にインスタンス テンプレートを使用する場合は、[グローバル] を選択します。
    • リージョン間の依存関係を減らす場合は、[リージョン] を選択します。
  4. リージョンを選択した場合は、インスタンス テンプレートを作成するリージョンを選択します。

  5. [可用性ポリシー] セクションで、[VM プロビジョニング モデルの詳細設定] を開きます。

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

  7. [制限時間のタイプ] フィールドで [時間](デフォルト)を選択して、制限時間を指定します。次のフィールドに、期間を時間単位で入力します。

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

  9. その他のフィールドでは、デフォルト値をそのまま使用するか、必要に応じて変更します。

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

gcloud

instance-templates create コマンドを使用します。特定の期間が経過した後に VM を自動的に削除するには、次のように --max-run-duration フラグを追加し、--instance-termination-action フラグを DELETE に設定します。

  gcloud compute instance-templates create INSTANCE_TEMPLATE_NAME \
      --max-run-duration=DURATION \
      --instance-termination-action=DELETE

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

  • INSTANCE_TEMPLATE_NAME: インスタンス テンプレートの名前。
  • DURATION: VM を実行する期間。MIG は、指定された期間が経過すると VM を自動的に削除します。

    期間を、日数、時間、分、秒としてフォーマットし、その後に dhms をそれぞれ続けて指定します。たとえば、期間を 30 分にする場合は 30m を指定します。期間を 1 日、2 時間、3 分、4 秒にする場合は 1d2h3m4s を指定します。最小期間は 30 秒(30s)、最大期間は 120 日間(120d)です。

Terraform

Terraform を使用してインスタンス テンプレートを作成するには、google_compute_instance_template リソースを使用します。特定の期間が経過した後に VM を自動的に削除するインスタンス テンプレートを作成するには、max_run_duration 引数を含め、instance_termination_action 引数DELETE に設定する必要があります。

詳細については、google_compute_instance_template リソースの Terraform ドキュメントをご覧ください。

REST

instanceTemplates.insert メソッドを使用します。特定の期間が経過した後に VM を自動的に削除するには、次のように maxRunDuration フィールドを追加し、instanceTerminationAction フィールドを DELETE に設定します。

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

{
  "name": "INSTANCE_TEMPLATE_NAME",
  "properties": {
    "machineType": "MACHINE_TYPE",
    "networkInterfaces": [
      {
        "network": "global/networks/default",
        "accessConfigs": [
          {
            "name": "external-IP",
            "type": "ONE_TO_ONE_NAT"
          }
        ]
      }
    ],
    "disks": [
      {
        "type": "PERSISTENT",
        "boot": true,
        "mode": "READ_WRITE",
        "initializeParams":
        {
          "sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE"
        }
      }
    ]
    "scheduling": {
      "maxRunDuration":
      {
        "seconds": DURATION
      },
      "instanceTerminationAction": "DELETE"
    }
  }
}

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

  • PROJECT_ID: インスタンス テンプレートを作成するプロジェクトの ID
  • INSTANCE_TEMPLATE_NAME: インスタンス テンプレートの名前。
  • MACHINE_TYPE: グループ内の VM の事前定義またはカスタム マシンタイプ。
  • IMAGE_PROJECT: イメージを含むイメージ プロジェクト(例: debian-cloud)。
  • IMAGE または IMAGE_FAMILY: 次のいずれかを指定します。

    • IMAGE: OS イメージの特定のバージョン。例: debian-10-buster-v20200309

    • IMAGE_FAMILY: イメージ ファミリー。これにより、非推奨ではない最新の OS イメージが指定されます。たとえば、family/debian-10 を指定すると、Debian 10 イメージ ファミリーの最新バージョンが使用されます。

  • DURATION: VM を実行する期間。MIG は、指定された期間が経過すると VM を自動的に削除します。

    期間を、日数、時間、分、秒としてフォーマットし、その後に dhms をそれぞれ続けて指定します。たとえば、期間を 30 分にする場合は 30m を指定します。期間を 1 日、2 時間、3 分、4 秒にする場合は 1d2h3m4s を指定します。最小期間は 30 秒(30s)、最大期間は 120 日間(120d)です。

VM の終了時刻を指定してインスタンス テンプレートを作成する

MIG 内の VM を特定の時刻に自動的に終了するには、インスタンス テンプレートで終了時刻(terminationTime)を設定します。MIG で VM を終了する日時を設定できます。

コンソール

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

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

  2. [インスタンス テンプレートを作成] をクリックします。

  3. 次のように [ロケーション] を選択します。

    • 複数リージョンを対象にインスタンス テンプレートを使用する場合は、[グローバル] を選択します。
    • リージョン間の依存関係を減らす場合は、[リージョン] を選択します。
  4. リージョンを選択した場合は、インスタンス テンプレートを作成するリージョンを選択します。

  5. [可用性ポリシー] セクションで、[VM プロビジョニング モデルの詳細設定] を開きます。

  6. [制限時間のタイプ] フィールドで、[日付] を選択して、制限時間を時間と日付として指定します。次のフィールドで [日時を選択] をクリックして、自動終了を行う日付、時間、タイムゾーンを選択します。

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

  8. その他のフィールドでは、デフォルト値をそのまま使用するか、必要に応じて変更します。

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

gcloud

instance-templates create コマンドを使用します。特定の時刻に VM を自動的に削除するには、次のように --termination-time フラグを追加し、--instance-termination-action フラグを DELETE に設定します。

  gcloud compute instance-templates create INSTANCE_TEMPLATE_NAME \
      --termination-time=TIME \
      --instance-termination-action=DELETE

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

  • INSTANCE_TEMPLATE_NAME: インスタンス テンプレートの名前。
  • TIME: この VM を自動的に終了する時刻。指定する時刻は、少なくとも 30 秒先の未来とし、120 日以内にする必要があります。時刻を RFC 3339 タイムスタンプとしてフォーマットします。

    YYYY-MM-DDTHH:MM:SSOFFSET
    

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

    • YYYY-MM-DD: 4 桁の年、2 桁の月、その月の 2 桁の日をハイフンで区切った日付。
    • HH:MM:SS: 24 時間における 2 桁の時間、2 桁の分、2 桁の秒をコロンで区切った時刻。
    • OFFSET: 協定世界時(UTC)のオフセット形式で示されるタイムゾーン。たとえば、UTC よりも 8 時間早い太平洋標準時(PST)を使用するには、-08:00 を指定します。オフセットなし(UTC+0)を使用する場合は、Z を指定します。

REST

instanceTemplates.insert メソッドを使用します。特定の時刻に VM を自動的に削除するには、次のように terminationTime フィールドを追加し、instanceTerminationAction フィールドを DELETE に設定します。

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

{
  "name": "INSTANCE_TEMPLATE_NAME",
  "properties": {
    "machineType": "MACHINE_TYPE",
    "networkInterfaces": [
      {
        "network": "global/networks/default",
        "accessConfigs": [
          {
            "name": "external-IP",
            "type": "ONE_TO_ONE_NAT"
          }
        ]
      }
    ],
    "disks": [
      {
        "type": "PERSISTENT",
        "boot": true,
        "mode": "READ_WRITE",
        "initializeParams":
        {
          "sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE"
        }
      }
    ]
    "scheduling": {
      "terminationTime": TIME,
      "instanceTerminationAction": "DELETE"
    }
  }
}

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

  • PROJECT_ID: インスタンス テンプレートを作成するプロジェクトの ID
  • INSTANCE_TEMPLATE_NAME: インスタンス テンプレートの名前。
  • MACHINE_TYPE: グループ内の VM の事前定義またはカスタム マシンタイプ。
  • IMAGE_PROJECT: イメージを含むイメージ プロジェクト(例: debian-cloud)。
  • IMAGE または IMAGE_FAMILY: 次のいずれかを指定します。

    • IMAGE: OS イメージの特定のバージョン。例: debian-10-buster-v20200309

    • IMAGE_FAMILY: イメージ ファミリー。これにより、非推奨ではない最新の OS イメージが指定されます。たとえば、family/debian-10 を指定すると、Debian 10 イメージ ファミリーの最新バージョンが使用されます。

  • TIME: この VM を自動的に終了する時刻。指定する時刻は、少なくとも 30 秒先の未来とし、120 日以内にする必要があります。時刻を RFC 3339 タイムスタンプとしてフォーマットします。

    YYYY-MM-DDTHH:MM:SSOFFSET
    

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

    • YYYY-MM-DD: 4 桁の年、2 桁の月、その月の 2 桁の日をハイフンで区切った日付。
    • HH:MM:SS: 24 時間における 2 桁の時間、2 桁の分、2 桁の秒をコロンで区切った時刻。
    • OFFSET: 協定世界時(UTC)のオフセット形式で示されるタイムゾーン。たとえば、UTC よりも 8 時間早い太平洋標準時(PST)を使用するには、-08:00 を指定します。オフセットなし(UTC+0)を使用する場合は、Z を指定します。

MIG 内の VM の制限時間の仕組み

MIG で VM に制限時間を指定すると、MIG が VM を終了する時刻が VM の終了タイムスタンプ(terminationTimestamp)フィールドに自動的に設定されます。

指定した制限時間のタイプに基づいて、VM の終了タイムスタンプが次のように設定されます。

  • 制限時間は実行期間(maxRunDuration)として設定されます。

    VM の terminationTimestamp = VM の最新の作成時刻または開始時刻 + maxRunDuration

    期間を指定すると、終了タイムスタンプは VM の最新の作成時刻または開始時刻を基準として設定されます。VM が再作成、再起動、再開、または置き換えられると、終了タイムスタンプが再計算されます。終了タイムスタンプは、各 VM が最後に作成または開始された時刻に基づいて、MIG 内の VM ごとに異なる場合があります。たとえば、VM が修復された場合、修復中に VM が再作成された時間に期間を加えて、VM の終了タイムスタンプが再計算されます。

  • 制限時間が終了時刻(terminationTime)として設定されます。

    VM の terminationTimestamp = terminationTime

    指定した時刻が将来の時刻の場合、終了タイムスタンプは対象の時刻に設定されます。終了時刻が経過している場合、VM の作成、再起動、置換を試みる MIG アクションは、エラーで失敗します。このようなエラーを解決するには、将来の終了時刻が設定された新しいインスタンス テンプレートを作成し、作成したテンプレートを MIG に適用する必要があります。新しいテンプレートで既存のテンプレート プロパティを使用する場合は、既存のテンプレートに基づいてインスタンス テンプレートを作成します。

VM の更新中は、終了タイムスタンプは変更されません。たとえば、更新の中断レベルREFRESH に設定すると、MIG が VM を更新するたびに終了タイムスタンプが保持されます。

MIG で VM を一時停止または停止すると、制限時間のタイプを問わず、終了タイムスタンプが自動的にクリアされます。VM を再開または起動すると、このセクションの前の部分で説明したように、制限時間のタイプに基づいて終了タイムスタンプが再度設定されます。

制限時間が設定されている場合の自動スケーリングの仕組み

自動スケーリングを使用すると、負荷の増減に基づいて MIG で VM の追加または削除を自動的に行うことができます。MIG が終了タイムスタンプに到達した VM を削除すると、MIG は新しい VM を作成して、オートスケーラーによって推奨サイズを維持します。新しい VM は、指定された制限時間まで実行されます。オートスケーラーの推奨事項が VM の数を削減する内容である場合、MIG は制限時間に到達する前であっても VM を削除します。

スケーリング スケジュールを構成した場合、VM はスケジュールの終了時点または VM が終了タイムスタンプに達する(どちらか早い方)まで実行されます。

次のステップ