スプレッド プレースメント ポリシーを作成して VM に適用する


このドキュメントでは、信頼性を向上させるために、スプレッド プレースメント ポリシーを作成して 1 つ以上の仮想マシン(VM)インスタンスに適用する方法について説明します。

スプレッド プレースメント ポリシーでは、VM を異なるアベイラビリティ ドメインに配置することで、VM を物理的に互いに離して配置することを指定します。スプレッド プレースメント ポリシーを使用して、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 権限

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

制限事項

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

  • スプレッド プレースメント ポリシーは、最大 8 台の VM にのみ適用できます。

  • VM の予約にスプレッド プレースメント ポリシーを適用することはできません。

  • VM の物理的な場所を確認することはできません。

スプレッド プレースメント ポリシーを作成する

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

gcloud

スプレッド プレースメント ポリシーを作成するには、--availability-domain-count フラグを指定して gcloud compute resource-policies create group-placement コマンドを使用します。

gcloud compute resource-policies create group-placement POLICY_NAME \
    --availability-domain-count=DOMAIN_COUNT \
    --region=REGION

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

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

  • DOMAIN_COUNT: VM を配置するアベイラビリティ ドメインの個別の数。各ドメインには、独自の独立した電源、冷却装置、ネットワーキング ソースがあります。値は 28 にする必要があります。この値は、スプレッド プレースメント ポリシーを適用できる VM の最大数です。

  • REGION: ポリシーを作成するリージョン。

REST

スプレッド プレースメント ポリシーを作成するには、resourcePolicies.insert メソッドPOST リクエストを送信します。リクエスト本文に、availabilityDomainCount フィールドを含めます。

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

{
  "name": "POLICY_NAME",
  "groupPlacementPolicy": {
    "availabilityDomainCount": DOMAIN_COUNT
  }
}

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

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

  • REGION: ポリシーを作成するリージョン。

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

  • DOMAIN_COUNT: VM を配置するアベイラビリティ ドメインの個別の数。各ドメインには、独自の独立した電源、冷却装置、ネットワーキング ソースがあります。値は 28 にする必要があります。この値は、スプレッド プレースメント ポリシーを適用できる VM の最大数です。

スプレッド プレースメント ポリシーの適用

スプレッド プレースメント ポリシーは、既存の VM に適用するか、VM、インスタンス テンプレート、MIG を作成するときに適用できます。

スプレッド プレースメント ポリシーを指定する Compute Engine リソースを作成するか、既存の VM にスプレッド プレースメント ポリシーを適用するには、次のいずれかの方法を選択します。

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

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

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 に適用するには、instances.addResourcePolicies メソッドPOST リクエストを送信します。リクエスト本文に、resourcePolicies フィールドを含めます。

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 コマンドを使用します。

たとえば、デフォルトのプロパティがあり、スプレッド プレースメント ポリシーを指定する VM を作成するには、次のコマンドを実行します。

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

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

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

  • POLICY_NAME: 既存のスプレッド プレースメント ポリシーの名前。

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

REST

スプレッド プレースメント ポリシーを指定する VM を作成するには、instances.insert メソッドPOST リクエストを行います。リクエスト本文に、resourcePolicies フィールドを含めます。

たとえば、デフォルトのプロパティがあり、スプレッド プレースメント ポリシーを指定する VM を作成するには、次の POST リクエストを行います。

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

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

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

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

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

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

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

  • POLICY_NAME: 既存のスプレッド プレースメント ポリシーの名前。

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

スプレッド プレースメント ポリシーを指定して VM を一括作成する

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

gcloud

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

たとえば、デフォルトのプロパティがあり、同じスプレッド プレースメント ポリシーを指定するすべての VM を一括で作成するには、次のコマンドを実行します。

gcloud compute instances bulk create \
    --async \
    --count=COUNT \
    --name-pattern=NAME_PATTERN \
    --resource-policies=POLICY_NAME \
    --zone=ZONE

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

  • COUNT: 作成する VM の数。

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

  • POLICY_NAME: 既存のスプレッド プレースメント ポリシーの名前。

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

REST

スプレッド プレースメント ポリシーを指定する VM を一括作成するには、instances.bulkInsert メソッドPOST を行います。リクエスト本文に、resourcePolicies フィールドを含めます。

たとえば、デフォルトのプロパティがあり、同じスプレッド プレースメント ポリシーを指定するすべての VM を一括で作成するには、次の POST リクエストを行います。

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

{
  "count": "COUNT",
  "namePattern": "NAME_PATTERN",
  "instanceProperties": {
    "resourcePolicies": [
      "projects/PROJECT_ID/regions/REGION/resourcePolicies/POLICY_NAME"
    ]
  }
}

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

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

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

  • COUNT: 作成する VM の数。

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

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

  • POLICY_NAME: 既存のスプレッド プレースメント ポリシーの名前。

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

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

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

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

gcloud

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

たとえば、デフォルトの VM プロパティがあり、スプレッド プレースメント ポリシーを含むグローバル インスタンス テンプレートを作成するには、次のコマンドを実行します。

gcloud compute instance-templates create INSTANCE_TEMPLATE_NAME \
    --resource-policies=POLICY_NAME

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

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

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

  • POLICY_NAME: 既存のスプレッド プレースメント ポリシーの名前。

REST

スプレッド プレースメント ポリシーを指定するインスタンス テンプレートを作成するには、instanceTemplates.insert メソッドPOST リクエストを行います。リクエスト本文に、resourcePolicies フィールドを含めます。

たとえば、デフォルトの VM プロパティがあり、スプレッド プレースメント ポリシーを指定するグローバル インスタンス テンプレートを作成するには、次の POST リクエストを行います。

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

{
  "name": "INSTANCE_TEMPLATE_NAME",
  "properties": {
    "resourcePolicies": {
      "POLICY_NAME"
    }
  }
}

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

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

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

  • POLICY_NAME: 既存のスプレッド プレースメント ポリシーの名前。

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

MIG 内の VM にスプレッド プレースメント ポリシーを適用する

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

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

スプレッド プレースメント ポリシーを指定する MIG を作成する

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

gcloud

スプレッド プレースメント ポリシーを指定するインスタンス テンプレートを使用して MIG を作成するには、既存のテンプレートの名前に設定された --template フラグを指定して gcloud compute instance-groups managed create コマンドを使用します。

たとえば、デフォルトの VM プロパティと任意の単一ゾーンの分布形状でリージョン 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 を作成するには、instanceGroupManagers.insert メソッドまたは regionInstanceGroupManagers.insert メソッドに POST リクエストを行います。リクエストの本文に instanceTemplate フィールドを含め、既存のテンプレートの名前に設定します。

たとえば、デフォルトの 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",
  "targetSize": SIZE,
  "distributionPolicy": {
    "targetShape": "ANY_SINGLE_ZONE"
  }
}

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

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

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

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

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

  • SIZE: MIG のサイズ。

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

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

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

gcloud

スプレッド プレースメント ポリシーを指定するインスタンス テンプレートを使用するように MIG を更新するには、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 に自動的に適用するには、instanceGroupManagers.insert または regionInstanceGroupManagers.insert メソッドに PATCH リクエストを行います。

たとえば、スプレッド プレースメント ポリシーを指定するインスタンス テンプレートを使用するようにリージョン 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 に新しい構成を更新して適用するをご覧ください。

次のステップ