Compute Engine ゾーンリソースの予約

カスタムまたは事前定義のマシンタイプを使用して、特定のゾーンの VM インスタンスの予約を作成できます。GPU またはローカル SSD を予約に追加することもできます。これにより、ワークロードで必要なときにリソースを利用できるようになります。予約を作成するとすぐに、予約したリソースに対する課金が開始します。予約を削除するまで、これらのリソースをプロジェクトで使用できます。

予約を使用すると、計画的または想定外の負荷の急増、多数の VM の移行、バックアップや障害復旧、計画的な拡張やバッファなど、プロジェクトで必要なリソースの増加にも対応できます。

不要になった予約は削除できます。予約を削除すると、予約に対する課金も停止します。予約では、通常の VM と同じようにリソースを使用するため、既存のオンデマンド料金に基づいて予約料金が課金されます。この中には、継続使用割引が含まれます。また、予約は確約利用割引の対象にもなります。

始める前に

利点

予約には次の利点があります。

  • マシンを予約することで、マシンを常に利用可能な状態にしておくことができます。
  • 予約はいつでも作成できます。また、削除するとすぐに課金が停止します。

  • 予約の料金は、予約しているリソースと同じ方法とレートで課金されます。予約したリソースは、確約利用割引と継続利用割引の対象になります。

制限事項

予約には次の制限事項があります。

  • 予約は、Compute Engine、Cloud Dataproc、Google Kubernetes Engine VM の使用に対してのみ適用されます。
  • 予約は、f1-micro または g1-small マシンタイプ、プリエンプティブ VM、単一テナントノード、上のリストに含まれていないサービス(Cloud SQL、Dataflow など)に適用されません。
  • 1 つの予約で予約できるのは最大 1, 000 個の VM インスタンスまでです。
  • プロジェクトで、予約するリソースに対して十分な割り当て量が設定されている必要があります。予約に成功すると、そのリソースの割り当て量も課金対象になります。
  • 予約を作成すると、リソースが割り当てられます。リクエストの時点でゾーンに十分なリソースがない場合、容量不足エラーが発生し、予約に失敗します。
  • 確約利用割引と併用した場合:
    • GPU とローカル SSD の確約利用割引の場合、コミットメントの購入時に予約を作成する必要があります。
    • 予約に確約利用割引が関連付けられている場合、予約を削除できません。
    • K80 GPU の場合、1 年間のコミットメントのみ購入できます。
  • 確約利用割引に関連付けられていない予約は任意の期間継続されますが、通常のインスタンスと同じ 1 分間の最低料金が適用されます。

予約の仕組み

必要な VM インスタンスを確保するために予約を作成します。予約を作成すると、これらのリソースがいつでも使用できる状態になります。予約を作成するときに、予約の使用方法を選択できます。たとえば、予約のプロパティ(デフォルトの動作)に一致する新規または既存のインスタンスに、予約を自動的に適用するように設定できます。また、特定の VM インスタンスだけに予約が適用されるように指定することもできます。

いずれの場合も、予約のプロパティに完全に一致する場合にのみ、VM インスタンスに予約が適用されます。予約を使用するインスタンスは、次の予約プロパティと一致している必要があります。

  • ゾーン
  • vCPU
  • 最小 CPU プラットフォーム
  • メモリ
  • GPU
  • ローカル SSD

VM インスタンスが予約のプロパティと一致した場合、特に指定のない限り、既存か新規かにかかわらず、該当するすべての VM インスタンスに予約が自動的に適用されます。たとえば、10 個の custom-8-10240 インスタンスに予約を作成したときに、5 個の custom-8-10240 インスタンスが予約の条件を満たしている場合、これらの 5 個のインスタンスで 5 個の予約が使用されます。その後、条件を満たす 3 個のインスタンスを作成すると、3 個の予約がさらに使用されます。

このデフォルトの動作を変更するには、予約とインスタンスを作成するときに特定のオプションを指定します。

  • 自動的に適用されない予約を作成するには、specificReservationRequired オプションを使用します。インスタンスの作成時に予約を明示的にした場合にのみ、これらの予約が使用されます。
  • 予約を使用するインスタンスを指定するには、reservationAffinity オプションを使用します。該当する予約がインスタンスに自動的に適用されるように指定できます。該当する予約が自動的に適用されないように設定することもできます。また、特定の予約のみを使用するように指定することも可能です。

予約を使用しているインスタンスを停止または削除すると、インスタンスは予約の使用数として計算されなくなります。予約したリソースは利用可能な状態に戻ります。

