共有予約を作成する


このドキュメントでは、共有予約(複数のプロジェクトで共有される予約)の作成方法と、組織内で共有予約を使用できるプロジェクトを管理する方法について説明します。

共有予約は、予約をホストするプロジェクト(オーナー プロジェクト)と、予約を共有するプロジェクト(ユーザー プロジェクト)で使用できます。同じプロパティを予約した仮想マシン(VM)インスタンスを必要とするプロジェクトが組織に複数ある場合は、共有予約を使用します。共有予約を使用することで、予約の使用率を改善し、作成または管理が必要な予約の数を減らすことができます。予約の詳細については、Compute Engine ゾーンリソースの予約をご覧ください。

予約を作成するその他の方法については、次のページをご覧ください。

  • 現在のプロジェクトに 1 年間または 3 年間のコミットメントがある場合、予約したリソースには該当する確約利用割引(CUD)が自動的に適用されます。コミットメントの購入時に、予約を作成してコミットメントに関連付けることもできます。詳細については、予約をコミットメントに関連付けるをご覧ください。

  • 単一プロジェクトでのみ使用できる予約を作成する場合は、単一のプロジェクトの予約の作成をご覧ください。

始める前に

  • 予約に関する要件制限事項を確認します。
  • 共有予約の割り当て要件制限事項を確認します。
  • 共有予約の作成に使用するプロジェクトが、組織のポリシーの管理者によって、共有予約オーナー プロジェクトcompute.sharedReservationsOwnerProjects)組織のポリシー制約の許可リストに追加されていることを確認します。この許可リストは、デフォルトでは空であるため、組織で 1 つ以上のプロジェクトに対するこの権限が付与されるまで共有予約を作成することはできません。組織のポリシーの制約の表示と編集の詳細については、このドキュメントのプロジェクトに対する共有予約の作成と変更を許可または制限するをご覧ください。
  • まだ設定していない場合は、認証を設定します。認証とは、Google Cloud サービスと API にアクセスするために ID を確認するプロセスです。ローカル開発環境からコードまたはサンプルを実行するには、次のように Compute Engine に対する認証を行います。

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

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

      gcloud init
    2. Set a default region and zone.
    3. Terraform

      ローカル開発環境でこのページの Terraform サンプルを使用するには、gcloud CLI をインストールして初期化し、ユーザー認証情報を使用してアプリケーションのデフォルト認証情報を設定します。

      1. Install the Google Cloud CLI.
      2. To initialize the gcloud CLI, run the following command:

        gcloud init
      3. If you're using a local shell, then create local authentication credentials for your user account:

        gcloud auth application-default login

        You don't need to do this if you're using Cloud Shell.

      詳細については Set up authentication for a local development environment をご覧ください。

      REST

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

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

        gcloud init

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

必要なロール

共有予約の作成に必要な権限を取得するには、次の IAM ロールを付与するよう管理者に依頼してください。

ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。

これらの事前定義ロールには、共有予約の作成に必要な権限が含まれています。必要とされる正確な権限については、「必要な権限」セクションを開いてご確認ください。

必要な権限

共有予約を作成するには、次の権限が必要です。

  • プロジェクトに対する compute.reservations.create
  • 組織のポリシーを表示するには: 組織に対する orgpolicy.policy.get
  • 組織のポリシーを編集するには: 組織に対する orgpolicy.policy.set
  • インスタンス テンプレートを指定するには: インスタンス テンプレートに対する compute.instanceTemplates.useReadOnly

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

ベスト プラクティス

共有予約を作成する場合は、次のベスト プラクティスが推奨されます。これらに従うことで、組織内の共有予約の管理と使用率を最適化できます。

  • オーナー プロジェクトに共有予約を作成させるが、使用はさせない。
    • プロジェクト間で費用を分散させるには、コンシューマー プロジェクトのみが共有予約を使用するようにすることをおすすめします。オーナー プロジェクトは、共有予約を作成する場合にのみ使用してください。
    • 共有予約を作成する際、オーナー プロジェクトには、予約する合計リソースに十分な割り当てが必要です。次に、予約の作成後に、オーナー プロジェクトは使用する予約済みリソースの割り当てを取得する必要があります。詳細については、共有予約の追加割り当て要件をご覧ください。
  • 共有予約の作成を許可する組織内のプロジェクトの数を最小限に抑える。これは、共有予約オーナー プロジェクト(compute.sharedReservationsOwnerProjects)組織のポリシー制約で制御できます。
    • 一覧表示できるのは、そのプロジェクトで作成された予約のみです。つまり、共有予約はオーナー プロジェクトにのみ表示されます。各プロジェクトで共有されている予約や、各組織のすべての共有予約を一覧表示することはできません。オーナー プロジェクトの数を少なくすることで、共有予約のモニタリングと管理が容易になります。
    • 共有予約の共有を少数のプロジェクトに限定し、予約済みのリソースの割り当ての管理を容易にする。
    • 詳細については、プロジェクトでの共有予約の作成と変更を許可または制限するをご覧ください。
  • 同一の VM プロパティを持つ共有予約の数を最小限に抑える。
    • 1 つの組織で、VM プロパティの一意の組み合わせごとに最大 100 個の共有予約を設定できます。そのため、同一の VM プロパティの共有予約の数を最小限に抑えると、上限の超過を防ぐことができます。
    • また、共有予約の数を減らすことで、管理も容易になります。
  • 同じ Cloud 請求先アカウントのプロジェクト間でのみ予約を共有する。
    • 各共有予約を、オーナー プロジェクトと同じ Cloud 請求先アカウントを持つコンシューマー プロジェクトとのみ共有するように制限します。これにより、予約が使用されたかどうかと、その請求方法を簡単に確認できます。
    • CUD 共有を有効にしていて、Cloud 請求先アカウント レベルで CUD を受け取ることができる場合は、使用した予約に対して受け取る CUD を最大化するために、そのコミットメントの Cloud 請求先アカウントに共有予約を制限します。これにより、共有予約を作成および使用するプロジェクト間で一貫した請求を維持できます。
  • 将来の予約リクエストでは、リクエストする VM の合計数を慎重に確認する。
    • 将来の予約リクエストを作成する場合は、次のすべてを考慮した VM の合計数をリクエストするようにしてください。
      • 将来の日付ですでに存在する、一致するすべての予約済み VM
      • 将来の日付ですでに存在する、一致するすべての未予約 VM
      • 将来の日付ですでに存在する、一致する未使用オンデマンド予約
      • 将来の日付で予約したい使用量の増加

      たとえば、将来の日付で 10 個の VM が必要で、将来の日付ですでに以下のリソースがあるとします。

      • 40 個の一致する予約済み VM
      • 50 の一致する未予約 VM

      または

      • 40 個の一致する予約済み VM
      • 50 の一致する未使用オンデマンド予約

      将来の日付ですでに存在する使用数では、一致する VM と予約が合計で 90 個まですでに追加され、さらに 10 個の VM が必要になるため、将来の予約リクエストで合計数として 100 を指定する必要があります。

      詳細については、予約済みリソースをカウントしてプロビジョニングするをご覧ください。

プロジェクトでの共有予約の作成と変更を許可または制限する

