このドキュメントでは、仮想マシン(VM)を一括作成するときにインスタンスの柔軟性を構成する方法について説明します。インスタンスの柔軟性により、複数のマシンタイプを指定し、優先度でランク付けして、各選択の最小 CPU プラットフォームとディスク設定をオーバーライドできます。これにより、Compute Engine はリージョンの容量と割り当ての可用性に基づいて VM をプロビジョニングできます。
一括作成された VM のインスタンスの柔軟性については、一括作成された VM のインスタンスの柔軟性についてをご覧ください。
始める前に
- 作成する予定の VM と関連リソースについては、十分な割り当てがあることを確認してください。
- Spot VM を一括作成する場合は、VM を作成する前にリソースの可用性を確認してください。リソースの可用性を確認すると、VM の作成時にリソース可用性エラーが発生する可能性を低減できます。手順については、Spot VM のリソースの可用性を確認するをご覧ください。
-
まだ設定していない場合は、認証を設定します。認証では、 Google Cloud サービスと API にアクセスするための ID が確認されます。ローカル開発環境からコードまたはサンプルを実行するには、次のいずれかのオプションを選択して Compute Engine に対する認証を行います。
このページのサンプルをどのように使うかに応じて、タブを選択してください。
gcloud
-
Google Cloud CLI をインストールし、 フェデレーション ID を使用して gcloud CLI にログインします。ログイン後、次のコマンドを実行して Google Cloud CLI を初期化します。
gcloud init
-
- デフォルトのリージョンとゾーンを設定します。
REST
このページの REST API サンプルをローカル開発環境で使用するには、gcloud CLI に指定した認証情報を使用します。
Google Cloud CLI をインストールし、 フェデレーション ID を使用して gcloud CLI にログインします。
詳細については、 Google Cloud 認証ドキュメントの REST を使用して認証するをご覧ください。
必要なロール
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
単一のインスタンス選択で VM を一括作成するには、--instance-selection-machine-types フラグを指定して gcloud compute instances bulk create コマンドを使用します。
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_1、MACHINE_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 で、regionInstances.bulkInsert メソッドに POST リクエストを送信します。リクエスト本文に、マシンタイプを一覧表示する 1 つの instanceSelections エントリを含む 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_1、MACHINE_TYPE_2: VM に使用するマシンタイプIMAGE_PROJECT: イメージを含むプロジェクトIMAGE: 使用するイメージまたはイメージ ファミリーの名前PROJECT_ID: プロジェクト IDREGION: 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 コマンドを使用し、--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_1、MACHINE_TYPE_2: 最初のインスタンス選択のマシンタイプMACHINE_TYPE_3、MACHINE_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 で、regionInstances.bulkInsert メソッドに POST リクエストを送信します。リクエストの本文に 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_1、MACHINE_TYPE_2: 最初のインスタンス選択のマシンタイプMACHINE_TYPE_3、MACHINE_TYPE_4: 2 番目のインスタンス選択のマシンタイプIMAGE_PROJECT: イメージを含むプロジェクトIMAGE: 使用するイメージまたはイメージ ファミリーの名前PROJECT_ID: プロジェクト IDREGION: 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
}
}
}
}
複数のマシンタイプ、最小 CPU プラットフォーム、ディスクのオーバーライドを使用して VM を作成する
マシンタイプとランクを指定するだけでなく、各インスタンス選択の instanceProperties で最小 CPU プラットフォームをオーバーライドし、ディスク定義をオーバーライドまたは追加できます。たとえば、instanceProperties で Persistent Disk を指定し、N4 マシンシリーズを選択した場合は、サポートされている Google Cloud Hyperdisk タイプでブートディスクをオーバーライドする必要があります。
サポートされているディスクタイプと Compute Engine でオーバーライドが適用される方法の詳細については、次のリソースをご覧ください。
複数のマシンタイプ、最小 CPU プラットフォーム、ディスクのオーバーライドを使用して VM を一括作成するには、次のいずれかのオプションを選択します。
gcloud
複数のマシンタイプ、最小 CPU プラットフォーム、ディスクのオーバーライドを使用して VM を一括で作成するには、--instance-flexibility-policy フラグを指定して gcloud compute instances bulk create コマンドを使用します。instanceProperties のデフォルトのブートディスクをオーバーライドするには、--boot-disk-device-name フラグも指定し、インスタンスの選択で同じ deviceName を指定します。
gcloud compute instances bulk create \
--name-pattern=NAME_PATTERN \
--region=REGION \
--count=COUNT \
--boot-disk-device-name=BOOT_DISK_DEVICE_NAME \
--instance-flexibility-policy='{"instanceSelections":
{"INSTANCE_SELECTION_1":{"rank":RANK_1,"machineTypes":["MACHINE_TYPE_1","MACHINE_TYPE_2"],"minCpuPlatform":"MIN_CPU_PLATFORM_1","disks":[{"deviceName":"BOOT_DISK_DEVICE_NAME_1","boot":true,"initializeParams":{"diskType":"DISK_TYPE_1","diskSizeGb":DISK_SIZE_1,"sourceImage":"projects/IMAGE_PROJECT_1/global/images/IMAGE_1"}}]},
"INSTANCE_SELECTION_2":{"rank":RANK_2,"machineTypes":["MACHINE_TYPE_3"],"minCpuPlatform":"MIN_CPU_PLATFORM_2","disks":[{"deviceName":"BOOT_DISK_DEVICE_NAME_2","boot":true,"initializeParams":{"diskType":"DISK_TYPE_2","diskSizeGb":DISK_SIZE_2,"sourceImage":"projects/IMAGE_PROJECT_2/global/images/IMAGE_2"}}]}}}'
または、YAML ファイルまたは JSON ファイルを使用してインスタンスの柔軟性ポリシーを構成するには、--instance-flexibility-policy フラグではなく --flags-file フラグを使用します。
gcloud compute instances bulk create \
--name-pattern=NAME_PATTERN \
--region=REGION \
--count=COUNT \
--boot-disk-device-name=BOOT_DISK_DEVICE_NAME \
--flags-file=FILE_NAME.yaml
次のように置き換えます。
COUNT: 作成する VM の数NAME_PATTERN: VM の名前パターンREGION: VM を作成するリージョンBOOT_DISK_DEVICE_NAME:instancePropertiesのデフォルトのブートディスクのデバイス名INSTANCE_SELECTION_1、INSTANCE_SELECTION_2: インスタンス選択の名前RANK_1、RANK_2: 各インスタンス選択の優先順位を表す任意の数値。値が小さいほど優先度が高くなります。MACHINE_TYPE_1、MACHINE_TYPE_2: 最初のインスタンス選択のマシンタイプMACHINE_TYPE_3: 2 番目のインスタンス選択のマシンタイプMIN_CPU_PLATFORM_1、MIN_CPU_PLATFORM_2: 各インスタンス選択の VM の省略可能な最小 CPU プラットフォームBOOT_DISK_DEVICE_NAME_1、BOOT_DISK_DEVICE_NAME_2: 各インスタンス選択のブートディスクのデバイス名。デフォルトのブートディスクをオーバーライドするには、BOOT_DISK_DEVICE_NAMEと同じ名前を指定します。DISK_TYPE_1、DISK_TYPE_2: ディスクのオーバーライドのディスクタイプ(pd-ssd、hyperdisk-balancedなど)DISK_SIZE_1、DISK_SIZE_2: ディスクのオーバーライドのディスクサイズIMAGE_PROJECT_1、IMAGE_PROJECT_2: ディスクのオーバーライドのイメージを含むプロジェクトIMAGE_1、IMAGE_2: ディスクのオーバーライドのイメージまたはイメージ ファミリーの名前FILE_NAME.yaml:--instance-flexibility-policy構成を含む YAML ファイルまたは JSON ファイルの名前
例
次の例では、最小 CPU プラットフォームを指定し、デフォルトのブートディスクをオーバーライドして、追加のディスクをアタッチする 2 つのインスタンス選択を使用して 10 個の VM を作成します。
gcloud compute instances bulk create \
--name-pattern=test-bulk-# \
--region=us-central1 \
--count=10 \
--boot-disk-device-name=boot-disk \
--instance-flexibility-policy='{"instanceSelections":
{"selection-1":{"machineTypes":["n2-standard-8","c2-standard-8"],"minCpuPlatform":"Intel Cascade Lake","disks":[{"type":"PERSISTENT","deviceName":"boot-disk","boot":true,"initializeParams":{"diskType":"pd-ssd","diskSizeGb":50,"sourceImage":"projects/debian-cloud/global/images/family/debian-12"}},{"type":"SCRATCH","initializeParams":{"diskType":"local-ssd"}}]},
"selection-2":{"machineTypes":["c4a-standard-8"],"disks":[{"type":"PERSISTENT","deviceName":"boot-disk","boot":true,"initializeParams":{"diskType":"hyperdisk-balanced","diskSizeGb":50,"sourceImage":"projects/debian-cloud/global/images/family/debian-12-arm64"}},{"type":"PERSISTENT","deviceName":"data-disk","initializeParams":{"diskType":"hyperdisk-balanced","diskSizeGb":128}}]}}}'
また、--flags-file フラグを使用する場合は、YAML ファイルで同じインスタンスの柔軟性ポリシーを指定できます。
--instance-flexibility-policy:
instanceSelections:
selection-1:
machineTypes:
- n2-standard-8
- c2-standard-8
minCpuPlatform: Intel Cascade Lake
disks:
- type: PERSISTENT
deviceName: boot-disk
boot: true
initializeParams:
diskType: pd-ssd
diskSizeGb: 50
sourceImage: projects/debian-cloud/global/images/family/debian-12
- type: SCRATCH
initializeParams:
diskType: local-ssd
selection-2:
machineTypes:
- c4a-standard-8
disks:
- type: PERSISTENT
deviceName: boot-disk
boot: true
initializeParams:
diskType: hyperdisk-balanced
diskSizeGb: 50
sourceImage: projects/debian-cloud/global/images/family/debian-12-arm64
- type: PERSISTENT
deviceName: data-disk
initializeParams:
diskType: hyperdisk-balanced
diskSizeGb: 128
REST
Compute Engine API で、regionInstances.bulkInsert メソッドに POST リクエストを送信します。instanceFlexibilityPolicy の各 instanceSelections エントリで、instanceProperties.minCpuPlatform をオーバーライドする minCpuPlatform フィールドを含め、instanceProperties.disks をオーバーライドまたは追加する disks フィールドを含めます。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/instances/bulkInsert
{
"count": COUNT,
"namePattern": "NAME_PATTERN",
"instanceProperties": {
"disks": [
{
"boot": true,
"deviceName": "boot-disk",
"initializeParams": {
"sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE"
}
}
],
"networkInterfaces": [{}]
},
"instanceFlexibilityPolicy": {
"instanceSelections": {
"INSTANCE_SELECTION_1": {
"machineTypes": [
"MACHINE_TYPE_1",
"MACHINE_TYPE_2"
],
"minCpuPlatform": "MIN_CPU_PLATFORM_1",
"disks": [
{
"type": "PERSISTENT",
"deviceName": "boot-disk",
"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"
],
"minCpuPlatform": "MIN_CPU_PLATFORM_2",
"disks": [
{
"type": "PERSISTENT",
"deviceName": "boot-disk",
"initializeParams": {
"diskType": "hyperdisk-balanced",
"diskSizeGb": 50,
"sourceImage": "projects/IMAGE_PROJECT_2/global/images/IMAGE_2"
},
"boot": true
},
{
"type": "PERSISTENT",
"deviceName": "data-disk",
"initializeParams": {
"diskType": "hyperdisk-balanced",
"diskSizeGb": 128,
"sourceImage": "projects/IMAGE_PROJECT_3/global/images/IMAGE_3"
}
}
]
}
}
}
}
次のように置き換えます。
COUNT: 作成する VM の数NAME_PATTERN: VM の命名パターンINSTANCE_SELECTION_1: 最初のインスタンス選択の名前INSTANCE_SELECTION_2: 2 番目のインスタンス選択の名前MACHINE_TYPE_1、MACHINE_TYPE_2: 最初のインスタンス選択のマシンタイプMACHINE_TYPE_3: 2 番目のインスタンス選択のマシンタイプMIN_CPU_PLATFORM_1、MIN_CPU_PLATFORM_2: 各インスタンス選択の VM のオプションの最小 CPU プラットフォームIMAGE_PROJECT:instancePropertiesのデフォルトのブートイメージを含むプロジェクトIMAGE:instancePropertiesのデフォルトのブートイメージまたはイメージ ファミリーの名前IMAGE_PROJECT_1、IMAGE_PROJECT_2、IMAGE_PROJECT_3: ディスクのオーバーライドのイメージを含むプロジェクトIMAGE_1、IMAGE_2、IMAGE_3: ディスクのオーバーライドのイメージの名前PROJECT_ID: プロジェクト IDREGION: VM を作成するリージョン
例
次の例では、最小 CPU プラットフォームを指定し、デフォルトのブートディスクをオーバーライドして、追加のディスクをアタッチする 2 つのインスタンス選択を使用して 10 個の 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,
"deviceName": "boot-disk",
"initializeParams": {
"sourceImage": "projects/debian-cloud/global/images/family/debian-12"
}
}
],
"networkInterfaces": [{}]
},
"instanceFlexibilityPolicy": {
"instanceSelections": {
"selection-1": {
"machineTypes": [
"n2-standard-8",
"c2-standard-8"
],
"minCpuPlatform": "Intel Cascade Lake",
"disks": [
{
"type": "PERSISTENT",
"deviceName": "boot-disk",
"initializeParams": {
"diskType": "pd-ssd",
"diskSizeGb": 50,
"sourceImage": "projects/debian-cloud/global/images/family/debian-12"
},
"boot": true
},
{
"type": "SCRATCH",
"initializeParams": {
"diskType": "local-ssd"
}
}
]
},
"selection-2": {
"machineTypes": [
"c4a-standard-8"
],
"disks": [
{
"type": "PERSISTENT",
"deviceName": "boot-disk",
"initializeParams": {
"diskType": "hyperdisk-balanced",
"diskSizeGb": 50,
"sourceImage": "projects/debian-cloud/global/images/family/debian-12-arm64"
},
"boot": true
},
{
"type": "PERSISTENT",
"deviceName": "data-disk",
"initializeParams": {
"diskType": "hyperdisk-balanced",
"diskSizeGb": 128
}
}
]
}
}
}
}