予約を削除したときに、予約済みのリソースを使用しているインスタンスを削除しなかった場合、インスタンスは引き続き存在し、通常の料金が課金されます。

予約を作成する

VM インスタンスの予約を作成するには、gcloud コマンドライン ツールまたは API を使用します。コンソールから予約を作成することはできません。デフォルトでは、予約の条件に一致する VM インスタンスがその予約を自動的に使用します。自動的に使用されない予約を作成するには、specificReservationRequired オプションを使用します。

gcloud

gcloud beta compute reservations create コマンドを使用して、新しい予約を作成します。

gcloud beta compute reservations create [RESERVATION_NAME] \
    --machine-type=[MACHINE_TYPE] \
    --min-cpu-platform [MINIMUM_CPU_PLATFORM] \
    --vm-count=[NUMBER_OF_VMS] \
    --accelerator=count=[NUMBER_OF_ACCELERATORS],type=[ACCELERATOR_TYPE] \
    --local-ssd=size=[SIZE_IN_GB],interface=[INTERFACE] \
    --require-specific-reservation \
    --zone=[ZONE]

ここで

  • [RESERVATION_NAME] は、作成する予約の名前です。
  • [MACHINE_TYPE] は、マシンタイプです。たとえば、n1-standard-1 と指定します。カスタム マシンタイプの場合は、custom-[CPUS]-[MEMORY] という形式を使用します。
    • [CPUS] は、vCPU の数です。
    • [MEMORY] は、このインスタンスの合計メモリです。メモリの量には、256 MB の倍数を MB 単位で指定します。たとえば、5 GB のメモリは 5,120 MB で、custom-4-5120 となります。詳しい制限事項については、カスタム マシンタイプの仕様をご覧ください。
  • [MINIMUM_CPU_PLATFORM] は、各インスタンスに使用する最小 CPU です。
  • [NUMBER_OF_VMS] は、予約する VM インスタンスの数量です。
  • [NUMBER_OF_ACCELERATORS] は、インスタンスごとに追加する GPU の数です。
  • [ACCELERATOR_TYPE] は、アクセラレータのタイプです。
  • [SIZE_IN_GB] は、各インスタンスに接続するローカル SSD の量(GB 単位)です。この値は 375 の倍数にする必要があります。
  • [INTERFACE] は、ローカル SSD が使用するインターフェースのタイプです。有効なオプションは scsinvme です。
  • [ZONE] は、リソースを予約するゾーンです。

--require-specific-reservation フラグを追加して、この予約の明示的な対象である VM インスタンスのみが予約を使用するように指定することもできます。予約済みリソースの構成オプションについては、予約の仕組みをご覧ください。

たとえば、明示的な対象になっている場合にのみ使用できる予約を us-central1-a で作成する場合は、次のようなコマンドを使用します。この例では、8 基の Intel Haswell(以降の)vCPU、10 GB のメモリ、2 基の V100 GPU、375 GB のローカル SSD を装備したカスタムマシンを 10 台を予約しています。

gcloud beta compute reservations create my-reservation \
    --machine-type=custom-8-10240 \
    --min-cpu-platform "Intel Haswell" \
    --vm-count=10 \
    --accelerator=count=2,type=nvidia-tesla-v100 \
    --local-ssd=size=375,interface=scsi \
    --require-specific-reservation \
    --zone us-central1-c

使用可能なフラグの一覧については、gcloud beta compute reservations create リファレンスをご覧ください。

API

API では、reservations.insert メソッドに対する POST リクエストを作成します。リクエストの本文に次のパラメータを指定します。

POST https://www.googleapis.com/compute/beta/projects/[PROJECT_ID]/zones/[ZONE]/reservations

{
  "name":"[RESERVATION_NAME]",
  "specificReservation":{
    "count":"[NUMBER_OF_VMS]",
    "instanceProperties":{
      "machineType":"[MACHINE_TYPE]",
      "minCpuPlatform": "[MINIMUM_CPU_PLATFORM]",
      "guestAccelerators":[
        {
          "acceleratorCount":"[NUMBER_OF_ACCELERATORS]",
          "acceleratorType":"[ACCELERATOR_TYPE]"
        }
      ],
      "localSsds":[
        {
          "diskSizeGb":"[SIZE_IN_GB]",
          "interface":"[INTERFACE]"
        }
      ]
    }
  }
}

