インスタンスの柔軟性を使用して VM を一括作成する

このドキュメントでは、仮想マシン(VM)を一括作成するときにインスタンスの柔軟性を指定する方法について説明します。この指定を行う場合は、VM に適したマシンタイプのリストを指定します。Compute Engine は、リージョンの容量と割り当ての可用性に基づいて、指定されたマシンタイプのいずれかを使用して VM をプロビジョニングします。

一括作成された VM のインスタンスの柔軟性について詳しくは、 一括作成された VM のインスタンスの柔軟性について をご覧ください。

始める前に

必要なロール

VM の一括作成に必要な権限を取得するには、プロジェクトに対する Compute インスタンス管理者(v1)roles/compute.instanceAdmin.v1)の IAM ロールを付与するよう管理者に依頼します。ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。

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

必要な権限

VM を一括作成するには、次の権限が必要です。

  • プロジェクトに対する compute.instances.create
  • カスタム イメージを使用して VM を作成する: イメージに対する compute.images.useReadOnly
  • スナップショットを使用して VM を作成する: スナップショットに対する compute.snapshots.useReadOnly
  • インスタンス テンプレートを使用して VM を作成する: インスタンス テンプレートに対する compute.instanceTemplates.useReadOnly
  • VM のサブネットを指定する: プロジェクトまたは選択したサブネットに対する compute.subnetworks.use
  • VM の静的 IP アドレスを指定する: プロジェクトに対する compute.addresses.use
  • VPC ネットワークの使用時に VM に外部 IP アドレスを割り当てる: プロジェクトまたは選択したサブネットに対する compute.subnetworks.useExternalIp
  • VM にレガシー ネットワークを割り当てる: プロジェクトに対する compute.networks.use
  • レガシー ネットワークを使用する際に VM に外部 IP アドレスを割り当てる: プロジェクトに対する compute.networks.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

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

優先度が同じ複数のマシンタイプを使用して VM を作成する

ワークロードが複数の異なるマシンタイプで動作できる場合は、1 つのインスタンス選択で互換性のあるすべてのマシンタイプのリストを指定できます。次の例は、優先度が同じ複数のマシンタイプを指定する方法を示しています。

gcloud

1 つのインスタンス選択で VM を一括作成するには、gcloud compute instances bulk create command--instance-selection-machine-types フラグを指定して使用します。

gcloud compute instances bulk create \
    --name-pattern=NAME_PATTERN \
    --region=REGION \
    --count=COUNT \
    --instance-selection-machine-types=MACHINE_TYPE_1,MACHINE_TYPE_2

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

  • COUNT: 作成する VM の数
  • NAME_PATTERN: VM の名前パターン
  • MACHINE_TYPE_1MACHINE_TYPE_2: VM に使用するマシンタイプ
  • REGION: VM を作成するリージョン

gcloud compute instances bulk create \
    --name-pattern=test-bulk-# \
    --region=us-central1 \
    --count=10 \
    --instance-selection-machine-types=c3-standard-8,n2-standard-8,c2-standard-8

REST

Compute Engine API で、POST リクエストを regionInstances.bulkInsert メソッドに送信します。 リクエストの本文に、マシンタイプを一覧表示する instanceSelections エントリを 1 つ含む instanceFlexibilityPolicy を含めます。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/instances/bulkInsert
{
  "count": COUNT,
  "namePattern": "NAME_PATTERN",
  "instanceProperties": {
    "disks": [
      {
        "boot": true,
        "initializeParams": {
          "sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE"
        }
      }
    ],
    "networkInterfaces": [{}]
  },
  "instanceFlexibilityPolicy": {
    "instanceSelections": {
      "selection-1": {
        "machineTypes": [
          "MACHINE_TYPE_1",
          "MACHINE_TYPE_2"
        ]
      }
    }
  }
}

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

  • COUNT: 作成する VM の数
  • NAME_PATTERN: VM の名前パターン
  • MACHINE_TYPE_1MACHINE_TYPE_2: VM に使用するマシンタイプ
  • IMAGE_PROJECT: イメージを含むプロジェクト
  • IMAGE: 使用するイメージまたはイメージ ファミリーの名前
  • PROJECT_ID: プロジェクト ID
  • REGION: VM を作成するリージョン