デフォルトでは、組織で共有予約を作成または変更することはできません。共有予約の作成と変更を行うには、プロジェクトを共有予約のオーナー プロジェクトcompute.sharedReservationsOwnerProjects)組織のポリシー制約に追加する必要があります。組織のポリシーの制約の詳細については、組織のポリシー サービスの概要をご覧ください。

共有予約オーナー プロジェクトcompute.sharedReservationsOwnerProjects)組織のポリシー制約を表示または編集するには、次の操作を行います。

共有予約の組織のポリシーの制約を表示する

共有予約の作成と変更が許可されているプロジェクトを表示するには、Google Cloud コンソールまたは gcloud CLI を使用します。

コンソール

共有予約オーナー プロジェクトの制約を使用して、組織のポリシーの表示手順を行います。

gcloud

compute.sharedReservationsOwnerProjects 制約で共有予約の作成と変更が許可されているプロジェクトを確認するには:

  1. gcloud resource-manager org-policies describe コマンドを使用して、組織のポリシーを policy.yaml という名前のファイルとしてダウンロードします。

    gcloud resource-manager org-policies describe compute.sharedReservationsOwnerProjects --organization=ORGANIZATION_ID > policy.yaml
    

    ORGANIZATION_ID組織の ID に置き換えます。

  2. テキスト エディタで policy.yaml ファイルを開き、compute.sharedReservationsOwnerProjects 制約を表示します。共有予約の作成と変更が許可されているプロジェクトは、allowedValues の下にあります。

    ...
    constraint: constraints/compute.sharedReservationsOwnerProjects
    listPolicy:
      allowedValues:
      - projects/PROJECT_NUMBER_1
      - projects/PROJECT_NUMBER_2
      - projects/PROJECT_NUMBER_3
    ...
    

    ここで、PROJECT_NUMBER_1PROJECT_NUMBER_2PROJECT_NUMBER_3 は、組織内で共有予約の作成を許可されているプロジェクトのプロジェクト番号です。

  3. (省略可)policy.yaml ファイルを削除します。

    • Linux ターミナルまたは macOS ターミナルを使用している場合は、次のコマンドを使用します。

      rm policy.yaml
      
    • Windows ターミナルを使用している場合は、次のコマンドを使用します。

      del policy.yaml
      

共有予約の組織のポリシーの制約を編集する

共有予約の作成と変更が許可されているプロジェクトを編集するには、Google Cloud コンソールまたは gcloud CLI を使用します。

コンソール

共有予約オーナー プロジェクトの制約を使用して、リスト型制約用のポリシーのカスタマイズの手順を行います。

gcloud

compute.sharedReservationsOwnerProjects 制約で共有予約の作成と変更を許可するプロジェクトを編集するには、次のいずれかの方法を使用します。

  • 共有予約を作成および変更する単一プロジェクトに権限を付与するには、gcloud resource-manager org-policies allow コマンドを使用します。この権限を付与するプロジェクトごとに、このコマンドを繰り返します。

    gcloud resource-manager org-policies allow compute.sharedReservationsOwnerProjects projects/PROJECT_NUMBER \
        --organization=ORGANIZATION_ID
    

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

    • PROJECT_NUMBER: 共有予約の作成と変更を許可する組織内のプロジェクトのプロジェクト番号(プロジェクト ID ではありません)。
    • ORGANIZATION_ID: 組織 ID
  • 共有予約を作成または変更するために、複数のプロジェクトの権限を付与または取り消すには、組織のポリシーの制約を変更します。

    1. 組織のポリシーを policy.yaml という名前のファイルとしてダウンロードするには、gcloud resource-manager org-policies describe コマンドを使用します。

      gcloud resource-manager org-policies describe compute.sharedReservationsOwnerProjects --organization=ORGANIZATION_ID > policy.yaml
      

      ORGANIZATION_ID組織の ID に置き換えます。

    2. compute.sharedReservationsOwnerProjects 制約で共有予約の作成と変更を許可するすべてのプロジェクトが allowedValues に表示されるように、テキスト エディタで policy.yaml ファイルを修正します。

      • 共有予約の作成と変更を許可するプロジェクトごとに、allowedValues の下の新しい行にプロジェクトを追加します。
      • 共有予約の作成と変更の許可を取り消すプロジェクトごとに、そのプロジェクトの行を削除します。

      完了すると、policy.yaml ファイルは次のようになります。

      ...
      constraint: constraints/compute.sharedReservationsOwnerProjects
      listPolicy:
        allowedValues:
        - projects/PROJECT_NUMBER_1
        - projects/PROJECT_NUMBER_2
        - projects/PROJECT_NUMBER_3
      ...
      

      PROJECT_NUMBER_1PROJECT_NUMBER_2PROJECT_NUMBER_3 は、組織内で共有予約の作成と変更を許可したすべてのプロジェクトのプロジェクト番号(プロジェクト ID ではない)です。

    3. policy.yaml ファイルを保存して、テキスト エディタを終了します。

    4. 組織のポリシーを変更して更新するには、gcloud resource-manager org-policies set-policy コマンドを使用します。

      gcloud resource-manager org-policies set-policy --organization=ORGANIZATION_ID policy.yaml
      

      ORGANIZATION_ID組織の ID に置き換えます。

    5. (省略可)policy.yaml ファイルを削除します。

      • Linux ターミナルまたは macOS ターミナルを使用している場合は、次のコマンドを使用します。

        rm policy.yaml
        
      • Windows ターミナルを使用している場合は、次のコマンドを使用します。

        del policy.yaml
        

編集が有効になるまで、数分待つ必要があります。

共有予約を作成する

このセクションでは、共有予約を作成する方法について説明します。共有予約を作成した後は、オーナー プロジェクトによってのみ変更できますが、共有予約のリソースは、オーナー プロジェクトまたはいずれのコンシューマー プロジェクトでも使用できます。

予約を使用するには、VM がその予約と完全に一致するプロパティが必要です。予約する VM のプロパティを指定するには、このドキュメントの次のいずれかのセクションを選択します。

  • 推奨: インスタンス テンプレートを指定する

    このセクションでは、インスタンス テンプレートを使用して共有予約のプロパティを定義する方法について説明します。インスタンス テンプレートを使用すると、予約のプロパティと、同じ場所で予約を使用できる VM を定義できます。ただし、テンプレートはプロジェクト固有であるため、同じテンプレートを使用して、予約を作成したプロジェクトの外部で予約を使用できる VM を作成することはできません。予約が共有されているプロジェクトでは、それらのプロジェクトに同じテンプレートを作成するか、プロパティを直接指定して VM を作成する必要があります。

  • 既存の VM を指定する

    このセクションでは、既存の VM を使用して予約のプロパティを定義する方法について説明します。既存の VM のプロパティを使用して、その参照用 VM と一致するプロパティを持つ VM を作成することで、予約を使用できます。

  • プロパティを直接指定する

    このセクションでは、共有予約のプロパティを直接定義する方法について説明します。この方法では、VM と予約のプロパティが正確に一致していることを手動で確認する必要があります。プロパティが一致しない場合は使用できません

デフォルトでは、一致するプロパティを持つすべての VM が予約を自動的に使用できます。予約の使用を制御する場合は、次のいずれかを行います。

インスタンス テンプレートを指定する

