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


このドキュメントでは、コンパクト プレースメント ポリシーを作成して適用することで、仮想マシン(VM)インスタンス間のネットワーク レイテンシを短縮する方法について説明します。

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

コンパクト プレースメント ポリシーは、次の場合に適用できます。

  • VM を作成または更新する。
  • 単一プロジェクトの予約を作成する。
  • VM を一括作成する。
  • インスタンス テンプレートを作成する。インスタンス テンプレートを使用して次の操作を行うと、コンパクト プレースメント ポリシーが適用されます。
    • VM を作成する。
    • マネージド インスタンス グループ(MIG)を作成または更新する。
    • 単一プロジェクトの予約を作成する。

始める前に

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

    このページのサンプルをどのように使うかに応じて、タブを選択してください。

    gcloud

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

      gcloud init
    2. デフォルトのリージョンとゾーンを設定します

    REST

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

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

      gcloud init

必要なロール

コンパクト プレースメント ポリシーを作成して VM に適用するために必要な権限を取得するには、VM またはプロジェクトに対する Compute インスタンス管理者(v1)roles/compute.instanceAdmin.v1)の IAM ロールを付与するよう管理者に依頼してください。ロールの付与の詳細については、アクセス権の管理をご覧ください。

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

必要な権限

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

  • プレースメント ポリシーを作成する: プロジェクトに対する compute.resourcePolicies.create 権限
  • 既存の VM にプレースメント ポリシーを適用する: プロジェクトに対する compute.instances.addResourcePolicies 権限
  • VM の詳細を表示する: プロジェクトに対する compute.instances.get 権限

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

制限事項

コンパクト プレースメント ポリシーには、プレースメント ポリシーの一般的な制限に加えて、次の制限もあります。

  • コンパクト プレースメント ポリシーでは、max-distanceプレビュー)を使用して VM を配置する距離を適切に制御できます。次の表に、各 max-distance 値でサポートされる VM の数とホスト メンテナンス ポリシーを示します。

    max-distance 説明 VM の最大数 サポートされるホスト メンテナンス ポリシー
    指定なし 可用性に基づいて、VM は可能な限り互いに近い位置に配置されます。 1,500 移行または終了
    3 レイテンシを抑えるため、VM は隣接するクラスタに配置されます。 1,500 移行または終了
    2 VM は隣接するラックに配置されます。隣接するクラスタに配置された VM よりもネットワーク レイテンシが低くなります。 150 終了
    1 VM は同じラックに配置されます。ネットワーク レイテンシは可能な限り最小限に抑えられます。 22 終了
  • コンパクト プレースメント ポリシーを適用できるのは、A2、A3、C2、C3、C2D、C3D、G2、H3、N2、N2D のマシンシリーズのみです。コンパクト プレースメント ポリシーの作成時に max-distance を使用する場合は、A3、G2、N2、N2D マシンシリーズにポリシーを適用することはできません。

  • 単一テナントノードを指定する VM には、コンパクト プレースメント ポリシーを適用できません。

  • 予約用にコンパクト プレースメント ポリシーを作成する場合は、予約の追加要件をご覧ください。

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

コンパクト プレースメント ポリシーを作成するには、次のいずれかの方法を使用します。

  • 推奨: 固定数を指定しない

    VM の固定数を指定していないコンパクト プレースメント ポリシーは、不特定の数の VM に適用できます。これにより、適用する VM の数に関係なくコンパクト プレースメント ポリシーが有効になります。

  • 固定数を指定する

    VM の固定数を指定しているコンパクト プレースメント ポリシーは、正確な数の VM にのみ適用できます。これにより、指定された数の VM に適用する場合にのみコンパクト プレースメント ポリシーが有効になります。

固定数を指定しない

コンパクト プレースメント ポリシーを作成するには、gcloud CLI と REST を使用します。

gcloud

コンパクト プレースメント ポリシーを作成するには、--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: ポリシーを作成するリージョン。コンパクト プレースメント ポリシーを既存の VM に適用する場合は、VM が配置されているゾーンを含むリージョンにポリシーを作成します。

必要に応じて、ネットワーク レイテンシの要件が厳しい場合に VM を配置する距離を適切に制御するには、--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

