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 オプションを使用します。

リソースを予約するためにコミットメントを作成する必要はありません。ただし、GPU とローカル SSD で確約利用割引の料金を利用するには、これらのリソースの予約をコミットメントの購入時に作成する必要があります。詳細については、予約と確約利用割引の併用をご覧ください。

Console

  1. GCP Console で [確約利用割引] ページに移動します。

    [確約利用割引] ページに移動

  2. [予約を作成] をクリックして、親コミットメントのない予約を作成します。

  3. 予約に名前を付けます。

  4. この予約名を対象とし、かつ条件を満たしているインスタンスを作成する場合にのみ、この予約のリソースを使用するには、[VM インスタンスでの使用] で、[特定の予約を選択する] を選択します。

  5. リソースを予約するリージョンゾーンを選択します。

  6. 予約する VM インスタンスの数を指定します。

  7. インスタンスごとに予約するリソースを指定します。

    • インスタンス テンプレートを使用する場合は、[インスタンス テンプレートを使用] をクリックして、リストからインスタンス テンプレートを選択します。
    • それ以外の場合は、[マシンタイプを指定] をクリックします。
      1. 定義済みのマシンタイプの場合は、プルダウン メニューから必要なタイプを選択します。
      2. 最小 CPU プラットフォームなどのカスタム マシンタイプを使用する場合や、GPU を追加する場合は、[カスタマイズ] をクリックして項目を選択します。
      3. 必要であれば、各インスタンスに追加するローカル SSD ディスクの数を指定し、使用するインターフェース タイプを設定します。
  8. [作成] ボタンをクリックして、予約を作成します。

gcloud

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

gcloud 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 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 compute reservations create リファレンスをご覧ください。

API

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

POST https://www.googleapis.com/compute/v1/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/v1/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 フラグを除外すると、条件を満たすインスタンスがこの予約を自動的に使用できるようになります。

Console

  1. 予約を作成します。

    1. GCP Console で [確約利用割引] ページに移動します。

      [確約利用割引] ページに移動

    2. [予約を作成] をクリックして、親コミットメントのない予約を作成します。

    3. 予約に名前を付けます(例: reservation-01)。

    4. [VM インスタンスでの使用] で [予約を自動的に使用する] を選択して、条件を満たすインスタンスがこの予約を自動的に使用できるようにします。

    5. リソースを予約するリージョンゾーンを選択します。

    6. 予約する VM インスタンスの数を指定します。

    7. 各インスタンスに必要なリソースを指定します。たとえば、vCPU の数、最小 CPU プラットフォーム、メモリの量、GPU、ローカル SSD を必要に応じて指定します。

    8. [作成] ボタンをクリックして、予約を作成します。

  2. 予約を対象とし、予約のインスタンス プロパティに一致する VM インスタンスを作成します。

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

      [VM インスタンス] ページに移動

    2. プロジェクトを選択し、[続行] をクリックします。
    3. [インスタンスを作成] ボタンをクリックします。
    4. [名前] でインスタンスの名前を指定します。
    5. reservation-01 プロパティに一致するマシンタイプを指定します。たとえば、予約で最小 CPU プラットフォームまたは GPU を指定した場合、この予約を使用するには、このインスタンスを予約に合わせてカスタマイズする必要があります。
    6. 予約にローカル SSD が含まれている場合、[ディスク] で [新しいディスクを追加] をクリックして、予約に一致するローカル SSD を追加します。
    7. [管理] の [予約] で、[作成済みの予約を自動的に使用する] を選択します。
    8. [作成] をクリックします。

gcloud

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

    gcloud 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 のインスタンス プロパティ(ゾーン、vCPU、最小 CPU プラットフォーム、メモリ、GPU、ローカル SSD)と一致する VM インスタンスを作成します。

    gcloud 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 という名前の予約を作成します。

    POST https://www.googleapis.com/compute/v1/projects/my-project/zones/us-central1-a/reservations
    
    {
      "name":"reservation-01",
      "specificReservation":{
        "count":"2",
        "instanceProperties":{
          "machineType":"n1-standard-32",
          "minCpuPlatform": "Intel Haswell",
        }
      },
      "specificReservationRequired": false
    }
    
  2. 任意(any)の利用可能な予約を対象とし、reservation-01 のインスタンス プロパティ(ゾーン、vCPU、最小 CPU プラットフォーム、メモリ、GPU、ローカル SSD)と一致する VM インスタンスを作成します。

    POST https://www.googleapis.com/compute/v1/projects/my-project/zones/us-central1-a/instances
    
    {
      "name": "instance-1",
      "machineType": "zones/us-central1-a/machineTypes/n1-standard-32",
      "minCpuPlatform": "Intel Haswell",
      "reservationAffinity":
      {
        "consumeReservationType": "ANY_RESERVATION"
      },
      ...
    }
    

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

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