インスタンス テンプレートを指定して予約を作成する前に、次の点を確認してください。

  • インスタンス テンプレートにはプロジェクト固有の設定が含まれているため、アクセスして使用できるのは同じプロジェクト内のインスタンス テンプレートに限られます。インスタンス テンプレートを指定して共有予約を作成すると、同じテンプレートを使用して、予約を作成したプロジェクトの外部で予約を使用できる VM を作成することはできません。

  • インスタンス テンプレート内のリソースと同じリージョンとゾーンに予約を作成します。インスタンス テンプレートで指定されているリージョン リソースゾーンリソース(マシンタイプや Persistent Disk ボリュームなど)によって、テンプレートの使用はそれらのリソースが存在するロケーションに限定されます。たとえば、インスタンス テンプレートでゾーン us-central1-a の既存の Persistent Disk ボリュームを指定した場合、同じゾーンでのみ予約を作成できます。既存のテンプレートに、特定のリージョンまたはゾーンにテンプレートをバインドするリソースが指定されているかどうかを確認するには、インスタンス テンプレートについての情報を確認し、その中のリージョン リソースまたはゾーンリソースへの参照を探します。

インスタンス テンプレートを指定して共有予約を作成するには、次のいずれかのオプションを選択します。

コンソール

  1. Google Cloud コンソールの [予約] ページに移動します。

    [予約] に移動

    [予約] ページが表示されます。

  2. [予約を作成] をクリックします。

    [予約を作成] ページが表示されます。

  3. [名前] に、予約の名前を入力します。

  4. [リージョン] と [ゾーン] で、リソースを予約する場所を選択します。

  5. [共有タイプ] セクションで、次の操作を行います。

    1. 共有予約を指定するには、[共有] を選択します。

    2. [プロジェクトを追加] をクリックしてから、予約を共有する現在のプロジェクトの組織からプロジェクトを選択します。最大 100 個のコンシューマー プロジェクトを選択できます。

  6. 省略可: Vertex AI のカスタム トレーニング ジョブまたは予測ジョブで A2 VM または A3 VM の予約を使用できるようにするには、[Google Cloud サービス] セクションで [予約を共有] を選択します。

  7. [VM インスタンスでの使用] セクションで、次のオプションのいずれかを選択します。

    • 一致する VM インスタンスがこの予約を自動的に使用できるようにするには、[予約を自動的に使用する] を選択します(まだ選択されていない場合)。

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

  8. [VM インスタンスの数] に、予約する VM の数を入力します。

  9. [マシンの構成] セクションで、[インスタンス テンプレートを使用] を選択し、任意のインスタンス テンプレートを選択します。リージョン インスタンス テンプレートを指定する場合は、テンプレートのリージョンと同じリージョン内のリソースのみを予約できます。

  10. [自動削除] セクションで自動削除オプションを有効にして、Compute Engine が特定の日時に予約を自動的に削除するようにできます。予約を自動的に削除すると、予約の使用を停止したときに不要な料金が発生しないようにできます。

  11. 予約を作成するには、[作成] をクリックします。

    [予約] ページが開きます。共有予約の作成が完了するまでに、最大 1 分かかることがあります。

gcloud

共有予約を作成するには、--share-setting=projects フラグと --share-with フラグを指定して gcloud compute reservations create コマンドを使用します。

オプションのフラグを指定せずにインスタンス テンプレートを指定して共有予約を作成するには、次のコマンドを実行します。

gcloud compute reservations create RESERVATION_NAME \
    --share-setting=projects \
    --share-with=CONSUMER_PROJECT_IDS \
    --source-instance-template=projects/PROJECT_ID/LOCATION/instanceTemplates/INSTANCE_TEMPLATE_NAME \
    --vm-count=NUMBER_OF_VMS \
    --zone=ZONE

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

  • RESERVATION_NAME: 作成する予約の名前。

  • PROJECT_ID: リソースを予約する、インスタンス テンプレートが存在するプロジェクトの ID。

  • CONSUMER_PROJECT_IDS: この予約を使用できるプロジェクトの ID のカンマ区切りリスト(例: project-1,project-2)。最大 100 個のコンシューマー プロジェクトを含めることができます。これらのプロジェクトは、オーナー プロジェクトと同じ組織に存在する必要があります。オーナー プロジェクトを含めないでください。デフォルトでは、予約の使用があらかじめ許可されています。

  • LOCATION: インスタンス テンプレートのロケーション。次のいずれかの値を指定します。

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

    • リージョン インスタンス テンプレートの場合: regions/REGIONREGION は、インスタンス テンプレートが配置されているリージョンに置き換えます。リージョン インスタンス テンプレートを指定する場合は、テンプレートのリージョンと同じリージョン内の VM のみを予約できます。

  • INSTANCE_TEMPLATE_NAME: 既存のインスタンス テンプレートの名前。インスタンス テンプレートで A3 マシンタイプを指定する場合は、--require-specific-reservation フラグを含める必要があります。これは、この予約を対象とする VM のみがこの予約を使用できることを意味します。詳細については、特定の予約から VM を使用するをご覧ください。

  • NUMBER_OF_VMS: 予約する VM の数。

  • ZONE: リソースを予約するゾーン。

たとえば、ゾーン us-central1-a でグローバル インスタンス テンプレートを指定して予約を作成し、その予約をプロジェクト project-1 および project-2 と共有し、それぞれが 4 基の vCPU を備えた、事前定義された N2 マシンタイプを使用する 10 個の VM を予約するには、次のコマンドを実行します。

gcloud compute reservations create my-reservation \
    --share-setting=projects \
    --share-with=project-1,project-2 \
    --source-instance-template=projects/example-project/global/example-instance-template \
    --vm-count=10 \
    --zone=us-central1-a