POST https://compute.googleapis.com/compute/v1/projects/my-project/regions/us-central1/instances/bulkInsert
{
  "count": 10,
  "namePattern": "test-bulk-#",
  "instanceProperties": {
    "disks": [
      {
        "boot": true,
        "initializeParams": {
          "sourceImage": "projects/debian-cloud/global/images/debian-12"
        }
      }
    ],
    "networkInterfaces": [{}]
  },
  "instanceFlexibilityPolicy": {
    "instanceSelections": {
      "selection-1": {
        "machineTypes": [
          "c3-standard-8",
          "n2-standard-8",
          "c2-standard-8"
        ]
      }
    }
  }
}

優先度でランク付けされた複数のマシンタイプを使用して VM を作成する

Compute Engine でマシンタイプを特定の順序で選択する場合は、複数のインスタンス選択を構成できます。各インスタンス選択には、マシンタイプのリストとランクが含まれます。ランクは、マシンタイプの優先度を定義する整数です。ランクが低いほど優先度が高くなります。 Compute Engine は、優先度の高い(ランクの低い)マシンタイプを使用して VM の作成を試みます。これらのマシンタイプが使用できない場合、Compute Engine は優先度の低い(ランクの高い)マシンタイプを使用します。

次の例は、ランクを使用して複数のインスタンス選択を指定する方法を示しています。

gcloud

複数のインスタンス選択で VM を一括作成するには、gcloud compute instances bulk create command を使用し、--instance-selection フラグを複数回指定します。

gcloud compute instances bulk create \
    --name-pattern=NAME_PATTERN \
    --region=REGION \
    --count=COUNT \
    --instance-selection "name=INSTANCE_SELECTION_1,rank=0,machine-type=MACHINE_TYPE_1,machine-type=MACHINE_TYPE_2" \
    --instance-selection "name=INSTANCE_SELECTION_2,rank=1,machine-type=MACHINE_TYPE_3,machine-type=MACHINE_TYPE_4"

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

  • COUNT: 作成する VM の数
  • NAME_PATTERN: VM の名前パターン
  • INSTANCE_SELECTION_1: 最初のインスタンス選択の名前
  • INSTANCE_SELECTION_2: 2 番目のインスタンス選択の名前
  • MACHINE_TYPE_1MACHINE_TYPE_2: 最初のインスタンス選択のマシンタイプ
  • MACHINE_TYPE_3MACHINE_TYPE_4: 2 番目のインスタンス選択のマシンタイプ
  • REGION: VM を作成するリージョン

gcloud compute instances bulk create \
    --name-pattern=test-bulk-# \
    --region=us-central1 \
    --count=10 \
    --instance-selection "name=most-preferred,rank=0,machine-type=c3-standard-16,machine-type=n2-standard-16, machine-type=c2-standard-16" \
    --instance-selection "name=least-preferred,rank=1,machine-type=c3-standard-8,machine-type=n2-standard-8, machine-type=c2-standard-8"

REST

Compute Engine API で、POST リクエストを regionInstances.bulkInsert メソッドに送信します。 リクエストの本文に instanceFlexibilityPolicy を含め、instanceSelections に複数のエントリを指定します。各エントリには、マシンタイプのリストと rank を指定します。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/instances/bulkInsert
{
  "count": COUNT,
  "namePattern": "NAME_PATTERN",
  "instanceProperties": {
    "disks": [
      {
        "boot": true,
        "initializeParams": {
          "sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE"
        }
      }
    ],
    "networkInterfaces": [{}]
  },
  "instanceFlexibilityPolicy": {
    "instanceSelections": {
      "INSTANCE_SELECTION_1": {
        "machineTypes": [
          "MACHINE_TYPE_1",
          "MACHINE_TYPE_2"
        ],
        "rank": 1
      },
      "INSTANCE_SELECTION_2": {
        "machineTypes": [
          "MACHINE_TYPE_3",
          "MACHINE_TYPE_4"
        ],
        "rank": 2
      }
    }
  }
}

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

  • COUNT: 作成する VM の数
  • NAME_PATTERN: VM の命名パターン
  • INSTANCE_SELECTION_1: 最初のインスタンス選択の名前
  • INSTANCE_SELECTION_2: 2 番目のインスタンス選択の名前
  • MACHINE_TYPE_1MACHINE_TYPE_2: 最初のインスタンス選択のマシンタイプ
  • MACHINE_TYPE_3MACHINE_TYPE_4: 2 番目のインスタンス選択のマシンタイプ
  • IMAGE_PROJECT: イメージを含むプロジェクト
  • IMAGE: 使用するイメージまたはイメージ ファミリーの名前
  • PROJECT_ID: プロジェクト ID
  • REGION: VM を作成するリージョン

