VM のランタイムを制限する


このドキュメントでは、自動終了を使用して、新規または既存の仮想マシン(VM)インスタンスの実行を制限する方法と、その後にそれらの VM のランタイムをモニタリングする方法について説明します。

VM ランタイムを自動的に制限すると、一時的なワークロードを最適化し、費用を最小限に抑えて割り当てを解放できます。自動終了を使用すると、VM が特定の時間制限(期間または時間)に達したときに、VM を終了(停止または削除)するようにスケジュールできます。

VM の停止の詳細については、VM の停止と起動をご覧ください。VM の削除の詳細については、VM を削除するをご覧ください。

定期的なワークロード用に VM ランタイムをスケジュールする場合は、VM の起動と停止をスケジュールするをご覧ください。

始める前に

  • 自動終了に必要な権限を取得するには、プロジェクトに対する Compute インスタンス管理者(v1)roles/compute.instanceAdmin.v1)IAM ロールを付与するよう管理者に依頼します。ロールの付与の詳細については、アクセス権の管理をご覧ください。

    必要な権限は、カスタムロールや他の事前定義ロールから取得することもできます。

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

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

    コンソール

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

    gcloud

    1. Google Cloud CLI をインストールし、次のコマンドを実行して初期化します。

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

    REST

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

      Google Cloud CLI をインストールし、次のコマンドを実行して初期化します。

      gcloud init

制限事項

自動終了には次の制限があります。

  • 自動終了は、VM が停止または一時停止すると、常に自動的にクリアされます。この制限は、実行が終了したか、中断されたかのいずれかで、更新されずに再起動された VM が、誤って終了しないようにするためのものです。

  • 自動終了の最小時間制限は 30 秒、最大時間制限は 120 日です。

  • 自動終了には、VM の停止または削除の開始に対して指定した期間または時間より最大で 30 秒かかる場合があります。

  • レガシー プリエンプティブル VM では自動終了を使用できません。代わりに、Spot VM で自動終了を使用します。

中断に関係なく VM が停止するようにスケジュールする場合、または最大制限時間を引き上げる場合は、代わりにインスタンス スケジュールを使用します。

新しい VM のランタイムを制限する

以降のセクションでは、新しい VM の作成中に自動終了を構成する方法について説明します。

VM を終了するタイミングを指定するには、時間制限を期間または時間として設定します。

期間を設定する

期間は、VM に必要な合計ランタイムを表します。Google Cloud コンソール、Google Cloud CLI、Compute Engine API のいずれかを使用して、VM の実行後に特定の期間で自動的に終了する VM を作成します。

コンソール

  1. Google Cloud コンソールで、[インスタンスの作成] ページに移動します。

    [インスタンスの作成] に移動

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

  3. 自動終了を有効にするには、[VM の制限時間を設定する] チェックボックスをオンにします。[制限時間のタイプ] フィールドが表示されます。

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

  5. [VM の終了時] リストで、VM のランタイムが指定された制限に達したときの動作を選択します。

    • VM を自動的に停止するには、[停止](デフォルト)を選択します。
    • VM を削除するには、[削除] を選択します。
  6. 省略可: その他の VM オプションを指定します。詳しくは、VM インスタンスの作成と起動をご覧ください。

  7. VM を作成して起動するには、[作成] をクリックします。

gcloud

gcloud CLI で VM を作成するには、gcloud beta compute instances create コマンドを使用します。特定の期間が経過した後に自動的に終了する VM を作成するには、--max-run-duration フラグを含める必要があります。終了アクションを指定するには、--instance-termination-action フラグを含めます。このフラグは Spot VM では省略可能です。

gcloud beta compute instances create VM_NAME \
    --max-run-duration=DURATION \
    --instance-termination-action=TERMINATION_ACTION

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

  • VM_NAME: 新しい VM の名前
  • DURATION: この VM が自動的に終了するまでの実行時間。期間を、日数、時間、分、秒としてフォーマットし、その後に dhms を続けて指定します。たとえば、期間を 30 分にする場合は 30m を指定します。期間を 1 日、2 時間、3 分、4 秒にする場合は 1d2h3m4s を指定します。最小期間は 30 秒(30s)、最大期間は 120 日間(120d)です。
  • TERMINATION_ACTION: この VM の終了アクション。停止(STOP)または削除(DELETE)のいずれかです。このフィールドが必須か、デフォルト値かは VM のプロビジョニング モデルによって異なります。
    • これが Spot VM の場合(VM が --provisioning-model=SPOT フラグを使用している場合)、--instance-termination-action=TERMINATION_ACTION フラグは省略可能です。このフラグを省略すると、デフォルトの終了アクションは停止です。
    • それ以外の場合(デフォルト)は、--instance-termination-action=TERMINATION_ACTION フラグが必要です。

