このページでは、インスタンス テンプレートを使用して VM インスタンスを作成する方法について説明します。インスタンス テンプレートとは、API リソースの 1 つであり、VM インスタンスのプロパティを定義するものです。インスタンス テンプレートで定義されるプロパティとしては、マシンタイプ、OS イメージ、永続ディスク構成、メタデータ、起動スクリプトなどがあり、そのインスタンス テンプレートを使用して個々の VM インスタンスを作成することも、マネージド インスタンス グループを作成することもできます。
VM インスタンスをインスタンス テンプレートから作成するときのデフォルトの動作では、作成される VM インスタンスはテンプレートで指定されているプロパティと同一です。ただし、VM インスタンス名とそのインスタンスが存在するゾーンを除きます。インスタンスを作成するときに、インスタンス テンプレートで定義したプロパティよりも優先される値を指定することもできるので、用途に応じてインスタンス テンプレートの一部のプロパティを変更することができます。
このドキュメントの内容は、使用できる状態のインスタンス テンプレートがあることを前提としています。インスタンス テンプレートがない場合は、手順に従って新しいインスタンス テンプレートを作成してください。
始める前に
- このガイドのコマンドラインの例を使用する場合は、次の操作を行います。
- Google Cloud CLI の最新バージョンをインストールするか、最新バージョンに更新します。
- デフォルトのリージョンとゾーンを設定します。
- このガイドの API の例を使用する場合、API アクセスを設定します。
- インスタンス テンプレートのドキュメントを読みます。
- インスタンス テンプレートを作成します。
インスタンス テンプレートから VM インスタンスを作成する
インスタンス テンプレートでの定義のとおりにインスタンスを作成するには、次の手順を行います。
Console
Google Cloud コンソールで、[インスタンスの作成] ページに移動します。
[テンプレートから VM インスタンスを新規作成] をクリックします。
テンプレートを選択し、[続行] をクリックします。
VM の名前を指定し、必要に応じてさらにカスタマイズします。
[作成] をクリックします。
設定の詳細については、イメージから VM インスタンスを作成するをご覧ください。
gcloud
インスタンス テンプレートから新しい VM を作成するには、通常のインスタンスの作成に使用するものと同じgcloud compute instances create
コマンドを使用しますが、--source-instance-template
フラグを追加します。
gcloud compute instances create VM_NAME \ --source-instance-template INSTANCE_TEMPLATE_NAME
次のように置き換えます。
次に例を示します。
gcloud compute instances create example-instance \ --source-instance-template my-instance-template
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" }
Go
Java
Node.js
Python
オーバーライドを使用してインスタンス テンプレートから VM インスタンスを作成する
インスタンス テンプレートを使用して VM インスタンス起動するときのデフォルトの動作では、作成される VM インスタンスはインスタンス名とゾーンを除いてインスタンス テンプレートに記述されているとおりとなります。
インスタンスを作成するときに、基本的にはインスタンス テンプレートと同じで少しだけ変更したいという場合は、オーバーライド動作を使用できます。オーバーライド動作を使用するには、既存のインスタンス テンプレートの属性のうちオーバーライドしたいものをインスタンスの作成時に渡します。
gcloud
gcloud CLIを使用して、--source-instance-template
フラグでインスタンスを作成するリクエストを行い、該当する gcloud
フラグを使用して、必要なプロパティをオーバーライドします。使用できるフラグのリストについては、gcloud
リファレンスをご覧ください。
たとえば、インスタンス テンプレートのマシンタイプ、メタデータ、オペレーティング システム、ブート永続ディスク、セカンダリ ディスクをオーバーライドするには、次のフラグを指定します。
gcloud compute instances create example-instance \ --source-instance-template example-instance --machine-type e2-standard-2 \ --image-family debian-9 --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" }
Go
Java
Node.js
Python
次のステップ
- プリエンプティブ VM インスタンスのドキュメントを参照する。
- シャットダウン スクリプトについて読む。
- プリエンプティブル インスタンスの料金を確認する。
- インスタンスに接続する。