コンパクト プレースメント ポリシーを使用してレイテンシを短縮する

このドキュメントでは、コンパクト プレースメント ポリシーを作成して適用することで、Compute Engine インスタンス間のネットワーク レイテンシを短縮する方法について説明します。サポートされているマシンシリーズ、制限事項、料金など、プレースメント ポリシーの詳細については、プレースメント ポリシーの概要をご覧ください。

コンパクト プレースメント ポリシーでは、インスタンスを互いに物理的に近い位置に配置するよう指定します。これにより、ハイ パフォーマンス コンピューティング(HPC)、機械学習(ML)、データベース サーバーのワークロードなどを実行する際に、パフォーマンスを向上させ、インスタンス間のネットワーク レイテンシを短縮できます。

始める前に

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

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

    gcloud

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

      gcloud init

      外部 ID プロバイダ(IdP)を使用している場合は、まず連携 ID を使用して gcloud CLI にログインする必要があります。

    2. Set a default region and zone.

    REST

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

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

      gcloud init

      外部 ID プロバイダ(IdP)を使用している場合は、まず連携 ID を使用して gcloud CLI にログインする必要があります。

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

必要なロール

コンパクト プレースメント ポリシーを作成してコンピューティング インスタンスに適用するために必要な権限を取得するには、プロジェクトに対する次の IAM ロールを付与するよう管理者に依頼してください。

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

これらの事前定義ロールには、コンパクト プレースメント ポリシーを作成してコンピューティング インスタンスに適用するために必要な権限が含まれています。必要とされる正確な権限については、「必要な権限」セクションを開いてご確認ください。

必要な権限

コンパクト プレースメント ポリシーを作成してコンピューティング インスタンスに適用するには、次の権限が必要です。

  • プレースメント ポリシーを作成する: プロジェクトに対する compute.resourcePolicies.create
  • 既存のインスタンスにプレースメント ポリシーを適用する: プロジェクトに対する compute.instances.addResourcePolicies
  • インスタンスを作成する:
    • プロジェクトに対する compute.instances.create
    • カスタム イメージを使用して VM を作成する: イメージに対する compute.images.useReadOnly
    • スナップショットを使用して VM を作成する: スナップショットに対する compute.snapshots.useReadOnly
    • インスタンス テンプレートを使用して VM を作成する: インスタンス テンプレートに対する compute.instanceTemplates.useReadOnly
    • 以前のネットワークを VM に割り当てる: プロジェクトに対する compute.networks.use
    • VM の静的 IP アドレスを指定する: プロジェクトに対する compute.addresses.use
    • 以前のネットワークの使用時に VM に外部 IP アドレスを割り当てる: プロジェクトに対する compute.networks.useExternalIp
    • VM のサブネットを指定する: プロジェクトまたは選択したサブネットに対する compute.subnetworks.use
    • VPC ネットワークの使用時に VM に外部 IP アドレスを割り当てる: プロジェクトまたは選択したサブネットに対する compute.subnetworks.useExternalIp
    • VM の VM インスタンス メタデータを設定する: プロジェクトに対する compute.instances.setMetadata
    • VM にタグを設定する: VM に対する compute.instances.setTags
    • VM にラベルを設定する: VM に対する compute.instances.setLabels
    • VM が使用するサービス アカウントを設定する: VM に対する compute.instances.setServiceAccount
    • VM に新しいディスクを作成する: プロジェクトに対する compute.disks.create
    • 既存のディスクを読み取り専用モードまたは読み取り / 書き込みモードでアタッチする: ディスクに対する compute.disks.use
    • 既存のディスクを読み取り専用モードでアタッチする: ディスクに対する compute.disks.useReadOnly
  • 予約を作成する: プロジェクトに対する compute.reservations.create
  • インスタンス テンプレートを作成する: プロジェクトに対する compute.instanceTemplates.create
  • マネージド インスタンス グループ(MIG)を作成する: プロジェクトに対する compute.instanceGroupManagers.create
  • インスタンスの詳細を表示する: プロジェクトに対する compute.instances.get

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

コンパクト プレースメント ポリシーを作成する

コンパクト プレースメント ポリシーを作成する前に、次の点を考慮してください。

  • コンパクト プレースメント ポリシーを N2 または N2D 以外のコンピューティング インスタンスに適用する場合は、最大距離値を指定することをおすすめします。

  • コンパクト プレースメント ポリシーは、予約にバインドされたプロビジョニング モデルを使用してデプロイされた A4 Ultra インスタンスまたは A3 Ultra インスタンスにのみ適用できます。詳細については、AI Hypercomputer のドキュメントの クラスタ管理の概要をご覧ください。

  • デフォルトでは、最大距離値が設定されたコンパクト プレースメント ポリシーを A3 Mega、A3 High、A3 Edge インスタンスに適用することはできません。この機能へのアクセスをリクエストするには、テクニカル アカウント マネージャー(TAM)またはセールスチームにお問い合わせください。