VM の作成時に指定できる他のオプションの詳細については、VM インスタンスの作成と起動をご覧ください。

REST

Compute Engine API で VM を作成するには、ベータ版の instances.insert メソッドを使用します。VM の名前、マシンタイプ、ブートディスクを指定する必要があります。

特定の期間が経過した後に自動的に終了する VM を作成するには、maxRunDuration フィールドを含める必要があります。終了アクションを指定するには、instanceTerminationAction フィールドを指定します。これは Spot VM では省略可能です。

POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/zones/ZONE/instances
{
  "machineType": "zones/ZONE/machineTypes/MACHINE_TYPE",
  "name": "VM_NAME",
  "disks": [
    {
      "initializeParams": {
        "sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE"
      },
      "boot": true
    }
  ]
  "scheduling":
  {
    "maxRunDuration":
    {
      "seconds": DURATION
    },
    "instanceTerminationAction": "TERMINATION_ACTION"
  },
}

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

  • PROJECT_ID: VM を作成するプロジェクトの ID
  • ZONE: VM を作成するゾーン。ゾーンは、新しい VM に使用するマシンタイプもサポートしている必要があります。
  • MACHINE_TYPE: 新しい VM の事前定義またはカスタム マシンタイプ。
  • VM_NAME: 新しい VM の名前
  • IMAGE_PROJECT: イメージを含むプロジェクト。たとえば、イメージとして family/debian-10 を指定する場合は、イメージ プロジェクトとして debian-cloud を指定します。
  • IMAGE: 新しい VM のイメージ。特定のバージョンの公開イメージまたはイメージ ファミリーのいずれかを指定できます。たとえば、イメージとして family/debian-10 を指定し、イメージ プロジェクトとして debian-cloud を指定すると、Compute Engine は Debian 10 イメージ ファミリーの最新バージョンの OS イメージから VM を作成します。
  • DURATION: この VM を自動的に終了するまでの実行期間の秒数。最小期間は 30 秒(30s)、最大期間は 120 日間(120d)です。
  • TERMINATION_ACTION: この VM の終了アクション。停止(STOP)または削除(DELETE)のいずれかです。このフィールドが必須か、デフォルト値かは VM のプロビジョニング モデルによって異なります。
    • これが Spot VM の場合(VM が "provisioningModel": "SPOT" フィールドを使用している場合)、"instanceTerminationAction": "TERMINATION_ACTION" フィールドは省略可能です。このフィールドを省略すると、デフォルトの終了アクションは終了です。
    • それ以外の場合(デフォルト)、"instanceTerminationAction": "TERMINATION_ACTION" フィールドが必要です。

VM の作成時に指定できるオプションの詳細については、VM インスタンスの作成と起動をご覧ください。

時間を設定する

時間 は、VM を終了する日付、時刻、タイムゾーンを表します。特定の時刻に自動的に終了する VM を作成するには、Google Cloud コンソール、Google Cloud CLI、または Compute Engine API を使用します。

コンソール

  1. Google Cloud コンソールで、[インスタンスの作成] ページに移動します。

    [インスタンスの作成] に移動

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

  3. 自動終了を有効にするには、[VM の制限時間を設定する] チェックボックスをオンにします。[制限時間のタイプ] フィールドが表示されます。

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

  5. [VM の終了時] リストで、VM のランタイムが指定された制限に達したときの動作を選択します。

    • VM を自動的に停止するには、[停止](デフォルト)を選択します。
    • VM を削除するには、[削除] を選択します。
  6. 省略可: その他の VM オプションを指定します。詳しくは、VM インスタンスの作成と起動をご覧ください。

  7. VM を作成して起動するには、[作成] をクリックします。

gcloud

gcloud CLI で VM を作成するには、gcloud beta compute instances create コマンドを使用します。特定の時刻に自動的に終了する VM を作成するには、--termination-time フラグを含める必要があります。終了アクションを指定するには、--instance-termination-action フラグを含めます。このフラグは Spot VM では省略可能です。

gcloud beta compute instances create VM_NAME \
    --termination-time=TIME \
    --instance-termination-action=TERMINATION_ACTION

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

  • VM_NAME: 新しい VM の名前
  • 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 を指定します。
  • TERMINATION_ACTION: この VM の終了アクション。停止(STOP)または削除(DELETE)のいずれかです。このフィールドが必須か、デフォルト値かは VM のプロビジョニング モデルによって異なります。

    • これが Spot VM の場合(VM が --provisioning-model=SPOT フラグを使用している場合)、--instance-termination-action=TERMINATION_ACTION フラグは省略可能です。このフラグを省略すると、デフォルトの終了アクションは停止です。
    • それ以外の場合(デフォルト)は、--instance-termination-action=TERMINATION_ACTION フラグが必要です。