MAX_DISTANCE は、VM の最大距離の構成に置き換えます。この値は 13 の間にする必要があります。前者は、ネットワーク レイテンシを最小化するために VM を同じラックに配置するように指定します。後者は、VM を隣接するクラスタに配置するように指定します。コンパクト プレースメント ポリシーを適用する VM で指定されたマシンタイプとゾーンに応じて、次の条件が適用されます。

  • ゾーンに使用可能な容量がある場合、maxDistance 値が大きい(3 など)コンパクト プレースメント ポリシーでは、VM が互いに近い位置に配置されることがあります。

  • ゾーンの容量が不足している場合、maxDistance 値が小さい(1 など)コンパクト プレースメント ポリシーでは、1 つ以上の VM にポリシーを適用する際に失敗する可能性が高くなります。

REST

コンパクト プレースメント ポリシーを作成するには、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: プレースメント ポリシーを作成するリージョン。コンパクト プレースメント ポリシーを既存の VM に適用する場合は、VM が配置されているゾーンを含むリージョンにポリシーを作成します。

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

必要に応じて、ネットワーク レイテンシの要件が厳しい場合に VM 間の距離を適切に制御するには、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"
  }
}

MAX_DISTANCE は、VM の最大距離の構成に置き換えます。この値は 13 の間にする必要があります。前者は、ネットワーク レイテンシを最小化するために VM を同じラックに配置するように指定します。後者は、VM を隣接するクラスタに配置するように指定します。コンパクト プレースメント ポリシーを適用する VM で指定されたマシンタイプとゾーンに応じて、次の条件が適用されます。

  • ゾーンに使用可能な容量がある場合、maxDistance 値が大きい(3 など)コンパクト プレースメント ポリシーでは、VM が互いに近い位置に配置されることがあります。

  • ゾーンの容量が不足している場合、maxDistance 値が小さい(1 など)コンパクト プレースメント ポリシーでは、1 つ以上の VM にポリシーを適用する際に失敗する可能性が高くなります。

固定数を指定する

VM の固定数を指定するコンパクト プレースメント ポリシーを作成するには、gcloud CLI または REST を使用します。

gcloud

VM の固定数を指定するコンパクト プレースメント ポリシーを作成するには、--collocation=collocated フラグと --vm-count フラグを指定して gcloud compute resource-policies create group-placement コマンドを使用します。

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

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

  • POLICY_NAME: 作成するポリシーの名前。

  • REGION: ポリシーを作成するリージョン。コンパクト プレースメント ポリシーを既存の VM に適用する場合は、VM が配置されているゾーンを含むリージョンにポリシーを作成します。

  • VM_COUNT: コンパクト プレースメント ポリシーを適用できる VM の正確な数。この値は 1 から、コンパクト プレースメント ポリシーを適用できる VM の最大数までの範囲にする必要があります。

必要に応じて、ネットワーク レイテンシの要件が厳しい場合に VM 間の距離を適切に制御するには、--collocation=collocated--max-distance--vm-count フラグを指定して 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 \
    --vm-count=VM_COUNT

MAX_DISTANCE は、VM の最大距離の構成に置き換えます。この値は 13 の間にする必要があります。前者は、ネットワーク レイテンシを最小化するために VM を同じラックに配置するように指定します。後者は、VM を隣接するクラスタに配置するように指定します。コンパクト プレースメント ポリシーを適用する VM で指定されたマシンタイプとゾーンに応じて、次の条件が適用されます。

  • ゾーンに使用可能な容量がある場合、maxDistance 値が大きい(3 など)コンパクト プレースメント ポリシーでは、VM が互いに近い位置に配置されることがあります。

  • ゾーンの容量が不足している場合、maxDistance 値が小さい(1 など)コンパクト プレースメント ポリシーでは、1 つ以上の VM にポリシーを適用する際に失敗する可能性が高くなります。

REST

VM の固定数を指定するコンパクト プレースメント ポリシーを作成するには、resourcePolicies.insert メソッドPOST リクエストを送信します。リクエストの本文に、COLLOCATED に設定された collocation フィールドと、vmCount フィールドを含めます。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/resourcePolicies

{
  "name": "POLICY_NAME",
  "groupPlacementPolicy": {
    "collocation": "COLLOCATED",
    "vmCount": "VM_COUNT"
  }
}

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

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

  • REGION: プレースメント ポリシーを作成するリージョン。コンパクト プレースメント ポリシーを既存の VM に適用する場合は、VM が配置されているゾーンを含むリージョンにポリシーを作成します。

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

  • VM_COUNT: コンパクト プレースメント ポリシーを適用できる VM の正確な数。この値は 1 から、コンパクト プレースメント ポリシーを適用できる VM の最大数までの範囲にする必要があります。