ここで

  • [PROJECT_ID] は、リクエストのプロジェクト ID です。
  • [ZONE] は、リソースを予約するゾーンです。
  • [RESERVATION_NAME] は、作成する予約の名前です。
  • [NUMBER_OF_VMS] は、予約する VM インスタンスの数量です。
  • [MACHINE_TYPE] は、事前定義またはカスタム マシンタイプです。たとえば、n1-standard-1 と指定します。カスタム マシンタイプの場合は、custom-[CPUS]-[MEMORY] という形式を使用します。
    • [CPUS] は、vCPU の数です。
    • [MEMORY] は、このインスタンスの合計メモリです。メモリの量には、256 MB の倍数を MB 単位で指定します。たとえば、5 GB のメモリは 5,120 MB で、custom-4-5120 となります。詳しい制限事項については、カスタム マシンタイプの仕様をご覧ください。
  • [MINIMUM_CPU_PLATFORM] は、各インスタンスの最小 CPU です。
  • [NUMBER_OF_ACCELERATORS] は、インスタンスごとに追加する GPU の数です。
  • [ACCELERATOR_TYPE] は、アクセラレータのタイプです。
  • [SIZE_IN_GB] は、各インスタンスに接続するローカル SSD の量(GB 単位)です。この値は 375 の倍数にする必要があります。
  • [INTERFACE] は、ローカル SSD が使用するインターフェースのタイプです。有効なオプションは scsinvme です。

specificReservationRequired ブール型フィールドを追加して、この予約を対象に指定している VM インスタンスのみがこの予約を使用できるように設定することもできます。予約でインスタンスを使用する構成オプションについては、予約の仕組みをご覧ください。

たとえば、この予約が明示的に対象とされている場合にのみ使用できるリソースを us-central1-a で予約する場合、次のようなリクエストを作成します。この例では、8 基の Intel Haswell(以降の)vCPU、10 GB のメモリ、2 基の V100 GPU、375 GB のローカル SSD を装備したカスタムマシンを 10 台を予約しています。

POST https://www.googleapis.com/compute/beta/projects/my-project/zones/us-central1-a/reservations

{
  "name": "reservation-1",
  "specificReservation":
  {
    "count": "10",
    "instanceProperties":
    {
      "machineType": "custom-8-10240",
      "minCpuPlatform": "Intel Haswell",
      "guestAccelerators":
      [
        {
          "acceleratorCount": 2,
          "acceleratorType": "nvidia-tesla-v100"
        }
      ],
      "localSsds":
      [
        {
          "diskSizeGb": "375",
          "interface": "SCSI"
        }
      ]
    }
  },
  "specificReservationRequired": true
}

予約されたインスタンスの使用

インスタンスを作成するときに、インスタンスが予約を使用する方法を選択します。デフォルトでは、条件に一致するすべての予約を使用します。特定の予約のみを使用するように選択することも、予約をまったく使用しないように設定することもできます。これらの設定を行うには、インスタンスの予約アフィニティ フラグを使用します。インスタンスで特定の予約を使用するように設定するには、予約を作成するときに、対応する特定の予約必須フラグを指定する必要があります。詳細については、予約の仕組みをご覧ください。

一致する任意の予約からインスタンスを使用する

このモデルでは、インスタンスのプロパティが予約済みインスタンスのプロパティと一致する場合、既存か新規かに関係なく、該当するインスタンスに自動的に予約が適用されます。このモデルは、大量の VM の作成または削除を行うときに可能な限り予約を利用する場合に便利です。

予約を作成するときに、--require-specific-reservation フラグを除外すると、明示的に対象を指定しなくても、条件を満たすインスタンスがこの予約を使用できるようになります。

gcloud

  1. reservation-01 という予約を作成します。

    gcloud beta compute reservations create reservation-01 \
        --machine-type=n1-standard-32 \
        --min-cpu-platform "Intel Skylake" \
        --vm-count=2 \
        --zone=us-central1-a
    
  2. any 予約を対象とし、reservation-01 のインスタンス プロパティと一致する VM インスタンスを作成します。このプロパティには、ゾーン、vCPU、最小 CPU プラットフォーム、メモリ、GPU、ローカル SSD のプロパティが含まれています。

    gcloud beta compute instances create instance-1 \
        --machine-type=n1-standard-32 \
        --min-cpu-platform "Intel Skylake" \
        --zone=us-central1-a \
        --reservation-affinity=any
    

API

1. reservation-01 という名前の予約を作成します。

<pre class="devsite-click-to-copy">POST https://www.googleapis.com/compute/beta/projects/my-project/zones/us-central1-a/reservations