コンパクト プレースメント ポリシーを作成するには、次のいずれかのオプションを選択します。

gcloud

  • コンパクト プレースメント ポリシーを N2 または N2D インスタンスに適用するには、--collocation=collocated フラグを指定して gcloud compute resource-policies create group-placement コマンドを使用してポリシーを作成します。

    gcloud compute resource-policies create group-placement POLICY_NAME \
        --collocation=collocated \
        --region=REGION
    

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

    • POLICY_NAME: コンパクト プレースメント ポリシーの名前。

    • REGION: プレースメント ポリシーを作成するリージョン。

  • コンパクト プレースメント ポリシーを他のサポートされているインスタンスに適用するには、--collocation=collocated フラグと --max-distance フラグを指定して gcloud beta compute resource-policies create group-placement コマンドを使用してポリシーを作成します。

    gcloud beta compute resource-policies create group-placement POLICY_NAME \
        --collocation=collocated \
        --max-distance=MAX_DISTANCE \
        --region=REGION
    

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

    • POLICY_NAME: コンパクト プレースメント ポリシーの名前。

    • MAX_DISTANCE: インスタンス間の最大距離構成。この値は 13 の間にする必要があります。前者は、ネットワーク レイテンシを最小化するためにインスタンスを同じラックに配置するように指定します。後者は、インスタンスを隣接するクラスタに配置するように指定します。コンパクト プレースメント ポリシーを予約に適用するか、A4 Ultra インスタンスまたは A3 Ultra インスタンスに適用する場合は、1 の値を指定できません。

    • REGION: プレースメント ポリシーを作成するリージョン。

REST

  • コンパクト プレースメント ポリシーを N2 または N2D インスタンスに適用するには、resourcePolicies.insert メソッドPOST リクエストを送信してポリシーを作成します。リクエストの本文に collocation フィールドを含め、COLLOCATED に設定します。

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/resourcePolicies
    
    {
      "name": "POLICY_NAME",
      "groupPlacementPolicy": {
        "collocation": "COLLOCATED"
      }
    }
    

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

    • PROJECT_ID: プレースメント ポリシーを作成するプロジェクトの ID。

    • REGION: プレースメント ポリシーを作成するリージョン。

    • POLICY_NAME: コンパクト プレースメント ポリシーの名前。

  • コンパクト プレースメント ポリシーを他のサポートされているインスタンスに適用するには、beta.resourcePolicies.insert メソッドPOST リクエストを送信してポリシーを作成します。リクエスト本文に、次のものを含めます。

    • COLLOCATED に設定されている collocation フィールド。

    • maxDistance フィールド。

    POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/regions/REGION/resourcePolicies
    
    {
      "name": "POLICY_NAME",
      "groupPlacementPolicy": {
        "collocation": "COLLOCATED",
        "maxDistance": MAX_DISTANCE
      }
    }
    

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

    • PROJECT_ID: プレースメント ポリシーを作成するプロジェクトの ID。

    • REGION: プレースメント ポリシーを作成するリージョン。

    • POLICY_NAME: コンパクト プレースメント ポリシーの名前。

    • MAX_DISTANCE: インスタンス間の最大距離構成。この値は 13 の間にする必要があります。前者は、ネットワーク レイテンシを最小化するためにインスタンスを同じラックに配置するように指定します。後者は、インスタンスを隣接するクラスタに配置するように指定します。コンパクト プレースメント ポリシーを予約に適用するか、A4 Ultra インスタンスまたは A3 Ultra インスタンスに適用する場合は、1 の値を指定できません。

コンパクト プレースメント ポリシーを適用する

コンパクト プレースメント ポリシーは、既存のコンピューティング インスタンスまたはマネージド インスタンス グループ(MIG)に適用できます。インスタンス、インスタンス テンプレート、MIG、インスタンスの予約を作成するときに適用することもできます。

コンパクト プレースメント ポリシーを Compute Engine リソースに適用するには、次のいずれかの方法を選択します。

コンパクト プレースメント ポリシーをインスタンスに適用すると、同じプレースメント ポリシーを指定する他のインスタンスとの関連で インスタンスの物理的な場所を確認することができます。

既存のインスタンスにポリシーを適用する

コンパクト プレースメント ポリシーを既存のコンピューティング インスタンスに適用する前に、次のことを確認してください。

上記以外の場合、インスタンスにコンパクト プレースメント ポリシーを適用すると失敗します。インスタンスにすでにプレースメント ポリシーが指定されていて、そのプレースメント ポリシーを置き換える場合は、インスタンスのプレースメント ポリシーを置き換えるをご覧ください。

コンパクト プレースメント ポリシーを既存のインスタンスに適用するには、次のいずれかのオプションを選択します。

