このドキュメントでは、仮想マシン(VM)を一括作成するときにインスタンスの柔軟性を指定する方法について説明します。この指定を行う場合は、VM に適したマシンタイプのリストを指定します。Compute Engine は、リージョンの容量と割り当ての可用性に基づいて、指定されたマシンタイプのいずれかを使用して VM をプロビジョニングします。
一括作成された VM のインスタンスの柔軟性について詳しくは、 一括作成された VM のインスタンスの柔軟性について をご覧ください。
始める前に
- 作成する予定の VM と関連リソースについては、十分な割り当てと必要な権限があることを確認してください。
-
まだ設定していない場合は、認証を設定します。認証では、 Google Cloud サービスと API にアクセスするための ID が確認されます。ローカル開発環境からコードまたはサンプルを実行するには、次のいずれかのオプションを選択して Compute Engine に対する認証を行います。
このページのサンプルをどのように使うかに応じて、タブを選択してください。
gcloud
-
Google Cloud CLI をインストールします。 インストール後、 初期化するには、次のコマンドを実行して Google Cloud CLI を初期化します。
gcloud init外部 ID プロバイダ(IdP)を使用している場合は、まず フェデレーション ID を使用して gcloud CLI にログインする必要があります。
-
- デフォルトのリージョンとゾーンを設定します。
REST
このページの REST API サンプルをローカル開発環境で使用するには、 gcloud CLI に指定した認証情報を使用します。
Google Cloud CLI をインストールします。
外部 ID プロバイダ(IdP)を使用している場合は、まず フェデレーション 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
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_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 で、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_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
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_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 で、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_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
}
}
}
}
インスタンス選択でディスクのオーバーライドを指定する
デフォルトでは、一括リクエストによって作成された 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_1、MACHINE_TYPE_2、MACHINE_TYPE_3: VM に使用するマシンタイプIMAGE_PROJECT: イメージを含むプロジェクトIMAGE: 使用するイメージまたはイメージ ファミリーの名前PROJECT_ID: プロジェクト IDREGION: VM を作成するリージョン