共有予約を作成する


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

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

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

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

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

準備

  • このガイドのコマンドラインの例を使用する場合は、次の操作を行います。
    1. Google Cloud CLI の最新バージョンをインストールするか、最新バージョンに更新します。
    2. デフォルトのリージョンとゾーンを設定します。
  • このガイドの API の例を使用する場合は、API アクセスを設定します。
  • 予約に関する要件制限事項を確認します。
  • 共有予約に関する要件制限事項を確認します。
  • 共有予約の作成に使用するプロジェクトが、組織のポリシーの管理者によって、共有予約オーナー プロジェクトcompute.sharedReservationsOwnerProjects)組織ポリシー制約の許可リストに追加されていることを確認します。この許可リストは、デフォルトでは空であるため、組織で 1 つ以上のプロジェクトに対するこの権限が付与されるまで共有予約を作成することはできません。組織のポリシーの制約の表示と編集の詳細については、このドキュメントのプロジェクトに対して共有予約の作成と変更を許可または制限するをご覧ください。

必要なロール

共有予約の作成に必要な権限を取得するには、プロジェクトに対する Compute 管理者roles/compute.admin)のIAM ロールを付与するよう管理者に依頼してください。ロールの付与の詳細については、アクセス権の管理をご覧ください。

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

必要な権限

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

  • プロジェクトに対する compute.reservations.create
  • インスタンス テンプレートを指定するには: インスタンス テンプレートに対する compute.instanceTemplates.useReadOnly

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

おすすめの方法

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

  • オーナー プロジェクトに共有予約を作成させるが、使用はさせない

    • プロジェクト間で費用を分散させるには、コンシューマ プロジェクトのみが共有予約を使用するようにすることをおすすめします。オーナー プロジェクトは、共有予約の作成にのみ使用してください。
    • オーナー プロジェクトには、予約するリソースの 2 倍の十分な割り当てが必要です。詳細については、共有予約の追加要件をご覧ください。
  • 共有予約の作成を許可する組織内のプロジェクトの数を最小限に抑える。これは、共有予約オーナー プロジェクト(compute.sharedReservationsOwnerProjects)組織のポリシー制約で制御できます。

    • 一覧表示できるのは、そのプロジェクトで作成された予約のみです。つまり、共有予約はオーナー プロジェクトにのみ表示されます。各プロジェクトで共有されている予約や、各組織のすべての共有予約を一覧表示することはできません。オーナー プロジェクトの数を少なくすることで、共有予約のモニタリングと管理が容易になります。
    • 共有予約の共有を少数のプロジェクトに限定し、予約済みのリソースの割り当ての管理を容易にする。
    • 詳しくは、プロジェクトに対して共有予約の作成と変更を許可または制限するをご覧ください。
  • 同一の VM プロパティを持つ共有予約の数を最小限に抑える。

    • 1 つの組織で、VM プロパティの一意の組み合わせごとに最大 100 個の共有予約を設定できます。そのため、同一の VM プロパティの共有予約の数を最小限に抑えると、上限の超過を防ぐことができます。
    • また、共有予約の数を減らすことで、管理も容易になります。
  • 同じ請求先アカウントのプロジェクト間でのみ予約を共有する。

    • 各共有予約を、オーナー プロジェクトと同じ請求先アカウントを持つ一般ユーザー向けプロジェクトとのみ共有するように制限します。 これにより、予約が使用されたかどうか、およびどのように課金されたかを簡単に確認できます。
    • ある請求先アカウントに確約利用割引を設定している場合、共有予約をその請求先アカウントに限定すると、共有予約を作成または使用するプロジェクト間で一貫した請求を維持できます。
  • 今後の予約リクエストについては、リクエストする VM の合計数を慎重に確認してください。

    • 将来の予約リクエストを作成する場合は、次のすべてを考慮する VM の合計数をリクエストするようにしてください。

      • 将来の日付ですでに存在する、一致するすべての予約済み VM
      • 将来の日付ですでに存在する、一致するすべての未予約 VM
      • 将来の日付ですでに存在する、一致する未使用オンデマンド予約
      • 将来の日付で予約したい使用量の増加

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

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

      または

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

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

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

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

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

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

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

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