必要に応じて、以下の 1 つ以上の操作を行うことができます。

  • この予約を対象とする VM のみがこの予約を使用できることを指定するには、--require-specific-reservation フラグを指定します。

    gcloud compute reservations create RESERVATION_NAME \
        --require-specific-reservation \
        --share-setting=projects \
        --share-with=CONSUMER_PROJECT_IDS \
        --source-instance-template=projects/PROJECT_ID/LOCATION/instanceTemplates/INSTANCE_TEMPLATE_NAME \
        --vm-count=NUMBER_OF_VMS \
        --zone=ZONE
    
  • Vertex AI のカスタム トレーニング ジョブまたは予測ジョブで A2 VM または A3 VM の予約を使用できるようにするには、--reservation-sharing-policy=ALLOW_ALL フラグを指定して gcloud beta compute reservations create コマンドを使用します。

    gcloud beta compute reservations create RESERVATION_NAME \
        --reservation-sharing-policy=ALLOW_ALL \
        --share-setting=projects \
        --share-with=CONSUMER_PROJECT_IDS \
        --source-instance-template=projects/PROJECT_ID/LOCATION/instanceTemplates/INSTANCE_TEMPLATE_NAME \
        --vm-count=NUMBER_OF_VMS \
        --zone=ZONE
    
  • Compute Engine で予約を自動的に削除できるようにするには、次のいずれかのメソッドを選択します。

    • 特定の日時に予約を削除するには、--delete-at-time フラグを指定して gcloud beta compute reservations create コマンドを使用します。

      gcloud beta compute reservations create RESERVATION_NAME \
          --delete-at-time=DELETE_AT_TIME \
          --share-setting=projects \
          --share-with=CONSUMER_PROJECT_IDS \
          --source-instance-template=projects/PROJECT_ID/LOCATION/instanceTemplates/INSTANCE_TEMPLATE_NAME \
          --vm-count=NUMBER_OF_VMS \
          --zone=ZONE
      

      DELETE_AT_TIME は、RFC 3339 タイムスタンプ形式の日時に置き換えます。これは次のようにする必要があります。

      YYYY-MM-DDTHH:MM:SSOFFSET
      

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

      • YYYY-MM-DD: 4 桁の年、2 桁の月、その月の 2 桁の日をハイフン(-)で区切った日付。

      • HH:MM:SS: 24 時間制の 2 桁の時間、2 桁の分、2 桁の秒をコロン(:)で区切った時刻。

      • OFFSET: 協定世界時(UTC)のオフセット形式で示されるタイムゾーン。たとえば、太平洋標準時(PST)を使用する場合は -08:00 を指定します。オフセットを使用しない場合は、Z を指定します。

    • 特定の期間の経過後に予約を削除するには、--delete-after-duration フラグを指定して gcloud beta compute reservations create コマンドを使用します。

      gcloud beta compute reservations create RESERVATION_NAME \
          --delete-after-duration=DELETE_AFTER_DURATION \
          --share-setting=projects \
          --share-with=CONSUMER_PROJECT_IDS \
          --source-instance-template=projects/PROJECT_ID/LOCATION/instanceTemplates/INSTANCE_TEMPLATE_NAME \
          --vm-count=NUMBER_OF_VMS \
          --zone=ZONE
      

      DELETE_AFTER_DURATION は、期間(日、時、分、秒)に置き換えます。たとえば、30 分の場合は 30m を指定し、1 日、2 時間、3 分、4 秒の場合は 1d2h3m4s を指定します。

REST

共有予約を作成するには、reservations.insert メソッドPOST リクエストを送信します。リクエスト本文に、次のものを含めます。

  • projectMap フィールド。

  • SPECIFIC_PROJECTS に設定されている shareType フィールド。

たとえば、オプション フィールドのないインスタンス テンプレートを指定して共有予約を作成し、その予約を 2 つのコンシューマー プロジェクトと共有するには、次の POST リクエストを行います。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/reservations

{
  "name": "RESERVATION_NAME",
  "shareSettings": {
    "shareType": "SPECIFIC_PROJECTS",
    "projectMap": {
      "CONSUMER_PROJECT_ID_1": {
        "projectId": "CONSUMER_PROJECT_ID_1"
      },
      "CONSUMER_PROJECT_ID_2": {
        "projectId": "CONSUMER_PROJECT_ID_2"
      }
    }
  },
  "specificReservation": {
    "count": "NUMBER_OF_VMS",
    "sourceInstanceTemplate": "projects/PROJECT_ID/LOCATION/instanceTemplates/INSTANCE_TEMPLATE_NAME"
  }
}

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

  • PROJECT_ID: リソースを予約する、インスタンス テンプレートが存在するプロジェクトの ID。

  • ZONE: リソースを予約するゾーン。

  • RESERVATION_NAME: 作成する予約の名前。

  • CONSUMER_PROJECT_ID_1CONSUMER_PROJECT_ID_2: この予約を使用できるプロジェクトの ID。最大 100 個のコンシューマー プロジェクトを含めることができます。これらのプロジェクトは、オーナー プロジェクトと同じ組織に存在する必要があります。オーナー プロジェクトを含めないでください。デフォルトでは、予約の使用がすでに許可されています。

  • NUMBER_OF_VMS: 予約する VM の数。

  • LOCATION: インスタンス テンプレートのロケーション。次のいずれかの値を指定します。

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

    • リージョン インスタンス テンプレートの場合: regions/REGIONREGION は、インスタンス テンプレートが配置されているリージョンに置き換えます。リージョン インスタンス テンプレートを指定する場合は、テンプレートのリージョンと同じリージョン内の VM のみを予約できます。

  • INSTANCE_TEMPLATE_NAME: 既存のインスタンス テンプレートの名前。インスタンス テンプレートで A3 マシンタイプを指定する場合は、リクエスト本文に specificReservationRequired フィールドを含めて、フィールドを true に設定する必要があります。これは、この予約を対象とする VM のみがこの予約を使用できることを意味します。詳細については、特定の予約から VM を使用するをご覧ください。

たとえば、グローバル インスタンス テンプレートを指定してゾーン us-central1-a に 10 個の VM の予約を作成し、その予約をプロジェクト project-1 および project-2 と共有するには、次の POST リクエストを行います。

POST https://compute.googleapis.com/compute/v1/projects/example-project/zones/us-central1-a/reservations

{
  "name": "my-reservation",
  "shareSettings": {
    "shareType": "SPECIFIC_PROJECTS",
    "projectMap": {
      "project-1": {
        "projectId": "project-1"
      },
      "project-2": {
        "projectId": "project-2"
      }
    }
  },
  "specificReservation": {
    "count": "10",
    "sourceInstanceTemplate": "projects/example-project/global/instanceTemplates/example-instance-template"
  }
}