gcloud

  1. インスタンスを停止します。

  2. 既存のインスタンスにコンパクト プレースメント ポリシーを適用するには、gcloud compute instances add-resource-policies コマンドを使用します。

    gcloud compute instances add-resource-policies INSTANCE_NAME \
        --resource-policies=POLICY_NAME \
        --zone=ZONE
    

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

    • INSTANCE_NAME: 既存のインスタンスの名前。

    • POLICY_NAME: 既存のコンパクト プレースメント ポリシーの名前。

    • ZONE: インスタンスが配置されているゾーン。

  3. インスタンスを再起動します。

REST

  1. インスタンスを停止します。

  2. コンパクト プレースメント ポリシーを既存のインスタンスに適用するには、instances.addResourcePolicies メソッドPOST リクエストを送信します。

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_NAME/addResourcePolicies
    
    {
      "resourcePolicies": [
        "projects/PROJECT_ID/regions/REGION/resourcePolicies/POLICY_NAME"
      ]
    }
    

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

    • PROJECT_ID: コンパクト プレースメント ポリシーとインスタンスが配置されているプロジェクトの ID。

    • ZONE: インスタンスが配置されているゾーン。

    • INSTANCE_NAME: 既存のインスタンスの名前。

    • REGION: コンパクト プレースメント ポリシーが存在するリージョン。

    • POLICY_NAME: 既存のコンパクト プレースメント ポリシーの名前。

  3. インスタンスを再起動します。

インスタンスの作成時にポリシーを適用する

コンパクト プレースメント ポリシーを指定するコンピューティング インスタンスは、プレースメント ポリシーと同じリージョンにのみ作成できます。

コンパクト プレースメント ポリシーを指定するインスタンスを作成するには、次のいずれかのオプションを選択します。

gcloud

コンパクト プレースメント ポリシーを指定するインスタンスを作成するには、--maintenance-policy フラグと --resource-policies フラグを指定して gcloud compute instances create コマンドを使用します。

gcloud compute instances create INSTANCE_NAME \
    --machine-type=MACHINE_TYPE \
    --maintenance-policy=MAINTENANCE_POLICY \
    --resource-policies=POLICY_NAME \
    --zone=ZONE

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

  • INSTANCE_NAME: 作成するインスタンスの名前。

  • MACHINE_TYPE: コンパクト プレースメント ポリシーでサポートされているマシンタイプ

  • MAINTENANCE_POLICY: インスタンスのホスト メンテナンス ポリシー。指定したコンパクト プレースメント ポリシーが 1 または 2 の最大距離値を使用する場合、あるいは選択したマシンタイプがライブ マイグレーションに対応していない場合、指定できるのは TERMINATE のみです。それ以外の場合は、MIGRATE または TERMINATE を指定できます。

  • POLICY_NAME: 既存のコンパクト プレースメント ポリシーの名前。

  • ZONE: インスタンスを作成するゾーン。

REST

コンパクト プレースメント ポリシーを指定するインスタンスを作成するには、instances.insert メソッドPOST リクエストを送信します。リクエストの本文に、onHostMaintenance フィールドと resourcePolicies フィールドを含めます。

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

{
  "name": "INSTANCE_NAME",
  "machineType": "zones/ZONE/machineTypes/MACHINE_TYPE",
  "disks": [
    {
      "boot": true,
      "initializeParams": {
        "sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE"
      }
    }
  ],
  "networkInterfaces": [
    {
      "network": "global/networks/default"
    }
  ],
  "resourcePolicies": [
    "projects/PROJECT_ID/regions/REGION/resourcePolicies/POLICY_NAME"
  ],
  "scheduling": {
    "onHostMaintenance": "MAINTENANCE_POLICY"
  }
}

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

  • PROJECT_ID: コンパクト プレースメント ポリシーを含むプロジェクトの ID。

  • ZONE: インスタンスを作成するゾーンとマシンタイプが存在するゾーン。指定できるのは、コンパクト プレースメント ポリシーのリージョン内のゾーンのみです。

  • INSTANCE_NAME: 作成するインスタンスの名前。

  • MACHINE_TYPE: コンパクト プレースメント ポリシーでサポートされているマシンタイプ

  • IMAGE_PROJECT: イメージを含むイメージ プロジェクト(例: debian-cloud)。サポートされているイメージ プロジェクトの詳細については、公開イメージをご覧ください。

  • IMAGE: 次のいずれかを指定します。

    • OS イメージの特定のバージョン。例: debian-12-bookworm-v20240617

    • イメージ ファミリーfamily/IMAGE_FAMILY の形式にする必要があります。これにより、非推奨ではない最新の OS イメージが指定されます。たとえば、family/debian-12 を指定すると、Debian 12 イメージ ファミリーの最新バージョンが使用されます。イメージ ファミリーの使用の詳細については、イメージ ファミリーのベスト プラクティスをご覧ください。

  • REGION: コンパクト プレースメント ポリシーが存在するリージョン。

  • POLICY_NAME: 既存のコンパクト プレースメント ポリシーの名前。

  • MAINTENANCE_POLICY: インスタンスのホスト メンテナンス ポリシー。指定したコンパクト プレースメント ポリシーが 1 または 2 の最大距離値を使用する場合、あるいは選択したマシンタイプがライブ マイグレーションに対応していない場合、指定できるのは TERMINATE のみです。それ以外の場合は、MIGRATE または TERMINATE を指定できます。

