インスタンス テンプレートから VM インスタンスを作成する

このページでは、インスタンス テンプレートを使用して VM インスタンスを作成する方法について説明します。インスタンス テンプレートとは、API リソースの 1 つであり、VM インスタンスのプロパティを定義するものです。インスタンス テンプレートで定義されるプロパティとしては、マシンタイプ、OS イメージ、永続ディスク構成、メタデータ、起動スクリプトなどがあり、そのインスタンス テンプレートを使用して個々の VM インスタンスを作成することも、マネージド インスタンス グループを作成することもできます。

VM インスタンスをインスタンス テンプレートから作成するときのデフォルトの動作では、作成される VM インスタンスはテンプレートで指定されているプロパティと同一です。ただし、VM インスタンス名とそのインスタンスが存在するゾーンを除きます。インスタンスを作成するときに、インスタンス テンプレートで定義したプロパティよりも優先される値を指定することもできるので、用途に応じてインスタンス テンプレートの一部のプロパティを変更することができます。

このドキュメントの内容は、使用できる状態のインスタンス テンプレートがあることを前提としています。インスタンス テンプレートがない場合は、手順に従って新しいインスタンス テンプレートを作成してください

始める前に

インスタンス テンプレートから VM インスタンスを作成する

インスタンス テンプレートでの定義のとおりにインスタンスを作成するには、次の手順を行います。

Console

  1. [VM インスタンス] ページに移動します。

    [VM インスタンス] ページに移動

  2. [インスタンスを作成] をクリックします。
  3. [テンプレートから VM インスタンスを新規作成] をクリックします。
  4. テンプレートを選択し、[続行] をクリックします。
  5. インスタンスの名前を指定し、必要に応じてさらにカスタマイズします。
  6. [作成] をクリックします。 追加の設定の詳細については、インスタンスの作成をご覧ください。

gcloud

gcloud compute とともに、通常のインスタンスを作成するために使用するのと同じ instances create コマンドを使用しますが、--source-instance-template フラグを追加します。

gcloud compute instances create [INSTANCE_NAME] --source-instance-template [INSTANCE_TEMPLATE_NAME]

ここで:

  • [INSTANCE_NAME] はインスタンスの名前です。
  • [INSTANCE_TEMPLATE_NAME] は使用するインスタンス テンプレートの名前です。

次に例を示します。

gcloud compute instances create example-instance --source-instance-template my-instance-template

API

API では、インスタンスを作成するための通常のリクエストを作成しますが、sourceInstanceTemplate クエリ パラメータを追加し、その後にインスタンス テンプレートへの修飾パスを指定します。

POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instances?sourceInstanceTemplate=[INSTANCE_TEMPLATE_NAME]

リクエスト本文の中で、VM インスタンスの名前(name)を指定します。

{ "name": "example-instance" }

たとえば、次のスニペットには、テンプレートへの完全修飾パス https://www.googleapis.com/compute/v1/projects/myproject/global/instanceTemplates/example-instance-template が含まれています。

POST https://www.googleapis.com/compute/v1/projects/myproject/zones/us-central1-a/instances?sourceInstanceTemplate=https://www.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 n1-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 マージパッチ ルールに従います。

特に、以下の点に注意してください。

  • プリミティブ フィールドをオーバーライドする場合は、インスタンス テンプレートの中の対応するプリミティブ フィールドがリクエストのプリミティブ フィールド値で置き換えられます。プリミティブ フィールドとは、machineTypesourceImagename などです。
  • 繰り返しフィールドをオーバーライドする場合は、そのプロパティのすべての繰り返し値が、リクエストで指定された対応する値で置き換えられます。繰り返しフィールドは一般的に、型が list のプロパティです。たとえば、disksnetworkInterfaces は繰り返しフィールドです。
  • nested object をオーバーライドする場合は、インスタンス テンプレート内のオブジェクトが、リクエスト内の対応するオブジェクト指定とマージされます。ネストされたオブジェクトが繰り返しフィールド内に存在する場合は、そのフィールドは繰り返しフィールドのルールに従って処理されることに注意してください。ラベルはこのルールの例外であり、その型が object であっても繰り返しフィールドとして扱われます。

たとえば、あるインスタンス テンプレートで非ブートディスクが 2 つ定義されているものの、このディスクの 1 つをオーバーライドするとします。disks 指定全体をリクエストの中で記述する必要があります。これには、そのままにするディスクも含まれます。

このリクエストの URL:

POST https://www.googleapis.com/compute/v1/projects/myproject/zones/us-central1-a/instances?sourceInstanceTemplate=https://www.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/n1-standard-2",
  "name": "example-instance"
}

次のステップ

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

Compute Engine ドキュメント