必要に応じて、ネットワーク レイテンシの要件が厳しい場合に VM 間の距離を適切に制御するには、beta.resourcePolicies.insert メソッドPOST リクエストを送信します。リクエストの本文に、COLLOCATED に設定した collocation フィールド、maxDistance フィールド、vmCount フィールドを含めます。

POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/regions/REGION/resourcePolicies

{
  "name": "POLICY_NAME",
  "groupPlacementPolicy": {
    "collocation": "COLLOCATED",
    "maxDistance": "MAX_DISTANCE",
    "vmCount": "VM_COUNT"
  }
}

MAX_DISTANCE は、VM の最大距離の構成に置き換えます。この値は 13 の間にする必要があります。前者は、ネットワーク レイテンシを最小化するために VM を同じラックに配置するように指定します。後者は、VM を隣接するクラスタに配置するように指定します。コンパクト プレースメント ポリシーを適用する VM で指定されたマシンタイプとゾーンに応じて、次の条件が適用されます。

  • ゾーンに使用可能な容量がある場合、maxDistance 値が大きい(3 など)コンパクト プレースメント ポリシーでは、VM が互いに近い位置に配置されることがあります。

  • ゾーンの容量が不足している場合、maxDistance 値が小さい(1 など)コンパクト プレースメント ポリシーでは、1 つ以上の VM にポリシーを適用する際に失敗する可能性が高くなります。

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

コンパクト プレースメント ポリシーは既存の VM に適用できます。VM、インスタンス テンプレート、MIG、VM の予約を作成するときに適用することもできます。

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

プロパティを直接指定して単一プロジェクトの予約を作成するときにコンパクト プレースメント ポリシーを指定する場合は、単一プロジェクトの予約を作成するをご覧ください。

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

コンパクト プレースメント ポリシーを既存の VM に適用する

既存の VM にコンパクト プレースメント ポリシーを適用するには、gcloud CLI または REST を使用します。

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

上記以外の場合、既存の VM にコンパクト プレースメント ポリシーを適用することはできません。

gcloud

既存の VM にコンパクト プレースメント ポリシーを適用するには、--resource-policies フラグを指定して gcloud compute instances add-resource-policies コマンドを使用します。

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

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

  • VM_NAME: 既存の VM の名前。

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

  • ZONE: VM を配置するゾーン。

REST

コンパクト プレースメント ポリシーを既存の VM に適用するには、resourcePolicies フィールドを指定して instances.addResourcePolicies メソッドPOST リクエストを送信します。

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

{
  "resourcePolicies": [
    "projects/PROJECT_ID/regions/REGION/resourcePolicies/POLICY_NAME"
  ]
}

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

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

  • ZONE: VM が存在するゾーン。コンパクト プレースメント ポリシーが配置されているリージョン内である必要があります。

  • VM_NAME: 既存の VM の名前。

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

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

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

既存のコンパクト プレースメント ポリシーを指定する VM を作成するには、gcloud CLI または REST を使用します。

gcloud

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

たとえば、c2d-standard-2 マシンタイプを指定する VM を作成するには、次のコマンドを実行します。

gcloud compute instances create VM_NAME \
    --machine-type=c2d-standard-2 \
    --maintenance-policy=MAINTENANCE_POLICY \
    --resource-policies=POLICY_NAME \
    --zone=ZONE

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

  • VM_NAME: 作成する VM の名前。

  • MAINTENANCE_POLICY: VM のホスト メンテナンス ポリシー。指定したコンパクト プレースメント ポリシーが 1 または 2max-distance 値を使用する場合、指定できるのは TERMINATE のみです。それ以外の場合は、MIGRATE または TERMINATE を指定できます。

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

  • ZONE: VM を作成するゾーン。VM は、指定したコンパクト プレースメント ポリシーのリージョン内にあるゾーンにのみ作成できます。

REST

コンパクト プレースメント ポリシーを指定する VM を作成するには、resourcePolicies フィールドを指定して instances.insert メソッドPOST リクエストを送信します。

たとえば、c2d-standard-2 マシンタイプを指定する VM を作成するには、次の POST リクエストを送信します。

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