インスタンスを作成する構成オプションの詳細については、インスタンスを作成して起動するをご覧ください。

インスタンスの一括作成時にポリシーを適用する

コンパクト プレースメント ポリシーを使用してコンピューティング インスタンスを一括作成できるのは、プレースメント ポリシーと同じリージョン内のみです。

コンパクト プレースメント ポリシーを指定するインスタンスを一括作成するには、次のいずれかのオプションを選択します。

gcloud

コンパクト プレースメント ポリシーを指定するインスタンスを一括で作成するには、--maintenance-policy フラグと --resource-policies フラグを指定して gcloud compute instances bulk create コマンドを使用します。

たとえば、単一のゾーンでインスタンスを一括作成し、インスタンスの名前パターンを指定するには、次のコマンドを実行します。

gcloud compute instances bulk create \
    --count=COUNT \
    --machine-type=MACHINE_TYPE \
    --maintenance-policy=MAINTENANCE_POLICY \
    --name-pattern=NAME_PATTERN \
    --resource-policies=POLICY_NAME \
    --zone=ZONE

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

  • COUNT: 作成するインスタンスの数。指定されたコンパクト プレースメント ポリシーのサポートされているインスタンスの最大数を超えることはできません。

  • MACHINE_TYPE: コンパクト プレースメント ポリシーでサポートされているマシンタイプ

  • MAINTENANCE_POLICY: インスタンスのホスト メンテナンス ポリシー。指定したコンパクト プレースメント ポリシーが 1 または 2 の最大距離値を使用する場合、あるいは選択したマシンタイプがライブ マイグレーションに対応していない場合、指定できるのは TERMINATE のみです。それ以外の場合は、MIGRATE または TERMINATE を指定できます。

  • NAME_PATTERN: インスタンスの名前パターン。インスタンス名の一連の数字を置き換えるには、一連のハッシュ(#)文字を使用します。たとえば、名前パターンに vm-# を使用すると、vm-1vm-2 で始まり、COUNT で指定されたインスタンスの数まで続く名前のインスタンスが生成されます。

  • POLICY_NAME: 既存のコンパクト プレースメント ポリシーの名前。

  • ZONE: インスタンスを一括作成するゾーン。

REST

コンパクト プレースメント ポリシーを指定するインスタンスを一括作成するには、instances.bulkInsert メソッドPOST リクエストを送信します。リクエストの本文に、onHostMaintenance フィールドと resourcePolicies フィールドを含めます。

たとえば、単一のゾーンでインスタンスを一括作成し、インスタンスの名前パターンを指定するには、次のように POST リクエストを送信します。

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

{
  "count": "COUNT",
  "namePattern": "NAME_PATTERN",
  "instanceProperties": {
    "machineType": "MACHINE_TYPE",
    "disks": [
      {
        "boot": true,
        "initializeParams": {
          "sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE"
        }
      }
    ],
    "networkInterfaces": [
      {
        "network": "global/networks/default"
      }
    ],
    "resourcePolicies": [
      "projects/PROJECT_ID/regions/REGION/resourcePolicies/POLICY_NAME"
    ],
    "scheduling": {
      "onHostMaintenance": "MAINTENANCE_POLICY"
    }
  }
}

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

  • PROJECT_ID: コンパクト プレースメント ポリシーを含むプロジェクトの ID。

  • ZONE: インスタンスを一括作成するゾーン。

  • COUNT: 作成するインスタンスの数。指定されたコンパクト プレースメント ポリシーのサポートされているインスタンスの最大数を超えることはできません。

  • NAME_PATTERN: インスタンスの名前パターン。インスタンス名の一連の数字を置き換えるには、一連のハッシュ(#)文字を使用します。たとえば、名前パターンに vm-# を使用すると、vm-1vm-2 で始まり、COUNT で指定されたインスタンスの数まで続く名前のインスタンスが生成されます。

  • MACHINE_TYPE: コンパクト プレースメント ポリシーでサポートされているマシンタイプ

  • IMAGE_PROJECT: イメージを含むイメージ プロジェクト(例: debian-cloud)。サポートされているイメージ プロジェクトの詳細については、公開イメージをご覧ください。

  • IMAGE: 次のいずれかを指定します。

    • OS イメージの特定のバージョン。例: debian-12-bookworm-v20240617

    • イメージ ファミリーfamily/IMAGE_FAMILY の形式にする必要があります。これにより、非推奨ではない最新の OS イメージが指定されます。たとえば、family/debian-12 を指定すると、Debian 12 イメージ ファミリーの最新バージョンが使用されます。イメージ ファミリーの使用の詳細については、イメージ ファミリーのベスト プラクティスをご覧ください。

  • REGION: コンパクト プレースメント ポリシーが存在するリージョン。

  • POLICY_NAME: 既存のコンパクト プレースメント ポリシーの名前。

  • MAINTENANCE_POLICY: インスタンスのホスト メンテナンス ポリシー。指定したコンパクト プレースメント ポリシーが 1 または 2 の最大距離値を使用する場合、あるいは選択したマシンタイプがライブ マイグレーションに対応していない場合、指定できるのは TERMINATE のみです。それ以外の場合は、MIGRATE または TERMINATE を指定できます。

インスタンスを一括作成するための構成オプションの詳細については、インスタンスを一括作成するをご覧ください。

予約の作成時にポリシーを適用する

コンパクト プレースメント ポリシーを指定するオンデマンドの単一プロジェクトの予約を作成する場合は、明示的に対象となる予約を作成する必要があります。予約を使用するインスタンスを作成する場合は、次の点を確認してください。

  • インスタンスには、予約に適用されたものと同じコンパクト プレースメント ポリシーを指定する必要があります。

  • インスタンスは、その予約を明示的に対象として使用する必要があります。詳細については、特定の予約からインスタンスを使用するをご覧ください。

コンパクト プレースメント ポリシーを使用して単一プロジェクトの予約を作成するには、次のいずれかの方法を選択します。

プロパティを直接指定してコンパクト プレースメント ポリシーを含む単一プロジェクトの予約を作成するには、次のいずれかを選択します。

gcloud

プロパティを直接指定してコンパクト プレースメント ポリシーを含む単一プロジェクトの予約を作成するには、--require-specific-reservation フラグと --resource-policies=policy フラグを指定して gcloud compute reservations create コマンドを使用します。

gcloud compute reservations create RESERVATION_NAME \
    --machine-type=MACHINE_TYPE \
    --require-specific-reservation \
    --resource-policies=policy=POLICY_NAME \
    --vm-count=NUMBER_OF_INSTANCES \
    --zone=ZONE

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

  • RESERVATION_NAME: 予約の名前。

  • MACHINE_TYPE: コンパクト プレースメント ポリシーでサポートされているマシンタイプ

  • POLICY_NAME: 既存のコンパクト プレースメント ポリシーの名前。

  • NUMBER_OF_INSTANCES: 予約するインスタンスの数。指定されたコンパクト プレースメント ポリシーのサポートされているインスタンスの最大数を超えることはできません。

  • ZONE: インスタンスを予約するゾーン。インスタンスを予約できるのは、指定したコンパクト プレースメント ポリシーのリージョン内のゾーンのみです。

REST

プロパティを直接指定してコンパクト プレースメント ポリシーを含む単一プロジェクトの予約を作成するには、reservations.insert メソッドPOST リクエストを送信します。リクエストの本文で、resourcePolicies フィールドと、specificReservationRequired フィールドを true に設定します。

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

{
  "name": "RESERVATION_NAME",
  "resourcePolicies": {
    "policy" : "projects/PROJECT_ID/regions/REGION/resourcePolicies/POLICY_NAME"
  },
  "specificReservation": {
    "count": "NUMBER_OF_INSTANCES",
    "instanceProperties": {
      "machineType": "MACHINE_TYPE",
    }
  },
  "specificReservationRequired": true
}

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

  • PROJECT_ID: コンパクト プレースメント ポリシーを含むプロジェクトの ID。

  • ZONE: インスタンスを予約するゾーン。インスタンスを予約できるのは、指定したコンパクト プレースメント ポリシーのリージョン内のゾーンのみです。

  • RESERVATION_NAME: 予約の名前。

  • REGION: コンパクト プレースメント ポリシーが存在するリージョン。

  • POLICY_NAME: 既存のコンパクト プレースメント ポリシーの名前。

  • NUMBER_OF_INSTANCES: 予約するインスタンスの数。指定されたコンパクト プレースメント ポリシーのサポートされているインスタンスの最大数を超えることはできません。

  • MACHINE_TYPE: コンパクト プレースメント ポリシーでサポートされているマシンタイプ

単一プロジェクトの予約を作成する構成オプションの詳細については、単一プロジェクトの予約を作成するをご覧ください。

インスタンス テンプレートの作成時にポリシーを適用する

リージョン インスタンス テンプレートを作成する場合は、コンパクト プレースメント ポリシーと同じリージョンにテンプレートを作成する必要があります。そうしないと、インスタンス テンプレートの作成は失敗します。

コンパクト プレースメント ポリシーを指定するインスタンス テンプレートを作成すると、そのテンプレートを使用して次のことができます。

コンパクト プレースメント ポリシーを指定するインスタンス テンプレートを作成するには、次のいずれかのオプションを選択します。

gcloud

コンパクト プレースメント ポリシーを指定するインスタンス テンプレートを作成するには、--maintenance-policy フラグと --resource-policies フラグを指定して gcloud compute instance-templates create コマンドを使用します。

たとえば、コンパクト プレースメント ポリシーを指定するグローバル インスタンス テンプレートを作成するには、次のコマンドを実行します。

gcloud compute instance-templates create INSTANCE_TEMPLATE_NAME \
    --machine-type=MACHINE_TYPE \
    --maintenance-policy=MAINTENANCE_POLICY \
    --resource-policies=POLICY_NAME

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

  • INSTANCE_TEMPLATE_NAME: インスタンス テンプレートの名前。

  • MACHINE_TYPE: コンパクト プレースメント ポリシーでサポートされているマシンタイプ

  • MAINTENANCE_POLICY: インスタンスのホスト メンテナンス ポリシー。指定したコンパクト プレースメント ポリシーが 1 または 2 の最大距離値を使用する場合、あるいは選択したマシンタイプがライブ マイグレーションに対応していない場合、指定できるのは TERMINATE のみです。それ以外の場合は、MIGRATE または TERMINATE を指定できます。

  • POLICY_NAME: 既存のコンパクト プレースメント ポリシーの名前。

REST

コンパクト プレースメント ポリシーを指定するインスタンス テンプレートを作成するには、次のいずれかのメソッドに POST リクエストを送信します。

リクエストの本文に、onHostMaintenance フィールドと resourcePolicies フィールドを含めます。

たとえば、コンパクト プレースメント ポリシーを指定するグローバル インスタンス テンプレートを作成するには、次のように POST リクエストを送信します。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/instanceTemplates

{
  "name": "INSTANCE_TEMPLATE_NAME",
  "properties": {
    "disks": [
      {
        "boot": true,
        "initializeParams": {
          "sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE"
        }
      }
    ],
    "machineType": "MACHINE_TYPE",
    "networkInterfaces": [
      {
        "network": "global/networks/default"
      }
    ],
    "resourcePolicies": [
      "POLICY_NAME"
    ],
    "scheduling": {
      "onHostMaintenance": "MAINTENANCE_POLICY"
    }
  }
}

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

  • PROJECT_ID: コンパクト プレースメント ポリシーを含むプロジェクトの ID。

  • INSTANCE_TEMPLATE_NAME: インスタンス テンプレートの名前。

  • IMAGE_PROJECT: イメージを含むイメージ プロジェクト(例: debian-cloud)。サポートされているイメージ プロジェクトの詳細については、公開イメージをご覧ください。

  • IMAGE: 次のいずれかを指定します。

    • OS イメージの特定のバージョン。例: debian-12-bookworm-v20240617

    • イメージ ファミリーfamily/IMAGE_FAMILY の形式にする必要があります。これにより、非推奨ではない最新の OS イメージが指定されます。たとえば、family/debian-12 を指定すると、Debian 12 イメージ ファミリーの最新バージョンが使用されます。イメージ ファミリーの使用の詳細については、イメージ ファミリーのベスト プラクティスをご覧ください。

  • MACHINE_TYPE: コンパクト プレースメント ポリシーでサポートされているマシンタイプ

  • POLICY_NAME: 既存のコンパクト プレースメント ポリシーの名前。

  • MAINTENANCE_POLICY: インスタンスのホスト メンテナンス ポリシー。指定したコンパクト プレースメント ポリシーが 1 または 2 の最大距離値を使用する場合、あるいは選択したマシンタイプがライブ マイグレーションに対応していない場合、指定できるのは TERMINATE のみです。それ以外の場合は、MIGRATE または TERMINATE を指定できます。

インスタンス テンプレートを作成するための構成オプションの詳細については、インスタンス テンプレートを作成するをご覧ください。

MIG 内のインスタンスにポリシーを適用する

コンパクト プレースメント ポリシーを指定するインスタンス テンプレートを作成すると、そのテンプレートを使用して次のことができます。

MIG の作成時にポリシーを適用する

コンパクト プレースメント ポリシーを指定するコンピューティング インスタンスは、インスタンスがプレースメント ポリシーと同じリージョンにある場合にのみ作成できます。

コンパクト プレースメント ポリシーを指定するインスタンス テンプレートを使用して MIG を作成するには、次のいずれかの方法を選択します。

gcloud

コンパクト プレースメント ポリシーを指定するインスタンス テンプレートを使用して MIG を作成するには、gcloud compute instance-groups managed create コマンドを使用します。

たとえば、コンパクト プレースメント ポリシーを指定するグローバル インスタンス テンプレートを使用してゾーン MIG を作成するには、次のコマンドを実行します。

gcloud compute instance-groups managed create INSTANCE_GROUP_NAME \
    --size=SIZE \
    --template=INSTANCE_TEMPLATE_NAME \
    --zone=ZONE

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

  • INSTANCE_GROUP_NAME: 作成する MIG の名前。

  • SIZE: MIG のサイズ。

  • INSTANCE_TEMPLATE_NAME: コンパクト プレースメント ポリシーを指定する既存のグローバル インスタンス テンプレートの名前。

  • ZONE: MIG を作成するゾーン。コンパクト プレースメント ポリシーが適用されているリージョン内である必要があります。

REST

コンパクト プレースメント ポリシーを指定するインスタンス テンプレートを使用して MIG を作成するには、次のいずれかのメソッドに POST リクエストを送信します。

たとえば、コンパクト プレースメント ポリシーを指定するグローバル インスタンス テンプレートを使用してゾーン MIG を作成するには、次のように POST リクエストを送信します。

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

{
  "name": "INSTANCE_GROUP_NAME",
  "targetSize": SIZE,
  "versions": [
    {
      "instanceTemplate": "global/instanceTemplates/INSTANCE_TEMPLATE_NAME"
    }
  ]
}

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

  • PROJECT_ID: コンパクト プレースメント ポリシーと、プレースメント ポリシーを指定するインスタンス テンプレートがあるプロジェクトの ID。

  • ZONE: MIG を作成するゾーン。コンパクト プレースメント ポリシーが適用されているリージョン内である必要があります。

  • INSTANCE_GROUP_NAME: 作成する MIG の名前。

  • INSTANCE_TEMPLATE_NAME: コンパクト プレースメント ポリシーを指定する既存のグローバル インスタンス テンプレートの名前。

  • SIZE: MIG のサイズ。

MIG を作成するための構成オプションの詳細については、MIG を作成するための基本的なシナリオをご覧ください。

既存の MIG にポリシーを適用する

コンパクト プレースメント ポリシーを既存の MIG に適用できるのは、MIG がプレースメント ポリシーと同じリージョンにある場合、またはゾーン MIG の場合はプレースメント ポリシーと同じリージョン内のゾーンにある場合のみです。

コンパクト プレースメント ポリシーを指定するインスタンス テンプレートを使用するように MIG を更新するには、次のいずれかのオプションを選択します。

gcloud

コンパクト プレースメント ポリシーを指定するインスタンス テンプレートを使用するように MIG を更新するには、gcloud compute instance-groups managed rolling-action start-update コマンドを使用します。

たとえば、コンパクト プレースメント ポリシーを指定するインスタンス テンプレートを使用するようにゾーン MIG を更新し、MIG の既存のインスタンスをテンプレートのプロパティを指定する新しいインスタンスに置き換えるには、次のコマンドを実行します。

gcloud compute instance-groups managed rolling-action start-update MIG_NAME \
    --version=template=INSTANCE_TEMPLATE_NAME \
    --zone=ZONE

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

  • MIG_NAME: 既存の MIG の名前。

  • INSTANCE_TEMPLATE_NAME: コンパクト プレースメント ポリシーを指定する既存のグローバル インスタンス テンプレートの名前。

  • ZONE: MIG が配置されているゾーン。コンパクト プレースメント ポリシーは、プレースメント ポリシーと同じリージョン内の MIG にのみ適用できます。

REST

コンパクト プレースメント ポリシーを指定するインスタンス テンプレートを使用するように MIG を更新し、テンプレートのプロパティとプレースメント ポリシーを MIG 内の既存のインスタンスに自動的に適用するには、次のいずれかのメソッドに PATCH リクエストを送信します。

たとえば、コンパクト プレースメント ポリシーを指定するグローバル インスタンス テンプレートを使用するようにゾーン MIG を更新し、MIG の既存のインスタンスをテンプレートのプロパティを指定する新しいインスタンスに置き換えるには、次の PATCH リクエストを送信します。

PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instanceGroupManagers/MIG_NAME

{
  "instanceTemplate": "global/instanceTemplates/INSTANCE_TEMPLATE_NAME"
}

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

  • PROJECT_ID: MIG、コンパクト プレースメント ポリシー、プレースメント ポリシーを指定するインスタンス テンプレートがあるプロジェクトの ID。

  • ZONE: MIG が配置されているゾーン。コンパクト プレースメント ポリシーは、プレースメント ポリシーと同じリージョン内の MIG にのみ適用できます。

  • MIG_NAME: 既存の MIG の名前。

  • INSTANCE_TEMPLATE_NAME: コンパクト プレースメント ポリシーを指定する既存のグローバル インスタンス テンプレートの名前。

MIG 内のインスタンスを更新するための構成オプションの詳細については、MIG 内のインスタンスに新しい構成を更新して適用するをご覧ください。

インスタンスの物理的な位置を確認する

コンピューティング インスタンスにコンパクト プレースメント ポリシーを適用すると、他のインスタンスとの関連でインスタンスの物理的な位置を確認できます。この比較は、プロジェクト内にあり、同じコンパクト プレースメント ポリシーを指定するインスタンスに限定されます。インスタンスの物理的な位置を確認することで、次のことが可能になります。

  • ポリシーが正常に適用されたかの確認。

  • どのインスタンスが相互に最も近いかを特定します。

同じコンパクト プレースメント ポリシーを指定する他のインスタンスとの関係でインスタンスの物理的な位置を確認するには、次のいずれかのオプションを選択します。

gcloud

コンパクト プレースメント ポリシーを指定するインスタンスの物理的な位置を表示するには、--format フラグを指定して gcloud compute instances describe コマンドを使用します。

gcloud compute instances describe INSTANCE_NAME \
    --format="table[box,title=VM-Position](resourcePolicies.scope():sort=1,resourceStatus.physicalHost:label=location)" \
    --zone=ZONE

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

  • INSTANCE_NAME: コンパクト プレースメント ポリシーを指定する既存のインスタンスの名前。

  • ZONE: インスタンスが配置されているゾーン。

出力は次のようになります。

VM-Position

RESOURCE_POLICIES: us-central1/resourcePolicies/example-policy']
PHYSICAL_HOST: /CCCCCCC/BBBBBB/AAAA

PHYSICAL_HOST フィールドの値は 3 つの部分で構成されます。それぞれ、インスタンスが配置されているクラスタ、ラック、ホストを表します。

プロジェクト内で同じコンパクト プレースメント ポリシーを使用する 2 つのインスタンスの位置を比較すると、PHYSICAL_HOST フィールドでインスタンスが共有する部分が多いほど、相互に配置される物理的な位置は近くなります。たとえば、2 つのインスタンスの両方で PHYSICAL_HOST フィールドに次のサンプル値のいずれかを指定するとします。

  • /CCCCCCC/xxxxxx/xxxx: 2 つのインスタンスは同じクラスタに配置されます。これは、最大距離値 2 に相当します。同じクラスタに配置されたインスタンスでは、ネットワーク レイテンシが低くなります。

  • /CCCCCCC/BBBBBB/xxxx: 2 つのインスタンスは同じラックに配置されます。これは、最大距離値 1 に相当します。同じラックに配置されたインスタンスでは、同じクラスタに配置されたインスタンスよりもネットワーク レイテンシが低くなります。

  • /CCCCCCC/BBBBBB/AAAA: 2 つのインスタンスが同じホストを共有しています。同じホストに配置されたインスタンスでは、ネットワーク レイテンシが可能な限り最小限に抑えられます。

REST

コンパクト プレースメント ポリシーを指定するインスタンスの物理的な位置を表示するには、instances.get メソッドGET リクエストを送信します。

GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_NAME

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

  • PROJECT_ID: インスタンスが配置されているプロジェクトの ID。

  • ZONE: インスタンスが配置されているゾーン。

  • INSTANCE_NAME: コンパクト プレースメント ポリシーを指定する既存のインスタンスの名前。

出力は次のようになります。

{
  ...
  "resourcePolicies": [
    "https://www.googleapis.com/compute/v1/projects/example-project/regions/us-central1/resourcePolicies/example-policy"
  ],
  "resourceStatus": {
    "physicalHost": "/xxxxxxxx/xxxxxx/xxxxx"
  },
  ...
}

physicalHost フィールドの値は 3 つの部分で構成されます。それぞれ、インスタンスが配置されているクラスタ、ラック、ホストを表します。

プロジェクト内で同じコンパクト プレースメント ポリシーを使用する 2 つのインスタンスの位置を比較すると、physicalHost フィールドでインスタンスが共有する部分が多いほど、相互に配置される物理的な位置は近くなります。たとえば、2 つのインスタンスの両方で physicalHost フィールドに次のサンプル値のいずれかを指定するとします。

  • /CCCCCCC/xxxxxx/xxxx: 2 つのインスタンスは同じクラスタに配置されます。これは、最大距離値 2 に相当します。同じクラスタに配置されたインスタンスでは、ネットワーク レイテンシが低くなります。

  • /CCCCCCC/BBBBBB/xxxx: 2 つのインスタンスは同じラックに配置されます。これは、最大距離値 1 に相当します。同じラックに配置されたインスタンスでは、同じクラスタに配置されたインスタンスよりもネットワーク レイテンシが低くなります。

  • /CCCCCCC/BBBBBB/AAAA: 2 つのインスタンスが同じホストを共有しています。同じホストに配置されたインスタンスでは、ネットワーク レイテンシが可能な限り最小限に抑えられます。

次のステップ