Console

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

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 Console または gcloud CLI を使用します。

Console

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

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 が予約を自動的に使用できます。予約の使用を制御するには、次のうち 1 つ以上を行います。

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

インスタンス テンプレートを指定して共有予約を作成するには、Google Cloud コンソール、gcloud CLI、または Compute Engine API を使用します。

コンソール

インスタンス テンプレートから共有予約を作成するには、次の操作を行います。

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

    [予約] に移動

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

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

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

  3. [名前] フィールドに、予約の名前を入力します。

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

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

    1. 共有予約を指定するには、[共有] をクリックします。

    2. [プロジェクトを追加] をクリックし、予約を共有する現在のプロジェクトの組織からプロジェクトを選択します。

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

    • 条件を満たす VM インスタンスでこの予約が自動的に使用されるようにするには、[予約を自動的に使用する](デフォルト)をクリックします。

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

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

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

    1. 既存のインスタンス テンプレートから VM のプロパティを指定するには、[インスタンス テンプレートを使用する] を選択します。

    2. [インスタンス テンプレート] フィールドで、任意のインスタンス テンプレートを選択します。

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

    共有予約の作成には時間がかかる場合があります。この操作により、[予約] ページにリダイレクトされます。

gcloud

インスタンス テンプレートから共有予約を作成するには、--share-setting=projects--share-with--source-instance-template フラグを指定して gcloud compute reservations create コマンドを使用します。

gcloud compute reservations create RESERVATION_NAME \
    --project=OWNER_PROJECT_ID \
    --share-setting=projects \
    --share-with=CONSUMER_PROJECT_IDS \
    --source-instance-template=INSTANCE_TEMPLATE_NAME \
    --vm-count=NUMBER_OF_VMS \
    --zone=ZONE

以下を置き換えます。

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

  • OWNER_PROJECT_ID: 省略可。オーナー プロジェクトになり、この予約を作成するプロジェクトのプロジェクト ID。--project フラグを省略した場合、現在のプロジェクトがオーナー プロジェクトになります。

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

  • INSTANCE_TEMPLATE_NAME: 既存のインスタンス テンプレートの名前。インスタンス テンプレートを作成および一覧表示する方法を確認します。

  • NUMBER_OF_VMS: 予約する VM の数。

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

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

たとえば、この予約が明確にターゲットにされている場合にのみ使用できる us-central1-a のインスタンス テンプレートから共有予約を作成する場合は、次のようにします。

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

REST

インスタンス テンプレートから共有予約を作成するには、reservations.insert メソッドを使用して POST リクエストを行います。リクエストの本文に次のパラメータを指定します。

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

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

以下を置き換えます。

  • OWNER_PROJECT_ID: オーナー プロジェクトに設定して、この予約を作成するプロジェクトのプロジェクト ID。

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

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

  • NUMBER_OF_VMS: 予約する VM の数。

  • INSTANCE_TEMPLATE_NAME: 既存のインスタンス テンプレートの名前。インスタンス テンプレートを作成および一覧表示する方法を確認します。

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

必要に応じて specificReservationRequired フィールドを追加して true に設定し、この予約を明示的に対象とする VM のみが予約を使用するように指定します。予約済みリソースを使用する際の構成オプションについて詳しくは、予約の仕組み共有予約の仕組みをご覧ください。

たとえば、明示的なターゲットになっている場合にのみ使用できる共有予約を us-central1-a で作成する場合は、次のようなコマンドを使用します。 この共有予約の例はプロジェクト my-owner-project で作成され、my-owner-projectproject-1、または project-2 で使用できます。

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

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

予約を作成すると、その詳細が表示されます。また、いずれかのインスタンスで予約が使用されている場合は、予約の詳細を表示できます。

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

プロパティを直接指定して共有予約を作成するには、Google Cloud コンソール、gcloud CLI、Compute Engine API、Terraform を使用します。

コンソール