予約を作成するときに、予約を自動的に使用しないように指定します。その予約を対象とし、そのプロパティに一致する VM を作成します。

インスタンス テンプレートを使用してリージョン マネージド インスタンス グループに VM を作成する場合は、該当する各ゾーンに同じ名前で同一の予約を作成します。次に、グループのインスタンス テンプレートの名前を使用して、予約を対象にします。

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

Console

  1. この予約の対象となるインスタンスでのみ使用されるリソースの予約を作成します。

    1. GCP Console で [確約利用割引] ページに移動します。

      [確約利用割引] ページに移動

    2. [予約を作成] をクリックして、親コミットメントのない予約を作成します。

    3. 予約に名前を付けます(例: reservation-02)。

    4. [VM インスタンスでの使用] で [特定の予約を選択する] をオンにします。この予約を対象にし、条件を満たすインスタンスだけがこの予約を使用できるようにします。

    5. リソースを予約するリージョンゾーンを選択します。

    6. 予約する VM インスタンスの数を指定します。

    7. 各インスタンスに必要なリソースを指定します。たとえば、vCPU の数、最小 CPU プラットフォーム、メモリの量、GPU、ローカル SSD を必要に応じて指定します。

    8. [作成] ボタンをクリックして、予約を作成します。

  2. この予約名を対象とし、予約のインスタンス プロパティに一致する VM インスタンスを作成します。

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

      [VM インスタンス] ページに移動

    2. プロジェクトを選択し、[続行] をクリックします。
    3. [インスタンスを作成] ボタンをクリックします。
    4. [名前] でインスタンスの名前を指定します。
    5. reservation-01 プロパティに一致するマシンタイプを指定します。たとえば、予約で最小 CPU プラットフォームを指定した場合、この予約を使用するには、このインスタンスを予約に合わせてカスタマイズする必要があります。
    6. 予約にローカル SSD が含まれている場合、[ディスク] で [新しいディスクを追加] をクリックして、予約に一致するローカル SSD を追加します。
    7. [管理] の [予約] で、プロパティに一致する予約を選択します(たとえば、reservation-02)。
    8. [作成] をクリックして、インスタンスを作成します。

gcloud

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

    gcloud 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

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

    POST https://www.googleapis.com/compute/v1/projects/my-project/zones/us-central1-a/reservations
    
    {
      "name":"reservation-02",
      "specificReservation":{
        "count":"10",
        "instanceProperties":{
          "machineType":"n1-standard-32",
          "minCpuPlatform": "Intel Haswell",
        }
      },
      "specificReservationRequired": true
    }
  2. reservation-02 を対象とし、予約のインスタンス プロパティ(ゾーン、vCPU、最小 CPU プラットフォーム、メモリ、GPU、ローカル SSD)と一致する VM インスタンスを作成します。

    POST https://www.googleapis.com/compute/v1/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」に設定します。

Console

  1. 予約を使用しないインスタンスを作成します。
    1. [VM インスタンス] ページに移動します。

      [VM インスタンス] ページに移動

    2. [インスタンスを作成] ボタンをクリックします。
    3. 通常どおりインスタンスを作成します。
    4. [管理] の [予約] で、[使用しない] を選択して、このインスタンスが既存の予約を使用しないように設定します。
    5. [作成] をクリックして、インスタンスを作成します。

gcloud

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

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

API

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

POST https://www.googleapis.com/compute/v1/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 を使用します。

Console

  1. GCP Console で [確約利用割引] ページに移動します。

    [確約利用割引] ページに移動

  2. [予約] をクリックして、予約のリストを表示します。

予約リストには、各予約に関する詳細が含まれています。[使用されるマシン(合計)] 列には、各予約の使用状況が表示されます。

gcloud

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

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

NAME             IN_USE_COUNT   COUNT   ZONE
reservation-04   25             50      us-central1-a
reservation-05   0              100     us-central1-b

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

gcloud 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/v1/projects/my-project/zones/us-central1-a/reservations/reservation-04
selfLinkWithId: https://www.googleapis.com/compute/v1/projects/my-project/zones/us-central1-a/reservations/702162498650398927
specificReservation:
  count: '50'
  inUseCount: '25'
  instanceProperties:
    machineType: n1-standard-1
specificReservationRequired: true
status: READY
zone: https://www.googleapis.com/compute/v1/projects/my-project/zones/us-central1-a

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

API

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

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

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