必要に応じて、以下の 1 つ以上の操作を行うことができます。

  • この予約を対象とする VM のみがこの予約を使用できることを指定するには、リクエスト本文に specificReservationRequired フィールドを含め、このフィールドを true に設定します。

    たとえば、インスタンス テンプレートを指定して特定の予約を作成し、その予約を 2 つのコンシューマー プロジェクトと共有するには、次のようにリクエストを送信します。

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/reservations
    
    {
      "name": "RESERVATION_NAME",
      "shareSettings": {
        "shareType": "SPECIFIC_PROJECTS",
        "projectMap": {
          "CONSUMER_PROJECT_ID_1": {
            "projectId": "CONSUMER_PROJECT_ID_1"
          },
          "CONSUMER_PROJECT_ID_2": {
            "projectId": "CONSUMER_PROJECT_ID_2"
          }
        }
      },
      "specificReservation": {
        "count": "NUMBER_OF_VMS",
        "sourceInstanceTemplate": "projects/PROJECT_ID/LOCATION/instanceTemplates/INSTANCE_TEMPLATE_NAME"
      },
      "specificReservationRequired": true
    }
    
  • Vertex AI のカスタム トレーニング ジョブまたは予測ジョブで A2 VM または A3 VM の予約を使用できるようにするには、beta.reservations.insert メソッドPOST リクエストを送信します。リクエストの本文に serviceShareType フィールドを含め、ALLOW_ALL に設定します。

    POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/zones/ZONE/reservations
    
    {
      "name": "RESERVATION_NAME",
      "reservationSharingPolicy": {
        "serviceShareType": "ALLOW_ALL"
      },
      "shareSettings": {
        "shareType": "SPECIFIC_PROJECTS",
        "projectMap": {
          "CONSUMER_PROJECT_ID_1": {
            "projectId": "CONSUMER_PROJECT_ID_1"
          },
          "CONSUMER_PROJECT_ID_2": {
            "projectId": "CONSUMER_PROJECT_ID_2"
          }
        }
      },
      "specificReservation": {
        "count": "NUMBER_OF_VMS",
        "sourceInstanceTemplate": "projects/PROJECT_ID/LOCATION/instanceTemplates/INSTANCE_TEMPLATE_NAME"
      }
    }
    
  • Compute Engine で予約を自動的に削除できるようにするには、次のいずれかのメソッドを選択します。

    • 特定の日時の予約を削除するには、beta.reservations.insert メソッドPOST リクエストを送信します。リクエスト本文に、deleteAtTime フィールドを含めます。

      たとえば、インスタンス テンプレートを指定して、特定の日時に自動的に削除される予約を作成し、その予約を 2 つのコンシューマー プロジェクトと予約するには、次のようにリクエストを送信します。

      POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/zones/ZONE/reservations
      
      {
        "deleteAtTime": "DELETE_AT_TIME",
        "name": "RESERVATION_NAME",
        "shareSettings": {
          "shareType": "SPECIFIC_PROJECTS",
          "projectMap": {
            "CONSUMER_PROJECT_ID_1": {
              "projectId": "CONSUMER_PROJECT_ID_1"
            },
            "CONSUMER_PROJECT_ID_2": {
              "projectId": "CONSUMER_PROJECT_ID_2"
            }
          }
        },
        "specificReservation": {
          "count": "NUMBER_OF_VMS",
          "sourceInstanceTemplate": "projects/PROJECT_ID/LOCATION/instanceTemplates/INSTANCE_TEMPLATE_NAME"
        }
      }
      

      DELETE_AT_TIME は、RFC 3339 タイムスタンプ形式の日時に置き換えます。これは次のようにする必要があります。

      YYYY-MM-DDTHH:MM:SSOFFSET
      

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

      • YYYY-MM-DD: 4 桁の年、2 桁の月、その月の 2 桁の日をハイフン(-)で区切った日付。

      • HH:MM:SS: 24 時間制の 2 桁の時間、2 桁の分、2 桁の秒をコロン(:)で区切った時刻。

      • OFFSET: 協定世界時(UTC)のオフセット形式で示されるタイムゾーン。たとえば、太平洋標準時(PST)を使用する場合は -08:00 を指定します。オフセットを使用しない場合は、Z を指定します。

    • 特定の期間の経過後に予約を削除するには、beta.reservations.insert メソッドPOST リクエストを送信します。リクエスト本文に、deleteAfterDuration フィールドを含めます。

      たとえば、インスタンス テンプレートを指定して、特定の期間後に自動的に削除される予約を作成し、その予約を 2 つのコンシューマー プロジェクトと共有するには、次のようにリクエストを送信します。

      POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/zones/ZONE/reservations
      
      {
        "deleteAfterDuration": {
          "seconds": "DELETE_AFTER_DURATION"
        },
        "name": "RESERVATION_NAME",
        "shareSettings": {
          "shareType": "SPECIFIC_PROJECTS",
          "projectMap": {
            "CONSUMER_PROJECT_ID_1": {
              "projectId": "CONSUMER_PROJECT_ID_1"
            },
            "CONSUMER_PROJECT_ID_2": {
              "projectId": "CONSUMER_PROJECT_ID_2"
            }
          }
        },
        "specificReservation": {
          "count": "NUMBER_OF_VMS",
          "sourceInstanceTemplate": "projects/PROJECT_ID/LOCATION/instanceTemplates/INSTANCE_TEMPLATE_NAME"
        }
      }
      

      DELETE_AFTER_DURATION は期間(秒単位)に置き換えます。たとえば、86,400 秒(1 日)の場合は 86400 を指定します。

既存の VM を指定する

共有予約は、VM と同じプロジェクトとゾーンにある既存の VM に基づいてのみ作成できます。

予約を作成したら、参照用 VM と一致するプロパティを持つ VM を作成するとその予約を使用できます。このためには、次のいずれかを行います。

  • 次のようにインスタンス テンプレートを作成して使用します。

    1. 参照用 VM のプロパティをオーバーライドせずに、参照用 VM に基づいてインスタンス テンプレートを作成します。

    2. 次のいずれかまたは両方を行うと、新しく作成されたテンプレートを使用して VM を作成できます。

  • 次のように、参照用 VM と完全に一致するプロパティを持つ VM を作成します。

    • オーナー プロジェクトで、作成する VM のプロパティを変更せずに、参照用 VM に基づいて VM を作成します。

    • コンシューマー プロジェクトで VM を作成し、そのプロパティと参照用 VM のプロパティが一致するように手動で確認します。

既存の VM のプロパティを使用する共有予約を作成するには、次の操作を行います。

  1. Google Cloud コンソールの [予約] ページに移動します。

    [予約] に移動

  2. [オンデマンド予約] タブ(デフォルト)で、[ 予約を作成] をクリックします。

    [予約の作成] ページが開きます。

  3. [名前] に、予約の名前を入力します。

  4. [リージョン] と [ゾーン] で、リソースを予約する場所を選択します。

  5. [共有タイプ] セクションで、次の操作を行います。

    1. 共有予約を指定するには、[共有] を選択します。

    2. [プロジェクトを追加] をクリックしてから、予約を共有する現在のプロジェクトの組織からプロジェクトを選択します。最大 100 個のコンシューマー プロジェクトを選択できます。

  6. [VM インスタンスでの使用] セクションで、次のオプションのいずれかを選択します。

    • 一致する VM がこの予約を自動的に使用できるようにするには、[予約を自動的に使用する] を選択します(まだ選択されていない場合)。

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

  7. [VM インスタンスの数] に、予約する VM の数を入力します。

  8. [マシンの構成] セクションで、次の操作を行います。

    1. [既存の VM を使用] を選択します。

    2. [既存の VM] で、予約の作成に使用するプロパティを持つ VM を選択します。

  9. [自動削除] セクションで自動削除オプションを有効にして、Compute Engine が特定の日時に予約を自動的に削除するようにできます。予約を自動的に削除すると、予約の使用を停止したときに不要な料金が発生しないようにできます。

  10. 予約を作成するには、[作成] をクリックします。

    [予約] ページが開きます。予約の作成が完了するまでに、最大 1 分かかることがあります。

プロパティを直接指定する

プロパティを直接指定して共有予約を作成するには、次のいずれかのオプションを選択します。