{
  "name":"reservation-01",
  "specificReservation":{
    "count":"2",
    "instanceProperties":{
      "machineType":"n1-standard-32",
      "minCpuPlatform": "Intel Haswell",
    }
  },
  <strong>"specificReservationRequired": false</strong>
}
</pre>

1. any 予約を対象とし、reservation-01 のインスタンス プロパティと一致する VM インスタンスを作成します。このプロパティには、ゾーン、vCPU、最小 CPU プラットフォーム、メモリ、GPU、ローカル SSD のプロパティが含まれています。

<pre class="devsite-click-to-copy">POST https://www.googleapis.com/compute/beta/projects/my-project/zones/us-central1-a/instances

{
  "name": "instance-1",
  "machineType": "zones/us-central1-a/machineTypes/n1-standard-32",
  "minCpuPlatform": "Intel Haswell",
  <strong>"reservationAffinity":
  {
    "consumeReservationType": "ANY_RESERVATION"
  },</strong>
  ...
}
</pre>

特定の予約からインスタンスを使用する

このモデルでは、特定の予約を対象にした新しいインスタンスだけがこの予約を使用します。このモデルは、特定のイベントのバックアップとして特定の容量を確保する場合に便利です。

予約を名前で指定したインスタンスのみが使用できるようにするには、予約を作成するときに --require-specific-reservation フラグを追加します。次に、予約のプロパティに一致する VM を作成し、--reservation-affinity=specific フラグと --reservation=[RESERVATION_NAME] フラグを使用して予約を対象に指定します。

たとえば、reservation-02 という名前の予約を作成して、この予約のリソースを使用するインスタンスを作成します。

gcloud

reservation-02 という名前の予約を作成して、この予約の対象となるインスタンスのみが使用できるリソースを指定します。

gcloud beta compute reservations create reservation-02 \
    --machine-type=n1-standard-32 \
    --min-cpu-platform "Intel Skylake" \
    --vm-count=10 \
    --zone=us-central1-a \
    --require-specific-reservation

reservation-02 を対象とし、予約のインスタンス プロパティ(ゾーン、vCPU、最小 CPU プラットフォーム、メモリ、GPU、ローカル SSD)と一致する VM インスタンスを作成します。

gcloud beta compute instances create instance-2 \
    --machine-type=n1-standard-32 \
    --min-cpu-platform "Intel Skylake" \
    --zone=us-central1-a \
    --reservation-affinity=specific \
    --reservation=reservation-02

API

reservation-02 という名前の予約を作成して、この予約の対象となるインスタンスのみが使用できるリソースを指定します。

POST https://www.googleapis.com/compute/beta/projects/my-project/zones/us-central1-a/reservations

{
  "name":"reservation-02",
  "specificReservation":{
    "count":"10",
    "instanceProperties":{
      "machineType":"n1-standard-32",
      "minCpuPlatform": "Intel Haswell",
    }
  },
  "specificReservationRequired": true
}

reservation-02 を対象とし、予約のインスタンス プロパティ(ゾーン、vCPU、最小 CPU プラットフォーム、メモリ、GPU、ローカル SSD)と一致する VM インスタンスを作成します。

POST https://www.googleapis.com/compute/beta/projects/my-project/zones/us-central1-a/instances

{
  "name": "instance-2",
  "machineType": "zones/us-central1-a/machineTypes/n1-standard-32",
  "minCpuPlatform": "Intel Haswell",
  "reservationAffinity":
  {
    "consumeReservationType": "SPECIFIC_RESERVATION",
    "key": "googleapis.com/reservation-name",
    "values":
    ["reservation-02"
    ]
  },
  ...
}

予約を使用しないインスタンスを作成する

予約されたリソースを使用しないようにするには、VM を作成するときに予約アフィニティ フラグを「none」に設定します。

gcloud

予約から使用しないインスタンスを作成します。

gcloud beta compute instances create instance-3 --reservation-affinity=none

API

予約から使用しないインスタンスを作成します。

POST https://www.googleapis.com/compute/beta/projects/my-project/zones/us-central1-a/instances

{
  "machineType": "zones/us-central1-a/machineTypes/n1-standard-16",
  "name": "instance-3",
  "reservationAffinity":
  {
    "consumeReservationType": "NO_RESERVATION"
  },
  ...
}

予約の一覧と情報を取得する

予約の一覧を表示するには、gcloud コマンドライン ツールまたは API を使用します。

gcloud

予約リストを取得するには、gcloud beta compute reservations list コマンドを使用します。