VM の作成時に指定できる他のオプションの詳細については、VM インスタンスの作成と起動をご覧ください。

REST

Compute Engine API で VM を作成するには、ベータ版の instances.insert メソッドを使用します。VM の名前、マシンタイプ、ブートディスクを指定する必要があります。

特定の時刻に自動的に終了する VM を作成するには、terminationTime フィールドを含める必要があります。終了アクションを指定するには、instanceTerminationAction フィールドを指定します。これは Spot VM では省略可能です。

POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/zones/ZONE/instances
{
  "machineType": "zones/ZONE/machineTypes/MACHINE_TYPE",
  "name": "VM_NAME",
  "disks": [
    {
      "initializeParams": {
        "sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE"
      },
      "boot": true
    }
  ]
  "scheduling":
  {
    "terminationTime": "TIME",
    "instanceTerminationAction": "TERMINATION_ACTION"
  },
}

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

  • PROJECT_ID: VM を作成するプロジェクトの ID
  • ZONE: VM を作成するゾーン。ゾーンは、新しい VM に使用するマシンタイプもサポートしている必要があります。
  • MACHINE_TYPE: 新しい VM の事前定義またはカスタム マシンタイプ。
  • VM_NAME: 新しい VM の名前
  • IMAGE_PROJECT: イメージを含むプロジェクト。たとえば、イメージとして family/debian-10 を指定する場合は、イメージ プロジェクトとして debian-cloud を指定します。
  • IMAGE: 新しい VM のイメージ。特定のバージョンの公開イメージまたはイメージ ファミリーのいずれかを指定できます。たとえば、イメージとして family/debian-10 を指定し、イメージ プロジェクトとして debian-cloud を指定すると、Compute Engine は Debian 10 イメージ ファミリーの最新バージョンの OS イメージから VM を作成します。
  • 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 を指定します。
  • TERMINATION_ACTION: この VM の終了アクション。停止(STOP)または削除(DELETE)のいずれかです。このフィールドが必須か、デフォルト値かは VM のプロビジョニング モデルによって異なります。

    • これが Spot VM の場合(VM が "provisioningModel": "SPOT" フィールドを使用している場合)、"instanceTerminationAction": "TERMINATION_ACTION" フィールドは省略可能です。このフィールドを省略すると、デフォルトの終了アクションは終了です。
    • それ以外の場合(デフォルト)、"instanceTerminationAction": "TERMINATION_ACTION" フィールドが必要です。

VM の作成時に指定できるオプションの詳細については、VM インスタンスの作成と起動をご覧ください。

既存の VM のランタイムを制限する

VM のスケジュールを更新することで、既存の VM のランタイムを制限できます。自動終了を構成する方法について不明な点がある場合は、新しい VM のランタイムを制限する方法に関する前のセクションを先にご覧ください。

このセクションで説明するように、VM のスケジュールを更新するには、Google Cloud コンソール、Google Cloud CLI、Compute Engine API を使用します。ただし、この方法では、まず VM を停止し、スケジュールを設定してから再起動する必要があります。また、複数の VM プロパティを一度に更新し、プロパティの設定中に VM を自動的に停止および再起動する場合は、インスタンス プロパティを更新するをご覧ください。

コンソール

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

    [VM インスタンス] に移動

  2. [名前] 列で、更新する VM の名前をクリックします。

  3. [VM インスタンスの詳細] ページで、次の手順を行います。

    1. VM が実行されている場合は、[停止] をクリックして VM を停止します。
    2. VM を編集するには、 [編集] をクリックします。
    3. [インスタンスの編集] ページで、次の手順を行います。

      1. [可用性ポリシー] セクションで、[VM の制限時間を設定する] チェックボックスと、必要に応じてその下のフィールドを変更します。

        自動終了のプロパティを構成する方法については、新しい VM のランタイムを制限するをご覧ください。

      2. 変更を保存するには、[保存] をクリックします。

    4. 省略可: VM の実行をすぐに開始する場合は、[開始] をクリックします。

gcloud

