このページでは、インスタンス テンプレートを使用して VM インスタンスを作成する方法について説明します。インスタンス テンプレートとは、API リソースの 1 つであり、VM インスタンスのプロパティを定義するものです。インスタンス テンプレートで定義されるプロパティとしては、マシンタイプ、OS イメージ、永続ディスク構成、メタデータ、起動スクリプトなどがあり、そのインスタンス テンプレートを使用して個々の VM インスタンスを作成することも、マネージド インスタンス グループを作成することもできます。
VM インスタンスをインスタンス テンプレートから作成するときのデフォルトの動作では、作成される VM インスタンスはテンプレートで指定されているプロパティと同一です。ただし、VM インスタンス名とそのインスタンスが存在するゾーンを除きます。インスタンスを作成するときに、インスタンス テンプレートで定義したプロパティよりも優先される値を指定することもできるので、用途に応じてインスタンス テンプレートの一部のプロパティを変更することができます。
このドキュメントの内容は、使用できる状態のインスタンス テンプレートがあることを前提としています。インスタンス テンプレートがない場合は、手順に従って新しいインスタンス テンプレートを作成してください。
始める前に
- このガイドのコマンドラインの例を使用する場合、以下を行ってください。
- gcloud コマンドライン ツールの最新バージョンをインストールするか、最新バージョンに更新します。
- デフォルトのリージョンとゾーンを設定します。
- このガイドの API の例を使用する場合、API アクセスを設定します。
- インスタンス テンプレートのドキュメントを読みます。
- インスタンス テンプレートを作成します。
インスタンス テンプレートから VM インスタンスを作成する
インスタンス テンプレートでの定義のとおりにインスタンスを作成するには、次の手順を行います。
Console
- [VM インスタンス] ページに移動します。
- [インスタンスを作成] をクリックします。
- [テンプレートから VM インスタンスを新規作成] をクリックします。
- テンプレートを選択し、[続行] をクリックします。
- インスタンスの名前を指定し、必要に応じてさらにカスタマイズします。
- [作成] をクリックします。追加の設定の詳細については、インスタンスの作成をご覧ください。
gcloud
gcloud compute
では、通常のインスタンスを作成する場合に使用するものと同じ instances create
コマンドを使用しますが、--source-instance-template
フラグを追加します。
gcloud compute instances create [INSTANCE_NAME] --source-instance-template [INSTANCE_TEMPLATE_NAME]
ここで
API
API では、インスタンスを作成するための通常のリクエストを作成しますが、sourceInstanceTemplate
クエリ パラメータを追加し、その後にインスタンス テンプレートへの修飾パスを指定します。
POST https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instances?sourceInstanceTemplate=[INSTANCE_TEMPLATE_NAME]
リクエストの本文に、VM インスタンスに対する name
を指定します。
{ "name": "example-instance" }
たとえば、次のスニペットには、テンプレートへの完全修飾パス https://compute.googleapis.com/compute/v1/projects/myproject/global/instanceTemplates/example-instance-template
が含まれています。
POST https://compute.googleapis.com/compute/v1/projects/myproject/zones/us-central1-a/instances?sourceInstanceTemplate=https://compute.googleapis.com/compute/v1/projects/myproject/global/instanceTemplates/example-instance-template
{ "name": "example-instance" }
オーバーライドを使用してインスタンス テンプレートから VM インスタンスを作成する
インスタンス テンプレートを使用して VM インスタンス起動するときのデフォルトの動作では、作成される VM インスタンスはインスタンス名とゾーンを除いてインスタンス テンプレートに記述されているとおりとなります。
インスタンスを作成するときに、基本的にはインスタンス テンプレートと同じで少しだけ変更したいという場合は、オーバーライド動作を使用できます。オーバーライド動作を使用するには、既存のインスタンス テンプレートの属性のうちオーバーライドしたいものをインスタンスの作成時に渡します。
gcloud
gcloud
ツールを使用して、--source-instance-template
フラグを使用してインスタンスを作成するリクエストを作成し、該当する gcloud
フラグを使用して、必要なプロパティをオーバーライドします。使用できるフラグのリストについては、gcloud
のリファレンスをご覧ください。
たとえば、インスタンス テンプレートのマシンタイプ、メタデータ、オペレーティング システム、ブート永続ディスク、セカンダリ ディスクをオーバーライドするには、次のフラグを指定します。
gcloud compute instances create example-instance --source-instance-template example-instance \
--machine-type e2-standard-2 --image-family debian-8 --image-project debian-cloud \
--metadata bread=butter --disk=boot=no,name=my-override-disk
API
API で、sourceInstanceTemplate
クエリ パラメータを使用して、インスタンスを作成するための通常のリクエストを作成するときに、リクエスト本文でオーバーライドするフィールドを指定します。
API のオーバーライド動作は、RFC 7396 で記述されている JSON マージパッチ ルールに従います。
具体的には、次のシナリオです。
- プリミティブ フィールドをオーバーライドすると、インスタンス テンプレートの対応するプリミティブ フィールドが、リクエストのプリミティブ フィールド値に置き換えられます。プリミティブ フィールドには、
machineType
、sourceImage
、name
などがあります。 - 繰り返しフィールドをオーバーライドする場合は、そのプロパティのすべての繰り返し値が、リクエストで指定された対応する値で置き換えられます。繰り返しフィールドは一般的に、型が
list
のプロパティです。たとえば、disks
とnetworkInterfaces
は繰り返しフィールドです。 nested object
をオーバーライドする場合は、インスタンス テンプレート内のオブジェクトが、リクエスト内の対応するオブジェクト指定とマージされます。ネストされたオブジェクトが繰り返しフィールド内に存在する場合は、そのフィールドは繰り返しフィールドのルールに従って処理されることに注意してください。ラベルはこのルールの例外であり、その型がobject
であっても繰り返しフィールドとして扱われます。
たとえば、あるインスタンス テンプレートで非ブートディスクが 2 つ定義されているものの、このディスクの 1 つをオーバーライドするとします。保存するディスクを含め、disks
仕様全体をリクエストに含める必要があります。
このリクエストの URL:
POST https://compute.googleapis.com/compute/v1/projects/myproject/zones/us-central1-a/instances?sourceInstanceTemplate=https://compute.googleapis.com/compute/v1/projects/myproject/global/instanceTemplates/example-instance-template
リクエスト本文:
{
"disks": [
{
# Since you are overriding the repeated disk property, you must
# specify a boot disk in the request, even if it is already
# specified in the instance template
"autoDelete": true,
"boot": true,
"initializeParams": {
"sourceImage": "projects/debian-cloud/global/images/family/debian-8"
},
"mode": "READ_WRITE",
"type": "PERSISTENT"
},
{
# New disk you want to use
"autoDelete": false,
"boot": false,
"mode": "READ_WRITE",
"source": "zones/us-central1-f/disks/my-override-disk",
"type": "PERSISTENT"
},
{
# Assume this disk is already specified in instance template, but
# you must specify it again since you are overriding the disks
# property
"autoDelete": false,
"boot": false,
"mode": "READ_WRITE",
"source": "zones/us-central1-f/disks/my-other-disk-to-keep",
"type": "PERSISTENT"
}
],
"machineType": "zones/us-central1-f/machineTypes/e2-standard-2",
"name": "example-instance"
}
次のステップ
- プリエンプティブ VM インスタンスのドキュメントを参照する。
- シャットダウン スクリプトについて読む。
- プリエンプティブル インスタンスの料金を確認する。
- インスタンスに接続する。