GET https://www.googleapis.com/compute/v1/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/v1/projects/my-project/zones/us-central1-a/reservations/reservation-04",
 "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/my-project/zones/us-central1-a/reservations/702162498650398927",
 "zone": "https://www.googleapis.com/compute/v1/projects/my-project/zones/us-central1-a",
 "name": "reservation-04",
 "specificReservationRequired": false,
 "status": "READY",
 "kind": "compute#reservation",
 "specificReservation": {
  "instanceProperties": {
   "machineType": "n1-standard-32"
  },
  "count": "50",
  "inUseCount": "25"
 }
}

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

予約を変更する

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

予約のサイズを変更する

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

gcloud

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

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

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

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

gcloud 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/v1/projects/[PROJECT_ID]/zones/[ZONE]/reservations/[RESERVATION_NAME]/resize

{"specificSkuCount": "10"}

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

予約を削除する

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

Console

  1. GCP Console で [確約利用割引] ページに移動します。

    [確約利用割引] ページに移動

  2. [予約] をクリックして、予約のリストを表示します。
  3. 削除する予約の隣にあるチェックボックスをクリックします。

  4. [予約を削除] をクリックします。

gcloud

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

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

API

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

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

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

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

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

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

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

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

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

  • 汎用 N1 コミットメントの購入が必要になります。GPU は、N1 マシンタイプでのみサポートされます。
  • コミットメントの購入時に、GPU またはローカル SSD のいずれかを含む予約を作成する必要があります。
  • vCPU またはメモリを確約する必要はありません。

コミットメントの購入は GPU タイプを特定して行う必要があります。たとえば、購入の際 Tesla P100 または Tesla V100 のどちらを指定してもかまいませんが、Tesla P100 GPU のコミットメントを購入し、それを他の GPU タイプに適用することはできません。

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

GPU またはローカル SSD のみを確約する場合は、vCPU とメモリのコミットメントに 0 を指定できます。ただし、コミットメントに作成する予約には、コミットメントと同じ GPU とローカル SSD が含まれ、予約するマシンタイプ(vCPU およびメモリを含む)が含まれている必要があります。

予約に作成したコミットメントを購入するには、コンソール、gcloud ツール、または API を使用します。

Console

  1. GCP Console で [確約利用割引] ページに移動します。

    [確約利用割引] ページに移動

  2. [コミットメントを購入] をクリックして、新しいコミットメントを購入します。
  3. コミットメントに名前を付け、適用するリージョンを選択します。
  4. [コミットメント タイプ] で、[汎用] を選択します。
  5. コミットメントの期間(1 年または 3 年)を選択します。
  6. コミットメントの入力モードを選択します。

    • (推奨)[カスタム] 入力を選択すると、vCPU とメモリの数をカスタマイズできます。

    • [基本] 入力を選択すると、vCPU の数を選択できます。vCPU の数に合わせて Compute Engine がメモリの量を自動的に設定します。

  7. 購入する vCPU の数とメモリの量を入力します。vCPU あたりのメモリの量は、選択した割引タイプに応じて特定の割合にする必要があります。汎用の確約利用割引の場合は、vCPU あたり 0.9~6.5 GB の範囲で入力します。メモリの合計量は 256 MB の倍数でなければなりません。

    vCPU とメモリを確約せずに、GPU またはローカル SSD のみを確約して予約する場合は、vCPU とメモリのコミットメント量に 0 を指定します。

  8. [GPU を追加] をクリックして、確約する GPU のタイプGPU の数を選択します。

  9. [ローカル SSD を追加] をクリックし、確約するディスクの数を指定します。

  10. GPU とローカル SSD を使用するインスタンスに 1 つ以上の予約を作成するには、[新しい予約を追加] をクリックします。

    1. 予約に名前を付けます。
    2. [VM インスタンスでの使用] で次の操作を行います。
      • この予約名を対象にし、条件を満たしているインスタンスを作成する場合にのみ、この予約のリソースを使用するには、[特定の予約を選択する] を選択します。
      • 条件を満たすインスタンスがこの予約を自動的に使用するように設定するには、[予約を自動的に使用する] を選択します。
    3. リソースを予約するリージョンゾーンを選択します。
    4. 予約する VM インスタンスの数を指定します。
    5. インスタンスごとに予約するリソースを指定します。
      • インスタンス テンプレートを使用する場合は、[インスタンス テンプレートを使用] をクリックして、リストからインスタンス テンプレートを選択します。
      • それ以外の場合は、[マシンタイプを指定] をクリックします。
        1. 定義済みのマシンタイプの場合は、プルダウン メニューから必要なタイプを選択します。
        2. 最小 CPU プラットフォームなどのカスタム マシンタイプの場合や、GPU を追加する場合は、[カスタマイズ] をクリックして項目を選択します。
        3. 必要であれば、各インスタンスに追加するローカル SSD ディスクの数を指定し、使用するインターフェース タイプを設定します。
    6. [完了] ボタンをクリックして、予約を作成します。
  11. [購入] ボタンをクリックして、コミットメントを購入します。

  12. 購入条件を確認します。コミットメントを購入する準備ができたら [購入] を再度クリックします。