共有予約を作成するには、次の操作を行います。

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

    [予約] に移動

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

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

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

  3. [名前] フィールドに、予約の名前を入力します。

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

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

    1. 共有予約を指定するには、[共有] をクリックします。

    2. [プロジェクトを追加] をクリックし、予約を共有する現在のプロジェクトの組織からプロジェクトを選択します。

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

    • 条件を満たす VM でこの予約が自動的に使用されるようにするには、[予約を自動的に使用する](デフォルト)をクリックします。

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

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

  8. [マシンの構成] セクションで、[マシンタイプを指定] を選択し、次のように指定します。

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

    2. 省略可: 最小 CPU プラットフォーム / GPU を指定する方法は次のとおりです。

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

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

      3. 省略可: GPU を追加するには、 [GPU を追加する] をクリックします。それから、[GPU タイプ] フィールドと [GPU の数] フィールドで、各 VM の GPU のタイプと数を選択します。

    3. 省略可: ローカル SSD を追加する手順は次のとおりです。

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

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

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

    共有予約の作成には時間がかかる場合があります。この操作により、[予約] ページにリダイレクトされます。

gcloud

共有予約を作成するには、--share-setting=projects フラグと --share-with フラグを指定して、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=375,interface=INTERFACE_1 \
    --local-ssd=size=375,interface=INTERFACE_2 \
    --zone=ZONE \
    --project=OWNER_PROJECT_ID \
    --share-setting=projects \
    --share-with=CONSUMER_PROJECT_IDS

以下を置き換えます。

  • RESERVATION_NAME: 作成する予約の名前。
  • MACHINE_TYPE: 事前定義またはカスタム マシンタイプ

    • マシンタイプが事前定義の場合は、MACHINE_FAMILY-standard-CPUS の形式を使用します(例: n2-standard-4)。
    • マシンタイプがカスタムの場合は、MACHINE_FAMILY-custom-CPUS-MEMORY の形式を使用します(例: n2-custom-4-5120)。詳しい制限事項については、カスタム マシンタイプの仕様をご覧ください。

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

    • MACHINE_FAMILY: マシンタイプのファミリー。たとえば、N2 VM の場合は n2 を指定します。
    • CPUS: vCPU の数。
    • MEMORY: 予約済みインスタンスの合計メモリ。メモリの量には、256 MB の倍数を MB 単位で指定します。たとえば、4 個の vCPU と 5 GB(5,120 MB)のメモリを搭載した N2 VM を作成するには、n2-custom-4-5120 を使用します。
  • MINIMUM_CPU_PLATFORM: 各 VM に使用する最小 CPU

  • NUMBER_OF_VMS: 予約する VM の数。

  • NUMBER_OF_ACCELERATORS: 追加する GPU の数(1 VM あたり)。

  • ACCELERATOR_TYPE: アクセラレータのタイプ

  • INTERFACE_1INTERFACE_2: 各 VM のローカル SSD が使用するインターフェースのタイプ。有効なオプションは scsinvme です。各ローカル SSD は 375 GB です。追加するローカル SSD ごとに --local-ssd フラグを繰り返します(VM ごとに最大 24 個のローカル SSD)。

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

  • OWNER_PROJECT_ID: 省略可。この共有予約を作成するプロジェクトのプロジェクト ID。--project フラグを省略した場合、デフォルトでは、現在のプロジェクトがオーナー プロジェクトとして使用されます。

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

この予約を他のプロジェクトと共有するには、--share-setting=projects フラグを使用する必要があります。

必要に応じて --require-specific-reservation フラグを追加して、この予約を明示的に対象とする VM のみが予約を使用するように指定することもできます。

たとえば、明示的なターゲットになっている場合にのみ使用できる共有予約を us-central1-a で作成する場合は、次のようなコマンドを使用します。この例では、8 基の Intel Haswell 以降の vCPU、10 GB のメモリ、2 基の V100 GPU、375 GB のローカル SSD を装備したカスタムマシン 10 台を予約しています。この共有予約の例はプロジェクト my-owner-project で作成され、my-owner-projectproject-1、または project-2 で使用できます。

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 \
    --zone=us-central1-c \
    --project=my-owner-project \
    --share-setting=projects \
    --share-with=project-1,project-2 \
    --require-specific-reservation

Terraform

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

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

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

REST

共有予約を作成するには、reservations.insert メソッドを使用して POST リクエストを行います。リクエストの本文に次のパラメータを指定します。