gcloud beta compute reservations list [--filter="zone:('[ZONE]')"]

Name             InUse    Count   Zone
reservation-04   25       50      us-central1-a
reservation-05   0        100     us-central1-b

予約の情報を取得するには、gcloud beta compute reservations describe コマンドを使用します。

gcloud beta compute reservations describe [RESERVATION_NAME] --zone=[ZONE]

creationTimestamp: '2019-04-01T08:29:10.210-07:00'
id: '702162498650398927'
kind: compute#reservation
name: reservation-04
selfLink: https://www.googleapis.com/compute/beta/projects/my-project/zones/us-central1-a/reservations/reservation-04
selfLinkWithId: https://www.googleapis.com/compute/beta/projects/my-project/zones/us-central1-a/reservations/702162498650398927
specificReservation:
  count: '50'
  inUseCount: '25'
  instanceProperties:
    machineType: n1-standard-1
specificReservationRequired: true
zone: https://www.googleapis.com/compute/beta/projects/my-project/zones/us-central1-a

count 値と inUseCount 値を使用すると、予約の使用状況を確認できます。この例では、50 個のリリースが予約され、その中の 25 個が現在使用中です。

API

API では、reservations.list メソッドに GET リクエストを送信し、予約リストを取得します。

GET https://www.googleapis.com/compute/beta/projects/[PROJECT_ID]/zones/[ZONE]/reservations

予約の情報を取得するには、reservations.get メソッドを呼び出します。

GET https://www.googleapis.com/compute/beta/projects/[PROJECT_ID]/zones/[ZONE]/reservations/[RESERVATION_NAME]

{
 "id": "702162498650398927",
 "creationTimestamp": "2019-04-01T08:29:10.210-07:00",
 "selfLink": "https://www.googleapis.com/compute/beta/projects/my-project/zones/us-central1-a/reservations/reservation-04",
 "selfLinkWithId": "https://www.googleapis.com/compute/beta/projects/my-project/zones/us-central1-a/reservations/702162498650398927",
 "zone": "https://www.googleapis.com/compute/beta/projects/my-project/zones/us-central1-a",
 "name": "reservation-04",
 "specificReservationRequired": false,
 "kind": "compute#reservation",
 "specificReservation": {
  "instanceProperties": {
   "machineType": "n1-standard-32"
  },
  "count": "50",
  "inUseCount": "25"
 }
}

count 値と inUseCount 値を使用すると、予約の使用状況を確認できます。この例では、50 個のリリースが予約され、その中の 25 個が現在使用中です。

予約を変更する

予約がコミットメントに関連付けられていない場合、予約のサイズ変更や削除を行うことができます。

予約のサイズを変更する

コミットメントに関連付けられていない予約の VM の数を変更するには、gcloud コマンドライン ツールまたは API を使用します。

gcloud

予約のサイズを変更するには、gcloud beta compute reservations update コマンドを使用します。次に例を示します。

2 台の VM の予約を作成する。

gcloud beta compute reservations create reservation-01 \
    --machine-type=n1-standard-32 \
    --zone=us-central1-a \
    --vm-count=2

予約の VM の数を 2 から 10 に変更する。

gcloud beta compute reservations update reservation-01 \
    --zone=us-central1-a \
    --vm-count=10

API

API では、reservations.resize メソッドに対する POST リクエストを作成し、リクエストの本文に新しい specificSkuCount を指定します。次のリクエスト本文では、予約の VM 数を 10 に変更しています。

POST https://www.googleapis.com/compute/beta/projects/[PROJECT_ID]/zones/[ZONE]/reservations/[RESERVATION_NAME]/resize

{"specificSkuCount": "10"}

リクエストの時点で対象のゾーンに十分なリソースがあり、対象のリージョンに十分な割り当て量が残っている場合、更新リクエストに成功します。

予約を削除する

コミットメントに関連付けられていない予約は削除できます。削除するには、gcloud コマンドライン ツールか API を使用します。

gcloud

予約を解除するには、delete コマンドを使用します。

gcloud beta compute reservations delete [RESERVATION_NAME] --zone [ZONE]

API

API で、reservation.delete メソッドに対する DELETE リクエストを作成します。

DELETE https://www.googleapis.com/compute/beta/projects/[PROJECT_ID]/zones/[ZONE]/reservations/[RESERVATION_NAME]

削除コマンドが正常に完了すると、予約に対する課金が停止します。リソースの予約も解除されます。予約を削除しても、その予約に関連付けられている稼働中のインスタンスには影響がありません。これらのインスタンスは引き続き課金対象になります。