コンソール

  1. Google Cloud コンソールの [予約] ページに移動します。

    [予約] に移動

  2. [オンデマンド予約] タブ(デフォルト)で、[ 予約を作成] をクリックします。

  3. [予約を作成] をクリックします。

    [予約を作成] ページが表示されます。

  4. [名前] に、予約の名前を入力します。

  5. [リージョン] と [ゾーン] で、リソースを予約する場所を選択します。

  6. [共有タイプ] セクションで、次の操作を行います。

    1. 共有予約を指定するには、[共有] を選択します。

    2. [プロジェクトを追加] をクリックしてから、予約を共有する現在のプロジェクトの組織からプロジェクトを選択します。最大 100 個のコンシューマー プロジェクトを選択できます。

  7. 省略可: Vertex AI のカスタム トレーニング ジョブまたは予測ジョブで A2 VM または A3 VM の予約を使用できるようにするには、[Google Cloud サービス] セクションで [予約を共有] を選択します。

  8. [VM インスタンスでの使用] セクションで、次のオプションのいずれかを選択します。

    • 一致する VM がこの予約を自動的に使用できるようにするには、[予約を自動的に使用する] を選択します(デフォルト)。

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

  9. [VM インスタンスの数] に、予約する VM の数を入力します。

  10. [マシンの構成] セクションで、[マシンタイプを指定] を選択し、次の項目を指定します。

    1. [マシン ファミリー]、[シリーズ]、[マシンタイプ] で、マシン ファミリー、シリーズ、マシンタイプを選択します。

    2. 省略可: 最小 CPU プラットフォームを指定するか、GPU を N1 VM にアタッチするには、次の操作を行います。

      1. [CPU プラットフォームと GPU] セクションを展開するには、 展開矢印をクリックします。

      2. 省略可: 最小 CPU プラットフォームを指定するには、[CPU プラットフォーム] でオプションを選択します。

      3. 省略可: N1 VM に GPU をアタッチするには、[GPU を追加] をクリックします。次に、[GPU タイプ] と [GPU の数] で、各 N1 VM にアタッチする GPU のタイプと数を選択します。

    3. 省略可: ローカル SSD ディスクを追加するには、次の操作を行います。

      1. [ディスク数] で、各 VM のローカル SSD ディスクの数を選択します。

      2. [インターフェース タイプ] で、ローカル SSD ディスクのインターフェースを選択します。

  11. [自動削除] セクションで自動削除オプションを有効にして、Compute Engine が特定の日時に予約を自動的に削除するようにできます。予約を自動的に削除すると、予約の使用を停止したときに不要な料金が発生しないようにできます。

  12. 予約を作成するには、[作成] をクリックします。

    [予約] ページが開きます。共有予約の作成が完了するまでに、最大 1 分かかることがあります。

gcloud

共有予約を作成するには、--share-setting=projects フラグと --share-with フラグを指定して gcloud compute reservations create コマンドを使用します。

オプションのフラグを使用せずにプロパティを直接指定して、共有予約を作成するには、次のコマンドを実行します。

gcloud compute reservations create RESERVATION_NAME \
    --machine-type=MACHINE_TYPE \
    --share-setting=projects \
    --share-with=CONSUMER_PROJECT_IDS \
    --vm-count=NUMBER_OF_VMS \
    --zone=ZONE

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

  • RESERVATION_NAME: 作成する予約の名前。

  • MACHINE_TYPE: 各 VM に使用するマシンタイプ。A3 マシンタイプを指定する場合は、--require-specific-reservation フラグを含める必要があります。これは、この予約を対象とする VM のみがこの予約を使用できることを意味します。詳細については、特定の予約から VM を使用するをご覧ください。

  • CONSUMER_PROJECT_IDS: この予約を使用できるプロジェクトの ID のカンマ区切りリスト(例: project-1,project-2)。最大 100 個のコンシューマー プロジェクトを含めることができます。これらのプロジェクトは、オーナー プロジェクトと同じ組織に存在する必要があります。オーナー プロジェクトを含めないでください。デフォルトでは、予約の使用がすでに許可されています。

  • NUMBER_OF_VMS: 予約する VM の数。

  • ZONE: リソースを予約するゾーン。

たとえば、ゾーン us-central1-a で 10 台の VM の予約を作成し(各 VM は、4 つの vCPU を備えた事前定義されたマシンタイプ N2 を使用)、その予約をプロジェクト project-1project-2 と共有するには、次のコマンドを実行します。

gcloud compute reservations create my-reservation \
    --machine-type=n2-standard-4 \
    --share-setting=projects \
    --share-with=project-1,project-2 \
    --vm-count=10 \
    --zone=us-central1-a

必要に応じて、以下の 1 つ以上の操作を行うことができます。

  • 予約済みの N1 VM に GPU を接続するには、--accelerator フラグを指定します。

    gcloud compute reservations create RESERVATION_NAME \
        --accelerator=count=NUMBER_OF_ACCELERATORS,type=ACCELERATOR_TYPE
        --machine-type=MACHINE_TYPE \
        --share-setting=projects \
        --share-with=CONSUMER_PROJECT_IDS \
        --vm-count=NUMBER_OF_VMS \
        --zone=ZONE
    

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

  • 予約する各 VM に 1 つ以上のローカル SSD ディスクを追加するには、1 つ以上の --local-ssd フラグを指定します。ローカル SSD ディスクは 24 個まで指定できます。各ローカル SSD ディスクは 375 GB です。

    たとえば、共有予約の作成時に 2 つのローカル SSD を指定するには、次のように 2 つの --local-ssd フラグを指定します。

    gcloud compute reservations create RESERVATION_NAME \
        --local-ssd=size=375,interface=INTERFACE_1 \
        --local-ssd=size=375,interface=INTERFACE_2 \
        --machine-type=MACHINE_TYPE \
        --share-setting=projects \
        --share-with=CONSUMER_PROJECT_IDS \
        --vm-count=NUMBER_OF_VMS \
        --zone=ZONE
    

    INTERFACE_1INTERFACE_2 は、各ローカル SSD ディスクで使用するインターフェースのタイプに置き換えます。次のいずれかの値を指定します。

    • NVME ディスク インターフェース: nvme

    • SCSI ディスク インターフェース: scsi

    予約済み VM に指定したマシンタイプが、選択したディスク インターフェースをサポートしていることを確認します。この条件を満たしていない場合、予約の作成は失敗します。詳細については、ディスク インターフェースの選択方法をご覧ください。

  • 予約する VM でゾーンのデフォルトの CPU プラットフォームではなく、特定の最小 CPU プラットフォームを使用するには、--min-cpu-platform フラグを指定します。

    gcloud compute reservations create RESERVATION_NAME \
        --machine-type=MACHINE_TYPE \
        --min-cpu-platform="MIN_CPU_PLATFORM" \
        --share-setting=projects \
        --share-with=CONSUMER_PROJECT_IDS \
        --vm-count=NUMBER_OF_VMS \
        --zone=ZONE
    

    MIN_CPU_PLATFORM は、最小 CPU プラットフォームに置き換えます。リソースを予約するゾーンで CPU プラットフォームが使用可能であることを確認するには、ゾーンごとに使用可能な CPU プラットフォームを表示します。

  • この予約を対象とする VM のみがこの予約を使用できることを指定するには、--require-specific-reservation フラグを指定します。

    gcloud compute reservations create RESERVATION_NAME \
        --machine-type=MACHINE_TYPE \
        --require-specific-reservation \
        --share-setting=projects \
        --share-with=CONSUMER_PROJECT_IDS \
        --vm-count=NUMBER_OF_VMS \
        --zone=ZONE
    
  • Vertex AI のカスタム トレーニング ジョブまたは予測ジョブで A2 VM または A3 VM の予約を使用できるようにするには、--reservation-sharing-policy=ALLOW_ALL フラグを指定して gcloud beta compute reservations create コマンドを使用します。

    gcloud beta compute reservations create RESERVATION_NAME \
        --machine-type=MACHINE_TYPE \
        --reservation-sharing-policy=ALLOW_ALL \
        --share-setting=projects \
        --share-with=CONSUMER_PROJECT_IDS \
        --vm-count=NUMBER_OF_VMS \
        --zone=ZONE
    
  • Compute Engine で予約を自動的に削除できるようにするには、次のいずれかのメソッドを選択します。

    • 特定の日時に予約を削除するには、--delete-at-time フラグを指定して gcloud beta compute reservations create コマンドを使用します。

      gcloud beta compute reservations create RESERVATION_NAME \
          --delete-at-time=DELETE_AT_TIME \
          --machine-type=MACHINE_TYPE \
          --share-setting=projects \
          --share-with=CONSUMER_PROJECT_IDS \
          --vm-count=NUMBER_OF_VMS \
          --zone=ZONE
      

      DELETE_AT_TIME は、RFC 3339 タイムスタンプ形式の日時に置き換えます。これは次のようにする必要があります。

      YYYY-MM-DDTHH:MM:SSOFFSET
      

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

      • YYYY-MM-DD: 4 桁の年、2 桁の月、その月の 2 桁の日をハイフン(-)で区切った日付。

      • HH:MM:SS: 24 時間制の 2 桁の時間、2 桁の分、2 桁の秒をコロン(:)で区切った時刻。

      • OFFSET: 協定世界時(UTC)のオフセット形式で示されるタイムゾーン。たとえば、太平洋標準時(PST)を使用する場合は -08:00 を指定します。オフセットを使用しない場合は、Z を指定します。

    • 特定の期間の経過後に予約を削除するには、--delete-after-duration フラグを指定して gcloud beta compute reservations create コマンドを使用します。

      gcloud beta compute reservations create RESERVATION_NAME \
          --delete-after-duration=DELETE_AFTER_DURATION \
          --machine-type=MACHINE_TYPE \
          --share-setting=projects \
          --share-with=CONSUMER_PROJECT_IDS \
          --vm-count=NUMBER_OF_VMS \
          --zone=ZONE
      

      DELETE_AFTER_DURATION は、期間(日、時、分、秒)に置き換えます。たとえば、30 分の場合は 30m を指定し、1 日、2 時間、3 分、4 秒の場合は 1d2h3m4s を指定します。