POST https://compute.googleapis.com/compute/v1/projects/my-project/regions/us-central1/instances/bulkInsert
{
  "count": 10,
  "namePattern": "test-bulk-#",
  "instanceProperties": {
    "disks": [
      {
        "boot": true,
        "initializeParams": {
          "sourceImage": "projects/debian-cloud/global/images/debian-12"
        }
      }
    ],
    "networkInterfaces": [{}]
  },
  "instanceFlexibilityPolicy": {
    "instanceSelections": {
      "most-preferred": {
        "machineTypes": [
          "c3-standard-16",
          "c2-standard-16"
        ],
        "rank": 1
      },
      "least-preferred": {
        "machineTypes": [
          "n2-standard-16",
          "c3-standard-8",
          "n2-standard-8",
          "c2-standard-8"
        ],
        "rank": 2
      }
    }
  }
}

インスタンス選択でディスクのオーバーライドを指定する

デフォルトでは、一括リクエストによって作成された VM は、instanceProperties のディスク構成を使用します。ただし、インスタンス選択内でディスク構成を指定できます。インスタンス選択でディスクを指定すると、そのインスタンス選択を使用する VM の instanceProperties のディスク構成がオーバーライドされます。

次の例は、インスタンス選択でディスクを指定する方法を示しています。

REST

Compute Engine API で、POST リクエストを regionInstances.bulkInsert メソッドに送信します。 リクエストの本文に instanceFlexibilityPolicy を含め、 instanceSelections エントリに disks フィールドを含めて instanceProperties.disks をオーバーライドします。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/instances/bulkInsert
{
  "count": COUNT,
  "namePattern": "NAME_PATTERN",
  "instanceProperties": {
    "disks": [
      {
        "boot": true,
        "initializeParams": {
          "sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE"
        }
      }
    ],
    "networkInterfaces": [{}]
  },
  "instanceFlexibilityPolicy": {
    "instanceSelections": {
      "INSTANCE_SELECTION_1": {
        "machineTypes": [
          "MACHINE_TYPE_1",
          "MACHINE_TYPE_2"
        ],
        "disks": [
          {
            "type": "PERSISTENT",
            "initializeParams": {
              "diskType": "pd-ssd",
              "diskSizeGb": 50,
              "sourceImage": "projects/IMAGE_PROJECT_1/global/images/IMAGE_1"
            },
            "boot": true
          },
          {
            "type": "SCRATCH",
            "initializeParams": {
              "diskType": "local-ssd"
            }
          }
        ]
      },
      "INSTANCE_SELECTION_2": {
        "machineTypes": [
          "MACHINE_TYPE_3"
        ],
        "disks": [
          {
            "type": "PERSISTENT",
            "initializeParams": {
              "diskType": "hyperdisk-balanced",
              "diskSizeGb": 50,
              "sourceImage": "projects/IMAGE_PROJECT_2/global/images/IMAGE_2"
            },
            "boot": true
          },
          {
            "type": "PERSISTENT",
            "initializeParams": {
              "diskType": "hyperdisk-balanced",
              "diskSizeGb": 128,
              "sourceImage": "projects/IMAGE_PROJECT_3/global/images/IMAGE_1"
            }
          }
        ]
      }
    }
  }
}

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

  • COUNT: 作成する VM の数
  • NAME_PATTERN: VM の命名パターン
  • INSTANCE_SELECTION_1: 最初のインスタンス選択の名前
  • INSTANCE_SELECTION_2: 2 番目のインスタンス選択の名前
  • MACHINE_TYPE_1MACHINE_TYPE_2MACHINE_TYPE_3: VM に使用するマシンタイプ
  • IMAGE_PROJECT: イメージを含むプロジェクト
  • IMAGE: 使用するイメージまたはイメージ ファミリーの名前
  • PROJECT_ID: プロジェクト ID
  • REGION: VM を作成するリージョン