gcloud CLI を使用して VM の自動終了のスケジュールを更新するには、次の手順を行います。

  1. VM が実行されている場合は、gcloud compute instances stop コマンドを使用して VM を停止します。

    gcloud compute instances stop VM_NAME
    

    VM_NAME は、更新する VM の名前に置き換えます。

  2. gcloud beta compute instances set-scheduling コマンドを使用して、VM の自動終了の設定を更新します。時間制限を期間または時間に設定するには、--max-run-duration フラグまたは --termination-time フラグをそれぞれ指定する必要があります。

    • 期間を設定するには、次のコマンドを使用します。

      gcloud beta compute instances set-scheduling VM_NAME \
          --max-run-duration=DURATION \
          --instance-termination-action=TERMINATION_ACTION
      
    • 時間を設定するには、次のコマンドを使用します。

      gcloud beta compute instances set-scheduling VM_NAME \
          --termination-time=TIME \
          --instance-termination-action=TERMINATION_ACTION
      

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

    • VM_NAME: 更新する VM の名前
    • DURATION: この VM が自動的に終了するまでの実行時間。期間を、日数、時間、分、秒としてフォーマットし、その後に dhms を続けて指定します。たとえば、期間を 30 分にする場合は 30m を指定します。期間を 1 日、2 時間、3 分、4 秒にする場合は 1d2h3m4s を指定します。最小期間は 30 秒(30s)、最大期間は 120 日間(120d)です。
    • 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 を指定します。
    • TERMINATION_ACTION: この VM の終了アクション。停止(STOP)または削除(DELETE)のいずれかです。このフィールドが必須か、デフォルト値かは VM のプロビジョニング モデルによって異なります。

      • これが Spot VM の場合(VM が --provisioning-model=SPOT フラグを使用している場合)、--instance-termination-action=TERMINATION_ACTION フラグは省略可能です。このフラグを省略すると、デフォルトの終了アクションは停止です。
      • それ以外の場合(デフォルト)は、--instance-termination-action=TERMINATION_ACTION フラグが必要です。
  3. VM の実行を開始するには、gcloud compute instances start コマンドを使用して VM を起動します。

    gcloud compute instances start VM_NAME
    

    VM_NAME は VM の名前で置き換えます。

REST

Compute Engine API を使用して VM の自動終了のスケジュールを更新するには、次の手順で操作します。

  1. VM が実行されている場合は、instances.stop メソッドを使用して VM を停止します。

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/stop
    

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

  2. ベータ版の instances.setScheduling メソッドを使用して、自動終了のフィールドを含む VM の scheduling プロパティを更新します。maxRunDuration フィールドまたは terminationTime フィールドを含めて、それぞれ期間制限または時間制限を設定します。

    • 期間を設定するには、次のリクエストを使用します。

      POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/setScheduling
      {
        "maxRunDuration":
        {
          "seconds": DURATION
        },
        "instanceTerminationAction": "TERMINATION_ACTION"
      }
      
    • 時間を設定するには、次のリクエストを使用します。

      POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/setScheduling
      {
        "terminationTime": "TIME",
        "instanceTerminationAction": "TERMINATION_ACTION"
      }
      

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

    • PROJECT_ID: VM を作成するプロジェクトの ID
    • ZONE: VM を作成するゾーン。ゾーンは、新しい VM に使用するマシンタイプもサポートしている必要があります。
    • MACHINE_TYPE: 新しい VM の事前定義またはカスタム マシンタイプ。
    • VM_NAME: 新しい VM の名前
    • IMAGE_PROJECT: イメージを含むプロジェクト。たとえば、イメージとして family/debian-10 を指定する場合は、イメージ プロジェクトとして debian-cloud を指定します。
    • IMAGE: 新しい VM のイメージ。特定のバージョンの公開イメージまたはイメージ ファミリーのいずれかを指定できます。たとえば、イメージとして family/debian-10 を指定し、イメージ プロジェクトとして debian-cloud を指定すると、Compute Engine は Debian 10 イメージ ファミリーの最新バージョンの OS イメージから VM を作成します。
    • DURATION: この VM を自動的に終了するまでの実行期間の秒数。最小期間は 30 秒(30s)、最大期間は 120 日間(120d)です。
    • 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 を指定します。
    • TERMINATION_ACTION: この VM の終了アクション。停止(STOP)または削除(DELETE)のいずれかです。このフィールドが必須か、デフォルト値かは VM のプロビジョニング モデルによって異なります。

      • これが Spot VM の場合(VM が "provisioningModel": "SPOT" フィールドを使用している場合)、"instanceTerminationAction": "TERMINATION_ACTION" フィールドは省略可能です。このフィールドを省略すると、デフォルトの終了アクションは終了です。
      • それ以外の場合(デフォルト)、"instanceTerminationAction": "TERMINATION_ACTION" フィールドが必要です。
  3. VM の実行を開始する場合は、instances.start メソッドを使用して VM を起動します。

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/start
    

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

VM のランタイムをモニタリングする

VM のランタイムをモニタリングするには(たとえば、自動終了がスケジュールされる前に VM が中断されたかどうかを確認する場合)、VM オペレーションを表示します。自動終了による VM オペレーションを特定するには、次のオペレーション タイプを探します。

  • compute.instances.deferredStop: 停止に対する終了アクション
  • compute.instances.deferredDelete: 削除に対する終了アクション

次のステップ