Terraform

予約を作成するには、google_compute_reservation Terraform リソースを使用します。共有予約を指定するには、share_settings ブロックを定義します。

  • share_type フィールドを SPECIFIC_PROJECTS に設定します。
  • project_map ブロックで、この予約を共有するプロジェクトのプロジェクト ID を指定します。

Terraform の使用方法の詳細については、Google Cloud で Terraform を使用するをご覧ください。

REST

共有予約を作成するには、reservations.insert メソッドPOST リクエストを送信します。リクエスト本文に、次のものを含めます。

  • projectMap フィールド。

  • SPECIFIC_PROJECTS に設定されている shareType フィールド。

たとえば、オプション フィールドなしで共有予約を作成し、その予約を 2 つのコンシューマー プロジェクトと共有するには、次の POST リクエストを行います。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/reservations

{
  "name": "RESERVATION_NAME",
  "shareSettings": {
    "shareType": "SPECIFIC_PROJECTS",
    "projectMap": {
      "CONSUMER_PROJECT_ID_1": {
        "projectId": "CONSUMER_PROJECT_ID_1"
      },
      "CONSUMER_PROJECT_ID_2": {
        "projectId": "CONSUMER_PROJECT_ID_2"
      }
    }
  },
  "specificReservation": {
    "count": "NUMBER_OF_VMS",
    "instanceProperties": {
      "machineType": "MACHINE_TYPE"
    }
  }
}

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

  • PROJECT_ID: リソースを予約するプロジェクトの ID。

  • ZONE: リソースを予約するゾーン。

  • RESERVATION_NAME: 作成する予約の名前。

  • CONSUMER_PROJECT_ID_1CONSUMER_PROJECT_ID_2: この予約を使用できるプロジェクトの ID。最大 100 個のコンシューマー プロジェクトを含めることができます。これらのプロジェクトは、オーナー プロジェクトと同じ組織に存在する必要があります。オーナー プロジェクトを含めないでください。デフォルトでは、予約の使用がすでに許可されています。

  • NUMBER_OF_VMS: 予約する VM の数。

  • MACHINE_TYPE: 各 VM に使用するマシンタイプ。A3 マシンタイプを指定する場合は、リクエスト本文に specificReservationRequired フィールドを含め、フィールドを true に設定する必要があります。これは、この予約を対象とする VM のみがこの予約を使用できることを意味します。

たとえば、ゾーン us-central1-a でグローバル インスタンス テンプレートを指定して予約を作成します。その予約をプロジェクト project-1 および project-2 と共有し、それぞれが 4 基の vCPU を備えた、事前定義された N2 マシンタイプを使用する 10 台の VM を予約するには、次の POST リクエストを行います。

POST https://compute.googleapis.com/compute/v1/projects/example-project/zones/us-central1-a/reservations

{
  "name": "my-reservation",
  "shareSettings": {
    "shareType": "SPECIFIC_PROJECTS",
    "projectMap": {
      "project-1": {
        "projectId": "project-1"
      },
      "project-2": {
        "projectId": "project-2"
      }
    }
  },
  "specificReservation": {
    "count": "10",
    "instanceProperties": {
      "machineType": "n2-standard-4",
    }
  }
}