POST https://compute.googleapis.com/compute/v1/projects/OWNER_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": "375",
          "interface": "INTERFACE_1"
        },
        {
          "diskSizeGb": "375",
          "interface": "INTERFACE_2"
        }
      ]
    }
  },
  "shareSettings": {
    "shareType": "SPECIFIC_PROJECTS",
    "projectMap": {
      "CONSUMER_PROJECT_ID_1": {
        "projectId": "CONSUMER_PROJECT_ID_1"
      },
      "CONSUMER_PROJECT_ID_2": {
        "projectId": "CONSUMER_PROJECT_ID_2"
      }
    }
  }
}

以下を置き換えます。

  • OWNER_PROJECT_ID: オーナー プロジェクトに設定して、この予約を作成するプロジェクトのプロジェクト ID。
  • ZONE: リソースを予約するゾーン。
  • RESERVATION_NAME: 作成する予約の名前。
  • NUMBER_OF_VMS: 予約する VM の数。
  • MACHINE_TYPE: 事前定義またはカスタム マシンタイプ

    • マシンタイプが事前定義の場合は、MACHINE_FAMILY-standard-CPUS の形式を使用します(例: n2-standard-4)。
    • マシンタイプがカスタムの場合は、MACHINE_FAMILY-custom-CPUS-MEMORY の形式を使用します(例: n2-custom-4-5120)。詳しい制限事項については、カスタム マシンタイプの仕様をご覧ください。

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

    • MACHINE_FAMILY: マシンタイプのファミリー。たとえば、N2 VM の場合は n2 を指定します。
    • CPUS: vCPU の数。
    • MEMORY: 予約済みインスタンスの合計メモリ。メモリの量には、256 MB の倍数を MB 単位で指定します。たとえば、4 個の vCPU と 5 GB(5,120 MB)のメモリを搭載した N2 VM を作成するには、n2-custom-4-5120 を使用します。
  • MINIMUM_CPU_PLATFORM: 各 VM に使用する最小 CPU

  • NUMBER_OF_ACCELERATORS: 追加する GPU の数(1 VM あたり)。

  • ACCELERATOR_TYPE: アクセラレータのタイプ

  • INTERFACE_1INTERFACE_2: 各 VM のローカル SSD が使用するインターフェースのタイプ。有効なオプションは scsinvme です。各ローカル SSD は 375 GB です。追加するローカル SSD ごとに localSsds.diskSizeGb フィールドと localSsds.interface フィールドを繰り返します(VM ごとに最大 24 個のローカル SSD)。

  • CONSUMER_PROJECT_ID_1CONSUMER_PROJECT_ID_2: この予約を共有するプロジェクトのプロジェクト ID。 1~100 個のユーザー プロジェクトを含めることができます。これらのプロジェクトは、オーナー プロジェクトと同じ組織に存在する必要があります。この予約はデフォルトで許可されているため、OWNER_PROJECT_ID は使用しないでください。

必要に応じて、次の例のように specificReservationRequired フィールドを追加してtrue に設定し、この予約を明示的に対象とする VM のみが予約を使用できるように指定します。

たとえば、明示的なターゲットになっている場合にのみ使用できる共有予約を us-central1-a で作成する場合は、次のようなコマンドを使用します。この例では、8 基の Intel Haswell 以降の vCPU、10 GB のメモリ、2 基の V100 GPU、375 GB のローカル SSD を備えたカスタムマシンを 10 台を予約しています。この共有予約の例はプロジェクト my-owner-project によって作成され、my-owner-projectproject-1、または project-2 で使用できます。

POST https://compute.googleapis.com/compute/v1/projects/my-owner-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"
        }
      ]
    }
  },
  "shareSettings": {
    "shareType": "SPECIFIC_PROJECTS",
    "projectMap": {
      "project-1": {
        "projectId": "project-1"
      },
      "project-2": {
        "projectId": "project-2"
      }
    }
  },
  "specificReservationRequired": true
}

予約を作成すると、その詳細が表示されます。また、いずれかの VM で予約が使用されている場合は、予約の詳細を表示できます。

トラブルシューティング

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

次のステップ