予約と確約利用割引の併用

確約利用割引は、1 年分または 3 年分の割引価格契約を提供しますが、特定のゾーンの容量を予約するものではありません。予約を作成することで、予約された VM が実行されていなくても、特定のゾーンで容量が確実に保持されます。予約とコミットメントを組み合わせると、割引料金が適用される予約済みのリソースを使用できます。

デフォルトでは、予約の作成時にコアとメモリの確約利用割引が VM インスタンスに自動的に適用されます。ただし、GPU とローカル SSD の確約利用割引を適用するには、コミットメントの購入時にこれらのリソースの予約を作成する必要があります。

購入したコミットメントを取り消すことはできません。詳細については、確約利用割引をご覧ください。

GPU またはローカル SSD のコミットメントを購入する

GPU またはローカル SSD のコミットメントを購入するには、コミットメントの購入時に、これらのリソースを含む予約を作成する必要があります。gcloud ツールまたは API を使用できます。

特定の GPU タイプではコミットメントの購入が必要になります。たとえば、Tesla P100 や Tesla V100 の GPU は購入できますが、Tesla P100 GPU のコミットメントは購入できません。また、他の GPU に適用することもできません。

GPU とローカル SSD の予約量は、確約する量と同じにする必要があります。たとえば、2 つの V100 GPU を予約する場合は、2 つの V100 GPU を確約する必要があります。ただし、vCPU とメモリの量は、コミットメントよりも少なくすることができます。

gcloud

コミットメントを購入するには、gcloud beta compute commmitments create コマンドを使用し、予約を作成するフラグを指定します。

たとえば、次のコミットメントでは 4 つの GPU を n1-standard-32 の 2 つの us-central1-a インスタンスに予約しています。

gcloud beta compute commitments create commitment-01 \
    --region=us-central1 \
    --resources=vcpu=96,memory=624GB \
    --resources-accelerator=type=nvidia-tesla-v100,count=4 \
    --plan 12-month \
    --reservation=reservation-01 \
    --reservation-zone=us-central1-a \
    --machine-type=n1-standard-16 \
    --accelerator=type=nvidia-tesla-v100,count=2 \
    --vm-count=2

コミットメントを購入するときに、YAML ファイルを使用して複数の予約を作成することもできます。

gcloud beta compute commitments create commitment-01 \
    --region=us-central1 \
    --resources=vcpu=96,memory=624,local-ssd=750 \
    --resources-accelerator=type=nvidia-tesla-v100,count=1 \
    --plan 12-month \
    --reservations-from-file=[YAML_FILE]

[YAML_FILE] には予約プロパティが含まれています。

たとえば、次の YAML ファイルには 2 つの予約が含まれています。最初の予約 res-01 には、1 GPU を使用する 1 つの n1-standard-1 インスタンスが設定されています。これはターゲット予約です。つまり、予約済みインスタンスを使用するには、名前でその予約を指定する必要があります。2 番目の予約 res-02 には、2 種類のローカル SSD が接続された 1 つの n1-standard-1 VM インスタンスが設定されています。

- reservation: res-01
  reservation_zone: us-central1-a
  require_specific_reservation: true
  vm_count: 1
  machine_type: n1-standard-1
  accelerator:
  - count: 1
    type: nvidia-tesla-v100
- reservation: res-02
  reservation_zone: us-central1-a
  vm_count: 1
  machine_type: n1-standard-1
  local_ssd:
  - interface: scsi
    size: 375
  - interface: nvme
    size: 375

API

regionCommitments.insert API を使用して reservations フィールドを指定し、予約のプロパティを定義します。たとえば、次のコミットメントでは 4 つの GPU を us-central1-a の 2 つのインスタンスに予約しています。

POST https://www.googleapis.com/compute/beta/projects/[PROJECT_ID]/regions/[REGION]/commitments

{
  "name": "commitment-01",
  "plan": "TWELVE_MONTH",
  "resources":
  [
    {
      "amount": "96",
      "type": "VCPU"
    },
    {
      "amount": "638976",
      "type": "MEMORY"
    },
    {
      "acceleratorType": "nvidia-tesla-v100",
      "amount": "4",
      "type": "ACCELERATOR"
    }
  ],
  "reservations":
  [
    {
      "name": "reservation-01",
      "specificReservation":
      {
        "count": "2",
        "instanceProperties":
        {
          "guestAccelerators":
          [
            {
              "acceleratorCount": 2,
              "acceleratorType": "nvidia-tesla-v100"
            }
          ],
          "machineType": "n1-standard-8"
        }
      },
      "specificReservationRequired": false,
      "zone": "us-central1-a"
    }
  ]
}