{
  "machineType": "zones/ZONE/machineTypes/c2d-standard-2",
  "name": "VM_NAME",
  "resourcePolicies": [
    "projects/PROJECT_ID/regions/REGION/resourcePolicies/POLICY_NAME"
  ],
  "scheduling": {
    "onHostMaintenance": "MAINTENANCE_POLICY"
  }
}

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

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

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

  • VM_NAME: 作成する VM の名前。

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

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

  • MAINTENANCE_POLICY: VM のホスト メンテナンス ポリシー。指定したコンパクト プレースメント ポリシーが 1 または 2max-distance 値を使用する場合、指定できるのは TERMINATE のみです。それ以外の場合は、MIGRATE または TERMINATE を指定できます。

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

コンパクト プレースメント ポリシーを指定する VM を一括作成する

既存のコンパクト プレースメント ポリシーを指定する VM を一括で作成するには、gcloud CLI または REST を使用します。

gcloud

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

たとえば、c2d-standard-2 マシンタイプと、同一のコンパクト プレースメント ポリシーを指定する VM を一括作成するには、次のコマンドを実行します。

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

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

  • COUNT: 作成する VM の数。

  • MAINTENANCE_POLICY: VM のホスト メンテナンス ポリシー。指定したコンパクト プレースメント ポリシーが 1 または 2max-distance 値を使用する場合、指定できるのは TERMINATE のみです。それ以外の場合は、MIGRATE または TERMINATE を指定できます。

  • NAME_PATTERN: 作成する VM の名前パターン。ハッシュ文字(#)を使用して一連の数字に置き換えます。たとえば、vm-# を指定すると、vm-1vm-2 といった名前の VM が、COUNT で指定された VM の最大数まで作成されます。

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

  • ZONE: VM を一括作成するゾーン。VM は、指定したコンパクト プレースメント ポリシーのリージョン内にあるゾーンにのみ作成できます。

REST

コンパクト プレースメント ポリシーを指定する VM を一括で作成するには、resourcePolicies フィールドを指定して instances.bulkInsert メソッドPOST リクエストを送信します。

たとえば、c2d-standard-2 マシンタイプと、同じコンパクト プレースメント ポリシーを指定する VM を一括作成するには、次の POST リクエストを送信します。

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

{
  "count": "COUNT",
  "machineType": "zones/ZONE/machineTypes/c2d-standard-2",
  "namePattern": "NAME_PATTERN",
  "instanceProperties": {
    "resourcePolicies": [
      "projects/PROJECT_ID/regions/REGION/resourcePolicies/POLICY_NAME"
    ],
    "scheduling": {
      "onHostMaintenance": "MAINTENANCE_POLICY"
    }
  }
}

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

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

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

  • COUNT: 作成する VM の数。

  • NAME_PATTERN: 作成する VM の名前パターン。ハッシュ文字(#)を使用して一連の数字に置き換えます。たとえば、vm-# を指定すると、vm-1vm-2 といった名前の VM が、COUNT で指定された VM の最大数まで作成されます。

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

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

  • MAINTENANCE_POLICY: VM のホスト メンテナンス ポリシー。指定したコンパクト プレースメント ポリシーが 1 または 2max-distance 値を使用する場合、指定できるのは TERMINATE のみです。それ以外の場合は、MIGRATE または TERMINATE を指定できます。

VM を一括で作成するための構成オプションや IAM ロールの詳細については、VM を一括で作成するをご覧ください。

コンパクト プレースメント ポリシーを指定するインスタンス テンプレートを作成する

既存のコンパクト プレースメント ポリシーを指定するインスタンス テンプレートを作成するには、gcloud CLI または REST を使用します。

インスタンス テンプレートを作成すると、それを使用して次のことができます。

gcloud

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

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

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

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

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

  • MAINTENANCE_POLICY: VM のホスト メンテナンス ポリシー。指定したコンパクト プレースメント ポリシーが 1 または 2max-distance 値を使用する場合、指定できるのは TERMINATE のみです。それ以外の場合は、MIGRATE または TERMINATE を指定できます。

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

REST

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

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

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

{
  "name": "INSTANCE_TEMPLATE_NAME",
  "machineType": "zones/ZONE/machineTypes/c2d-standard-2",
  "properties": {
    "resourcePolicies": {
      "POLICY_NAME"
    },
    "scheduling": {
      "onHostMaintenance": "MAINTENANCE_POLICY"
    }
  }
}

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

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

  • ZONE: マシンタイプが存在するゾーン。

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

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

  • MAINTENANCE_POLICY: VM のホスト メンテナンス ポリシー。指定したコンパクト プレースメント ポリシーが 1 または 2max-distance 値を使用する場合、指定できるのは TERMINATE のみです。それ以外の場合は、MIGRATE または TERMINATE を指定できます。

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

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

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

コンパクト プレースメント ポリシーを MIG に適用する場合は、任意の単一ゾーン分配形態でリージョン MIG を作成するか、このリージョン MIG にポリシーを適用することをおすすめします。これにより、VM を作成してリージョン MIG をスケールアウトする必要がある場合は、予約、割り当て、ハードウェア要件に基づいて VM を作成するゾーンが選択されます。

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

コンパクト プレースメント ポリシーを指定するインスタンス テンプレートを使用して MIG を作成するには、gcloud CLI または REST を使用します。

gcloud

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

たとえば、任意の単一ゾーンの分配形態を持つリージョン MIG を作成するには、次のコマンドを実行します。

gcloud compute instance-groups managed create MIG_NAME \
    --region=REGION \
    --size=SIZE \
    --target-distribution-shape=any-single-zone \
    --template=INSTANCE_TEMPLATE_NAME

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

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

  • REGION: MIG を作成するリージョン。コンパクト プレースメント ポリシーが存在するリージョンと一致している必要があります。

  • SIZE: MIG のサイズ。

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

REST

コンパクト プレースメント ポリシーを指定するインスタンス テンプレートを使用して MIG を作成するには、instanceTemplate フィールドを既存のテンプレートの名前に設定して、instanceGroupManagers.insert メソッドまたは regionInstanceGroupManagers.insert メソッドに POST リクエストを送信します。

たとえば、デフォルトの VM プロパティと任意の単一ゾーンの分配形態でリージョン MIG を作成するには、次の POST リクエストを送信します。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/instanceGroupManagers

{
  "name": "MIG_NAME",
  "instanceTemplate": "global/instanceTemplates/INSTANCE_TEMPLATE_NAME",
  "distributionPolicy": {
    "targetShape": "ANY_SINGLE_ZONE"
  },
  "targetSize": SIZE
}

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

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

  • REGION: MIG を作成するリージョン。コンパクト プレースメント ポリシーが存在するリージョンと一致している必要があります。

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

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

  • SIZE: MIG のサイズ。

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

既存の MIG にコンパクト プレースメント ポリシーを適用する

同じプレースメント ポリシーを指定するインスタンス テンプレートを使用して、既存の MIG にコンパクト プレースメント ポリシーを適用するには、gcloud CLI または REST を使用します。

gcloud

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

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

gcloud compute instance-groups managed rolling-action start-update MIG_NAME \
    --region=REGION \
    --type=proactive \
    --version=template=INSTANCE_TEMPLATE_NAME

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

  • MIG_NAME: 既存の MIG の名前。

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

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

REST

コンパクト プレースメント ポリシーを指定するインスタンス テンプレートを使用するように MIG を更新し、テンプレートのプロパティとプレースメント ポリシーを MIG 内の既存の VM に自動的に適用するには、instanceTemplate フィールドを指定して instanceGroupManagers.insert または regionInstanceGroupManagers.insertPATCH リクエストを送信します。

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

PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/instanceGroupManagers/MIG_NAME

{
  "instanceTemplate": "global/instanceTemplates/INSTANCE_TEMPLATE_NAME",
  "updatePolicy": {
    "type": "PROACTIVE"
  }
}

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

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

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

  • MIG_NAME: 既存の MIG の名前。

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

MIG 内の VM を更新するための構成オプションと IAM ロールの詳細については、MIG 内の VM に新しい構成を更新して適用するをご覧ください。

VM の物理的な位置を確認する

VM にコンパクト プレースメント ポリシーを適用すると、同じポリシーを指定する他の VM との関連でコンパクト プレースメント ポリシーが物理的な位置にどのように影響したかを確認できます。これにより、コンパクト プレースメント ポリシーが VM に正しく適用されたかどうかを判断し、どの VM が互いに最も近いかをマッピングできます。

プレースメント ポリシーを指定する VM の物理的な場所を確認するには、gcloud CLI または REST を使用します。

gcloud

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

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

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

  • VM_NAME: 既存の VM の名前。

  • ZONE: VM が配置されているゾーン。

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

VM-Position

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

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

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

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

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

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

REST

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

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

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

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

  • ZONE: VM が配置されているゾーン。

  • VM_NAME: プレースメント ポリシーを指定する既存の VM の名前。

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

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

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

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

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

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

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

次のステップ