gcloud

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

たとえば、次のコミットメントでは 4 つの GPU を購入し、それらの GPU が us-central1-a の 2 つの n1-standard-32 インスタンスに使用されるよう予約しています。

gcloud 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

vCPU とメモリを確約せずに、GPU またはローカル SSD のみを確約して予約する場合は、vCPU とメモリのコミットメント量に 0 を指定します。

gcloud beta compute commitments create commitment-01 \
    --region=us-west2 \
    --resources=vcpu=0,memory=0 \ 
    --resources-accelerator=type=nvidia-tesla-p4,count=1 \
    --plan 12-month \
    --reservation=reservation-01 \
    --reservation-zone=us-west2-b \
    --machine-type=n1-standard-1 \
    --accelerator=type=nvidia-tesla-p4,count=1 \
    --vm-count=1

コミットメントの購入時に複数の予約を作成するには、YAML ファイルを使用します。例:

gcloud 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 を購入し、それらの GPU が us-central1-a の 2 つのインスタンスに使用されるよう予約しています。

POST https://www.googleapis.com/compute/v1/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"
    }
  ]
}

vCPU とメモリを確約せずに、GPU またはローカル SSD のみを確約して予約する場合は、VCPUMEMORY のコミットメント量に 0 を指定します。例:

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

{
  "name": "commitment-01",
  "plan": "TWELVE_MONTH",
  "resources":
  [
        {
      "amount": "0",
      "type": "VCPU"
    },
    {
      "amount": "0",
      "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 は関連付けられた予約を自動的に削除します。

確約した予約の間で GPU またはローカル SSD を移動する必要がある場合は、コミットメントに関連付けられている予約を変更するをご覧ください。

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

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

制限事項:

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

gcloud

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

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

gcloud 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 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/v1/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/v1/projects/[PROJECT_ID]/regions/us-central1/commitments/my-commitment-with-reservation/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 リソースが表示されます。
  • 未使用の予約済みリソース。通常の SKU 名と「予約」のリソース URI が表示されます。
  • 予約済みリソースの合計。「予約」SKU 名と「予約」のリソース URI が表示されます。これらのエントリに関連する費用はありません。これらのエントリから、使用している予約の量を計算します。
測定 MeasurementId 形式 Resource URI 形式
使用中の予約済みリソース com.google.cloud/services/compute-engine/[SKU_NAME] https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/[RESOURCE_TYPE]/[RESOURCE_NAME]

たとえば、https://www.googleapis.com/compute/v1/projects/my-project/zones/us-central1-a/instances/my-instance
未使用の予約済みリソース。 com.google.cloud/services/compute-engine/[SKU_NAME] https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/reservations/[RESERVATION_NAME]

たとえば、https://www.googleapis.com/compute/v1/projects/my-project/zones/europe-west1-a/reservations/my-reservation
予約済みリソースの合計。 com.google.cloud/services/compute-engine/Reservation[SKU_NAME] https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/reservations/[RESERVATION_NAME]

たとえば、https://www.googleapis.com/compute/v1/projects/my-project/zones/europe-west1-a/reservations/my-reservation

たとえば、my-reservation という予約の使用状況レポートを見てみましょう。

  • 1 行目は、現在使用中の予約済み RAM を示しています。行の ResourceId は、この RAM が my-instance というインスタンスによって使用されていることを示しています。
  • 2 行目は、使用されていない予約済み RAM を示しています。行の ResourceId は、この予約済みの RAM が my-reservation によって保持され、どのインスタンスでも使用されていないことを示します。
  • 3 行目は、予約済み RAM の合計を示しています。
Report Date,MeasurementId,Quantity,Unit,Resource URI,ResourceId,Location
2019-06-06,com.google.cloud/services/compute-engine/VmimageN1StandardRam,166970074857472,byte-seconds,https://www.googleapis.com/compute/v1/projects/my-project/zones/us-central2-a/instances/my-instance,1775485842510981624,us-central2-a
2019-06-06,com.google.cloud/services/compute-engine/VmimageN1StandardRam,166970074857472,byte-seconds,https://www.googleapis.com/compute/v1/projects/my-project/zones/us-central2-a/reservations/my-reservation,7.58809E+17,us-central2-a
2019-06-06,com.google.cloud/services/compute-engine/ReservationN1StandardRam,333940149714944,byte-seconds,https://www.googleapis.com/compute/v1/projects/my-project/zones/us-central2-a/reservations/my-reservation,7.58809E+17,us-central2-a
...

予約の課金

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

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

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

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

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

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

次のステップ

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

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

Compute Engine ドキュメント