ターゲット ゾーンに十分なリソースがあり、リクエスト時に十分な割り当てがある場合にのみ、コミットメントが正常に作成されます。

追加された予約でコミットメントを作成すると、そのコミットメントの期間中は予約を削除できません。コミットメントが期限切れになると、Compute Engine は関連付けられた予約を自動的に削除します。

To check if your reservations are consumed or not, use the
[`reservations.list`](#listing_and_describing_reservations) method.

If you need to transfer GPUs or local SSDs across committed reservations,
see
[Modifying reservations that are attached to commitments](#modifying_reservations_that_are_attached_to_commitments).

コミットメントに関連付けられている予約を変更する

コミットメントに GPU またはローカル SSD を含む予約が存在する場合、gcloud ツールまたは API を使用して、GPU またはローカル SSD をこれらの予約から移動できます。たとえば、予約の GPU を新しい別の予約に移動できます。

制限事項:

  • リソースを移動できるのは 2 つの予約間に限られます。1 つの予約が移動元になり、もう 1 つの予約が移動先になります。移動元として新しい予約を設定することはできません。移動先の予約は新しい予約でもかまいません。
  • 移動元と移動先の予約は同じゾーンに存在している必要があります。
  • 予約間で既存のリソースを移動できますが、既存の予約のリソース プロパティを変更することはできません。
  • GPU とローカル SSD の合計量は一定でなければなりません。
  • リクエストごとに 100 個の VM まで変更できます。これ以上の変更が必要な場合は、API 呼び出しを複数回行うか、Google Cloud サポートまでお問い合わせください。

gcloud

gcloud beta compute commitments update-reservations コマンドを使用します。

1 つの予約に 1 つのコミットメントを作成します。res-1 には 4 個の n1-standard-1 インスタンスがあり、それぞれに 1 基の P100 GPU が搭載されています(4 基の vCPU と 4 基の P100 GPU)。合計で 4 基の P100 GPU が予約されます。

gcloud beta compute commitments create my-commitment-with-reservations \
    --region=asia-east1 \
    --resources=vcpu=10,memory=32GB \
    --resources-accelerator=type=nvidia-tesla-p100,count=4 \
    --plan 12-month \
    --reservations-from-file=one-reservation.yaml

one-reservation.yaml の内容は次のとおりです。

- reservation: res-1
  reservation_zone: asia-east1-a
  require_specific_reservation: true
  vm_count: 4
  machine_type: n1-standard-1
  accelerator:
  - count: 1
    type: nvidia-tesla-p100

コミットメントを更新して、一部のリソースを res-1 から新しい予約 res-2 に移動します。この例では、次のようになります。

  • res-1 を変更し、2 基の P100 GPU を搭載する n1-standard-1 インスタンスを 2 個予約します(2 基の vCPU と 2 基の P100 GPU)。
  • res-2 を追加し、1 基の P100 GPU を搭載する n1-standard-2 インスタンスを 2 個を予約します(4 基の vCPU と 2 基の P100 GPU)。

コミットメントで予約した GPU の合計数は 4 個のまま変わりません。

gcloud beta compute commitments update-reservations my-commitment-with-reservations \
    --region=us-central1 \
    --reservations-from-file=two-reservations.yaml

two-reservations.yaml の内容は次のとおりです。

- reservation: res-1
  reservation_zone: asia-east1-a
  require_specific_reservation: true
  vm_count: 2
  machine_type: n1-standard-1
  accelerator:
  - count: 1
    type: nvidia-tesla-p100
- reservation: res-2
  reservation_zone: asia-east1-a
  require_specific_reservation: true
  vm_count: 2
  machine_type: n1-standard-2
  accelerator:
  - count: 1
    type: nvidia-tesla-p100

API

regionCommitments.updateReservations メソッドを使用します。

次の予約を含むコミットメントを作成します。

  • res-1 で、1 基の nvidia-tesla-p100 GPU を搭載した n1-standard-1 インスタンスを 4 個予約します(4 基の vCPU と 4 基の P100 GPU)

合計で 4 基の P100 GPU が予約されます。

POST https://www.googleapis.com/compute/beta/projects/[PROJECT_ID]/regions/us-central1/commitments

{
  "name": "my-commitment-with-reservation",
  "plan": "TWELVE_MONTH",
  "reservations":
  [
    {
      "name": "res-1",
      "specificReservation":
      {
        "count": "4",
        "instanceProperties":
        {
          "guestAccelerators":
          [
            {
              "acceleratorCount": 1,
              "acceleratorType": "nvidia-tesla-p100"
            }
          ],
          "machineType": "n1-standard-1"
        }
      },
      "specificReservationRequired": true,
      "zone": "asia-east1-a"
    }
  ],
  "resources":
  [
    {
      "amount": "10",
      "type": "VCPU"
    },
    {
      "amount": "32768",
      "type": "MEMORY"
    },
    {
      "acceleratorType": "nvidia-tesla-p100",
      "amount": "4",
      "type": "ACCELERATOR"
    }
  ]
}

コミットメントを更新して、一部のリソースを res-1 から新しい予約 res-2 に移動します。この例では、次のようになります。

  • res-1 を変更し、2 基の P100 GPU を搭載する n1-standard-1 インスタンスを 2 個予約します(2 基の vCPU と 2 基の P100 GPU)。
  • res-2 を追加し、1 基の P100 GPU を搭載する n1-standard-2 インスタンスを 2 個を予約します(4 基の vCPU と 2 基の P100 GPU)。

コミットメントで予約した GPU の合計数は 4 個のまま変わりません。

POST https://www.googleapis.com/compute/staging_alpha/projects/[PROJECT_ID]/regions/us-central1/commitments/commitment-with-two-reservations/updateReservations

{
  "reservations":
  [
    {
      "name": "res-1",
      "specificReservation":
      {
        "count": "2",
        "instanceProperties":
        {
          "guestAccelerators":
          [
            {
              "acceleratorCount": 1,
              "acceleratorType": "nvidia-tesla-p100"
            }
          ],
          "machineType": "n1-standard-1"
        }
      },
      "specificReservationRequired": true,
      "zone": "asia-east1-a"
    },
    {
      "name": "res-2",
      "specificReservation":
      {
        "count": "2",
        "instanceProperties":
        {
          "guestAccelerators":
          [
            {
              "acceleratorCount": 1,
              "acceleratorType": "nvidia-tesla-p100"
            }
          ],
          "machineType": "n1-standard-2"
        }
      },
      "specificReservationRequired": true,
      "zone": "asia-east1-a"
    }
  ]
}

使用状況レポートの表示

エクスポート機能を使用すると、Compute Engine の使用状況レポートを Cloud Storage バケットにエクスポートできます。手順については、使用状況レポートを表示するをご覧ください。

使用状況レポートには、使用済みのリソース(通常の vCPU、メモリ、GPU、ローカル SSD)の使用状況が表示されます。未使用のリソースは、予約済みのリソースとして表示されます。これらのリソースのエントリには、リソースの URI が次の形式で表示されます。

https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/reservations/[RESERVATION_NAME]

例:

Report Date,MeasurementId,Quantity,Unit,Resource URI,ResourceId,Location
2019-03-31,com.google.cloud/services/compute-engine/VmimageN1StandardCore,1207797,seconds,https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/reservations/[RESERVATION_NAME],[RESOURCE_ID],[ZONE]
2019-03-31,com.google.cloud/services/compute-engine/VmimageN1StandardRam,4.86323E+15,byte-seconds,https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/reservations/[RESERVATION_NAME],[RESOURCE_ID],[ZONE]
2019-03-31,com.google.cloud/services/compute-engine/VmimageN1StandardRam,6.82177E+15,byte-seconds,https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instances/[INSTANCE_NAME],[RESOURCE_ID],[ZONE]
2019-03-31,com.google.cloud/services/compute-engine/VmimageN1StandardCore,1694204,seconds,https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instances/[INSTANCE_NAME],[RESOURCE_ID],[ZONE]
...

予約の課金

予約は、予約しているリソースと同じレートで課金されます。通常の VM と同様に、継続利用割引、確約利用割引、個別契約の料金が適用されます。

次の場合について考えてみましょう。

  • us-central1 で 3 基の vCPU のコミットメントを購入している
  • us-central1-a で 5 基の vCPU を使用している
  • us-central1-a で 10 基の vCPU を予約している

確約利用割引が適用された予約の例

この場合、次のように課金されます。

対象 vCPU の数
確約利用割引の料金 3
オンデマンド料金(予約で使用されている 2 基の vCPU の使用料金 + 予約で未使用の 5 基の vCPU の使用料金) 7

次のステップ

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

Compute Engine ドキュメント