必要に応じて、以下の 1 つ以上の操作を行うことができます。

  • 予約済みの N1 VM に GPU を接続するには、リクエスト本文に guestAccelerators フィールドを含めます。

    たとえば、2 つのコンシューマー プロジェクトと共有する予約を作成し、予約済みの N1 VM に GPU を割り当てるには、次のようにリクエストを送信します。

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/reservations
    
    {
      "name": "RESERVATION_NAME",
      "shareSettings": {
        "shareType": "SPECIFIC_PROJECTS",
        "projectMap": {
          "CONSUMER_PROJECT_ID_1": {
            "projectId": "CONSUMER_PROJECT_ID_1"
          },
          "CONSUMER_PROJECT_ID_2": {
            "projectId": "CONSUMER_PROJECT_ID_2"
          }
        }
      },
      "specificReservation": {
        "count": "NUMBER_OF_VMS",
        "instanceProperties": {
          "guestAccelerators": [
            {
              "acceleratorCount": NUMBER_OF_ACCELERATORS,
              "acceleratorType": "ACCELERATOR_TYPE"
            }
          ],
          "machineType": "MACHINE_TYPE"
        }
      }
    }
    

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

  • 予約する各 VM に 1 つ以上のローカル SSD ディスクを追加するには、リクエスト本文に localSsds フィールドを含めます。ローカル SSD ディスクは 24 個まで指定できます。各ローカル SSD ディスクは 375 GB です。

    たとえば、2 つのローカル SSD ディスクと 2 つのコンシューマー プロジェクトを指定して共有予約を作成するには、次のようにリクエストを送信します。

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/reservations
    
    {
      "name": "RESERVATION_NAME",
      "shareSettings": {
        "shareType": "SPECIFIC_PROJECTS",
        "projectMap": {
          "CONSUMER_PROJECT_ID_1": {
            "projectId": "CONSUMER_PROJECT_ID_1"
          },
          "CONSUMER_PROJECT_ID_2": {
            "projectId": "CONSUMER_PROJECT_ID_2"
          }
        }
      },
      "specificReservation": {
        "count": "NUMBER_OF_VMS",
        "instanceProperties": {
          "localSsds": [
            {
              "diskSizeGb": "375",
              "interface": "INTERFACE_1"
            },
            {
              "diskSizeGb": "375",
              "interface": "INTERFACE_2"
            }
          ],
          "machineType": "MACHINE_TYPE"
        }
      }
    }
    

    INTERFACE_1INTERFACE_2 は、各ローカル SSD ディスクで使用するインターフェースのタイプに置き換えます。次のいずれかの値を指定します。

    • NVME ディスク インターフェース: NVME

    • SCSI ディスク インターフェース: SCSI

    予約済み VM に指定したマシンタイプが、選択したディスク インターフェースをサポートしていることを確認します。この条件を満たしていない場合、予約の作成は失敗します。詳細については、ディスク インターフェースの選択方法をご覧ください。

  • 予約する VM でゾーンのデフォルトの CPU プラットフォームではなく、特定の最小 CPU プラットフォームを使用するには、リクエスト本文に minCpuPlatform フィールドを含めます。

    たとえば、最小 CPU プラットフォームと 2 つのコンシューマー プロジェクトを指定して共有予約を作成するには、次のようにリクエストを送信します。

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/reservations
    
    {
      "name": "RESERVATION_NAME",
      "shareSettings": {
        "shareType": "SPECIFIC_PROJECTS",
        "projectMap": {
          "CONSUMER_PROJECT_ID_1": {
            "projectId": "CONSUMER_PROJECT_ID_1"
          },
          "CONSUMER_PROJECT_ID_2": {
            "projectId": "CONSUMER_PROJECT_ID_2"
          }
        }
      },
      "specificReservation": {
        "count": "NUMBER_OF_VMS",
        "instanceProperties": {
          "machineType": "MACHINE_TYPE",
          "minCpuPlatform": "MIN_CPU_PLATFORM"
        }
      }
    }
    

    MIN_CPU_PLATFORM は、最小 CPU プラットフォームに置き換えます。リソースを予約するゾーンで CPU プラットフォームが使用可能であることを確認するには、ゾーンごとに使用可能な CPU プラットフォームを表示します。

  • この予約を対象とする VM のみがこの予約を使用できることを指定するには、リクエスト本文に specificReservationRequired フィールドを含め、このフィールドを true に設定します。

    たとえば、特定の予約を作成し、2 つのコンシューマー プロジェクトと共有するには、次のようにリクエストを送信します。

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/reservations
    
    {
      "name": "RESERVATION_NAME",
      "shareSettings": {
        "shareType": "SPECIFIC_PROJECTS",
        "projectMap": {
          "CONSUMER_PROJECT_ID_1": {
            "projectId": "CONSUMER_PROJECT_ID_1"
          },
          "CONSUMER_PROJECT_ID_2": {
            "projectId": "CONSUMER_PROJECT_ID_2"
          }
        }
      },
      "specificReservation": {
        "count": "NUMBER_OF_VMS",
        "instanceProperties": {
          "machineType": "MACHINE_TYPE"
        }
      },
      "specificReservationRequired": true
    }
    
  • Vertex AI のカスタム トレーニング ジョブまたは予測ジョブで A2 VM または A3 VM の予約を使用できるようにするには、beta.reservations.insert メソッドPOST リクエストを送信します。リクエストの本文に serviceShareType フィールドを含め、ALLOW_ALL に設定します。

    POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/zones/ZONE/reservations
    
    {
      "name": "RESERVATION_NAME",
      "reservationSharingPolicy": {
        "serviceShareType": "ALLOW_ALL"
      },
      "shareSettings": {
        "shareType": "SPECIFIC_PROJECTS",
        "projectMap": {
          "CONSUMER_PROJECT_ID_1": {
            "projectId": "CONSUMER_PROJECT_ID_1"
          },
          "CONSUMER_PROJECT_ID_2": {
            "projectId": "CONSUMER_PROJECT_ID_2"
          }
        }
      },
      "specificReservation": {
        "count": "NUMBER_OF_VMS",
        "instanceProperties": {
          "machineType": "MACHINE_TYPE"
        }
      }
    }
    
  • Compute Engine で予約を自動的に削除できるようにするには、次のいずれかのメソッドを選択します。

    • 特定の日時の予約を削除するには、beta.reservations.insert メソッドPOST リクエストを送信します。リクエスト本文に、deleteAtTime フィールドを含めます。

      たとえば、予約の削除日時を指定して予約を作成し、その予約を 2 つのコンシューマー プロジェクトと共有するには、次のようにリクエストを送信します。

      POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/zones/ZONE/reservations
      
      {
        "deleteAtTime": "DELETE_AT_TIME",
        "name": "RESERVATION_NAME",
        "shareSettings": {
          "shareType": "SPECIFIC_PROJECTS",
          "projectMap": {
            "CONSUMER_PROJECT_ID_1": {
              "projectId": "CONSUMER_PROJECT_ID_1"
            },
            "CONSUMER_PROJECT_ID_2": {
              "projectId": "CONSUMER_PROJECT_ID_2"
            }
          }
        },
        "specificReservation": {
          "count": "NUMBER_OF_VMS",
          "instanceProperties": {
            "machineType": "MACHINE_TYPE"
          }
        }
      }
      

      DELETE_AT_TIME は、RFC 3339 タイムスタンプ形式の日時に置き換えます。これは次のようにする必要があります。

      YYYY-MM-DDTHH:MM:SSOFFSET
      

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

      • YYYY-MM-DD: 4 桁の年、2 桁の月、その月の 2 桁の日をハイフン(-)で区切った日付。

      • HH:MM:SS: 24 時間制の 2 桁の時間、2 桁の分、2 桁の秒をコロン(:)で区切った時刻。

      • OFFSET: 協定世界時(UTC)のオフセット形式で示されるタイムゾーン。たとえば、太平洋標準時(PST)を使用する場合は -08:00 を指定します。オフセットを使用しない場合は、Z を指定します。

    • 特定の期間の経過後に予約を削除するには、beta.reservations.insert メソッドPOST リクエストを送信します。リクエスト本文に、deleteAfterDuration フィールドを含めます。

      たとえば、Compute Engine が特定の期間後に削除する予約を作成し、その予約を 2 つのコンシューマー プロジェクトと共有するには、次のようにリクエストを送信します。

      POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/zones/ZONE/reservations
      
      {
        "deleteAfterDuration": {
          "seconds": "DELETE_AFTER_DURATION"
        },
        "name": "RESERVATION_NAME",
        "shareSettings": {
          "shareType": "SPECIFIC_PROJECTS",
          "projectMap": {
            "CONSUMER_PROJECT_ID_1": {
              "projectId": "CONSUMER_PROJECT_ID_1"
            },
            "CONSUMER_PROJECT_ID_2": {
              "projectId": "CONSUMER_PROJECT_ID_2"
            }
          }
        },
        "specificReservation": {
          "count": "NUMBER_OF_VMS",
          "instanceProperties": {
            "machineType": "MACHINE_TYPE"
          }
        }
      }
      

      DELETE_AFTER_DURATION は期間(秒単位)に置き換えます。たとえば、86,400 秒(1 日)の場合は 86400 を指定します。

トラブルシューティング

予約の作成に関するトラブルシューティング方法を確認してください。

次のステップ