インスタンス テンプレートの作成

このページでは、インスタンス テンプレートの作成および管理方法について説明します。インスタンス テンプレートを使用すると、仮想マシン(VM)インスタンスを作成するときに使用するマシンタイプ、ブートディスク イメージまたはコンテナ イメージ、ネットワーク、その他のインスタンス プロパティを定義できます。インスタンス テンプレートを使用して、マネージド インスタンス グループ(MIG)に属するインスタンスや個々のインスタンスを作成できます。

始める前に

新しいインスタンス テンプレートの作成

インスタンス メタデータ、起動スクリプト、永続ディスク、サービス アカウントなど、通常の API リクエストで個々の VM インスタンスを作成する際に定義できるほとんどのインスタンス プロパティは、インスタンス テンプレートで定義できます。

インスタンス テンプレートの作成には最低限、インスタンスの作成に必要なプロパティと同じプロパティが必要になります。必須項目のリストについては、instanceTemplates().insert リファレンスをご覧ください。

Google Cloud Consolegcloud コマンドライン ツール、または API を使用してインスタンス テンプレートを作成します。

Console

  1. Cloud Console で、[インスタンス テンプレート] ページに移動します。

    [インスタンス テンプレート] ページに移動

  2. [インスタンス テンプレートを作成] をクリックします。

  3. インスタンス テンプレートに使用する各フィールドの値を入力するか、またはデフォルトの値を受け入れます。デフォルトの値は次のとおりです。

    • マシンタイプ: n1-standard-1
    • イメージ: 最新の Debian イメージ
    • ブートディスク: インスタンスにちなんで名付けられた新しい標準のブートディスク
    • VPC ネットワーク: default VPC ネットワーク
    • IP アドレス: エフェメラル外部 IP アドレス
  4. Shielded VM をサポートするイメージを選択した場合は、インスタンスの Shielded VM の設定を必要に応じて変更します。

    1. [管理、セキュリティ、ディスク、ネットワーク、単一テナンシー] セクションで [セキュリティ] タブをクリックします。
    2. セキュアブートを無効にする場合は、[セキュアブートをオンにする] チェックボックスをオフにします。セキュアブートは、ブートレベルやカーネルレベルのマルウェアとルートキットから VM インスタンスを保護します。詳細については、セキュアブートをご覧ください。
    3. 仮想トラステッド プラットフォーム モジュール(vTPM)を無効にする場合は、[vTPM をオンにする] チェックボックスをオフにします。vTPM を使用すると、メジャード ブートが有効になり、それによって VM の起動前と起動時の整合性が検証されます。詳細については、仮想トラステッド プラットフォーム モジュール(vTPM)をご覧ください。

    4. 整合性モニタリングを無効にする場合は、[整合性のモニタリングを有効にする] チェックボックスをオフにします。整合性モニタリングを使用すると、Shielded VM インスタンス起動時の整合性を Cloud Monitoring でモニタリングできます。詳細については、整合性モニタリングをご覧ください。

  5. 必要に応じて、[管理、セキュリティ、ディスク、ネットワーク、単一テナンシー] セクションのタブをクリックし、テンプレートをさらにカスタマイズします。たとえば、ブートディスク以外のセカンダリ ディスクを最大 15 個追加できます。

  6. 必要に応じて、ページの下部にある [同等の REST] をクリックして REST リクエストの本文を表示します。リクエストの本文には、インスタンス テンプレートの JSON 表現が含まれています。

  7. [作成] をクリックしてテンプレートを作成します。

gcloud

gcloud compute で、instance-templates create コマンドを使用してインスタンス テンプレートを作成します。INSTANCE_TEMPLATE_NAME は、インスタンス テンプレートの名前で置き換えます。

gcloud compute instance-templates create INSTANCE_TEMPLATE_NAME

明示的なテンプレート設定を指定しない場合には、gcloud compute により次のデフォルト値を持つテンプレートが作成されます。

  • マシンタイプ: n1-standard-1
  • イメージ: 最新の Debian イメージ
  • ブートディスク: インスタンスにちなんで名付けられた新しい標準のブートディスク
  • ネットワーク: default VPC ネットワーク
  • IP アドレス: エフェメラル外部 IP アドレス

これらの構成設定は明示的に指定することもできます。例:

gcloud compute instance-templates create example-template-custom \
    --machine-type n1-standard-4 \
    --image-family debian-9 \
    --image-project debian-cloud \
    --boot-disk-size 250GB

ブートディスク以外のセカンダリ ディスクを最大 15 個追加できます。作成するセカンダリ ディスクごとに --create-disk フラグを指定します。公開イメージまたはストック イメージからセカンダリ ディスクを作成するには、--create-disk フラグに image および image-project プロパティを指定します。空のディスクを作成するには、これらのプロパティを指定しないでください。ディスクの sizetype のプロパティは必要に応じて指定してください。

gcloud compute instance-templates create INSTANCE_TEMPLATE_NAME \
    --create-disk image=DISK_IMAGE,image-project=DISK_IMAGE_PROJECT,size=SIZE_GB

以下を置き換えます。

  • INSTANCE_TEMPLATE_NAME: 新しいテンプレートの名前。
  • DISK_IMAGE: セカンダリ ディスクのソースイメージ。使用可能なイメージのリストを表示するには、gcloud compute images list を実行します。空のディスクを作成する場合は、ディスク イメージやイメージ プロジェクトを指定しないでください。
  • DISK_IMAGE_PROJECT: ディスク イメージが属するイメージ プロジェクト。空のディスクを作成する場合は、ディスク イメージやイメージ プロジェクトを指定しないでください。
  • SIZE_GB: セカンダリ ディスクのサイズ。

Shielded VM をサポートするイメージを選択した場合は、必要に応じて次のいずれかのフラグを使用して、インスタンスの Shielded VM の設定を変更できます。

  • --no-shielded-secure-boot: セキュアブートを無効にします。セキュアブートは、ブートレベルとカーネルレベルのマルウェアとルートキットから VM インスタンスを保護します。詳細については、セキュアブートをご覧ください。
  • --no-shielded-vtpm: 仮想トラステッド プラットフォーム モジュール(vTPM)を無効にします。vTPM を使用すると、メジャード ブートが有効になり、それによって VM の起動前と起動時の整合性が検証されます。詳細については、仮想トラステッド プラットフォーム モジュール(vTPM)をご覧ください。

  • --no-shielded-integrity-monitoring: 整合性モニタリングを無効にします。整合性モニタリングを使用すると、Shielded VM インスタンス起動時の整合性を Cloud Monitoring でモニタリングできます。詳細については、整合性モニタリングをご覧ください。

使用可能なフラグの一覧については、gcloud compute リファレンスをご覧ください。

デフォルトの構成設定を使用したテンプレートは次のようなものになります。

gcloud compute instance-templates describe example-template
creationTimestamp: '2014-09-10T16:18:32.042-07:00'
description: ''
id: '6057583701980539406'
kind: compute#instanceTemplate
name: example-template
properties:
  canIpForward: false
  disks:
  - autoDelete: true
    boot: true
    initializeParams:
      sourceImage: https://compute.googleapis.com/compute/v1/projects/debian-cloud/global/images/family/debian-9
    kind: compute#attachedDisk
    mode: READ_WRITE
    type: PERSISTENT
  machineType: n1-standard-1
  networkInterfaces:
  - accessConfigs:
    - kind: compute#accessConfig
      name: external-nat
      type: ONE_TO_ONE_NAT
    network: https://compute.googleapis.com/compute/v1/projects/myproject/global/networks/default
  scheduling:
    automaticRestart: true
    onHostMaintenance: MIGRATE
  serviceAccounts:
  - email: default
    scopes:
    - https://www.googleapis.com/auth/devstorage.read_only
selfLink: https://compute.googleapis.com/compute/v1/projects/myproject/global/instanceTemplates/example-template

API

インスタンス テンプレートの API では、instanceTemplates().insert ドキュメントの説明に従って、必要なすべての構成フィールドの値を明示的に定義する必要があります。たとえば、最小限の必須項目を使用したインスタンス テンプレートは次のようなものになります。

{
"name": "example-template",
"properties": {
  "machineType": "n1-standard-4",
  "networkInterfaces": [
    {
      "network": "global/networks/default",
      "accessConfigs":
      [
        {
          "name": "external-IP",
          "type": "ONE_TO_ONE_NAT"
        }
      ]
    }
  ],
  "disks":
  [
    {
      "type": "PERSISTENT",
      "boot": true,
      "mode": "READ_WRITE",
      "initializeParams":
      {
        "sourceImage": "projects/debian-cloud/global/images/family/debian-9"
      }
    }
  ]
  }
}

disks プロパティを使用する場合は、initializeParams プロパティを使用してインスタンスごとに新しい永続ブートディスクを作成するか、source プロパティを使用して既存の永続ブートディスクを関連付けます。既存のブートディスクを関連付けた場合、テンプレートから作成できるインスタンスは 1 つだけになります。

追加するディスクごとに initializeParams プロパティを使用して、最大 15 個のセカンダリ非ブートディスクを追加できます。公開イメージまたは非公開イメージで追加のディスクを作成します。空のディスクを追加するには、sourceImage を指定しないでください。必要に応じて、diskSizeGbdiskTypelabels の各プロパティを指定できます。

Shielded VM をサポートするイメージを選択した場合は、必要に応じて次のブール値の項目をリクエスト本文で使用して、インスタンスの Shielded VM の設定を変更できます。

  • enableSecureBoot: セキュアブートを有効または無効にします。セキュアブートは、ブートレベルとカーネルレベルのマルウェアとルートキットから VM インスタンスを保護します。詳細については、セキュアブートをご覧ください。
  • enableVtpm: 仮想トラステッド プラットフォーム モジュール(vTPM)を有効または無効にします。vTPM を使用すると、メジャード ブートが有効になり、それによって VM の起動前と起動時の整合性が検証されます。詳細については、仮想トラステッド プラットフォーム モジュール(vTPM)をご覧ください。
  • enableIntegrityMonitoring: 整合性モニタリングを有効または無効にします。整合性モニタリングを使用すると、Shielded VM インスタンスの実行時の起動の整合性を Cloud Monitoring レポートでモニタリングして検証できます。詳細については、整合性モニタリングをご覧ください。

使用可能なフィールドについては、リファレンス ドキュメントをご覧ください。

既存のインスタンスに基づくインスタンス テンプレートの作成

Compute Engine API または gcloud ツールを使用して、既存の VM インスタンスの構成をインスタンス テンプレートとして保存できます。

テンプレートで、ソースディスクの定義方法をオーバーライドできます。

他のプロパティをオーバーライドする必要がある場合は、既存のインスタンスに基づいてインスタンス テンプレートを作成してから、オーバーライドを追加した同様のテンプレートを作成します。

gcloud

すべてのフラグの一覧については、gcloud instance-templates create コマンドをご覧ください。

gcloud compute instance-templates create [INSTANCE_TEMPLATE_NAME] \
    --source-instance=[SOURCE_INSTANCE] \
    --source-instance-zone=[SOURCE_INSTANCE_ZONE] \
    [--configure-disk= \
        device-name=[SOURCE_DISK], \
        instantiate-from=[INSTANTIATE_FROM], \
        auto-delete=[AUTO_DELETE]]

ここで

  • [INSTANCE_TEMPLATE_NAME] は、作成するテンプレートの名前です。
  • [SOURCE_INSTANCE] は、新しいテンプレートのモデルとして使用するインスタンスの名前です。
  • [SOURCE_INSTANCE_ZONE] は、ソース インスタンスを含むゾーンです。
  • [SOURCE_DISK] は、テンプレート内でオーバーライドするソース インスタンスのディスクの名前です。
  • [INSTANTIATE_FROM] は、ディスクを組み込むかどうか、組み込む場合はどのイメージを使用するかを指定します。有効な値は、ディスクの種類によって異なります。
    • source-image または source-image-family(ブートディスクとその他の読み取り / 書き込み用の永続ディスクにのみ有効)。
    • custom-image(ブートディスクとその他の読み取り / 書き込み用の永続ディスクにのみ有効)。指定した場合、次の例のようにカスタム イメージのパスまたは URL も指定する必要があります。
    • attach-read-only(読み取り専用ディスクにのみ有効)。
    • blank(ブートディスク以外の永続ディスクとローカル SSD にのみ有効)。指定した場合、テンプレートを使用して新しいインスタンスを作成すると、ディスクはフォーマットされていない状態で作成されます。スケーラブルな設定でディスクを使用するには、起動スクリプトでディスクをフォーマットしてマウントする必要があります。
    • do-not-include(ブートディスク以外の永続ディスクと読み取り専用ディスクにのみ有効)。
    • blank(ブートディスク以外の永続ディスクと読み取り専用ディスクにのみ有効)。
  • インスタンスを削除したときに [AUTO_DELETE] でディスクを自動削除するかどうかを指定します。有効な値は falsenotrueyes です。

たとえば、次のコマンドは my-source-instance に基づくインスタンス テンプレートを作成して、data-disk-a からオリジナルのイメージを使用することもできますが、自動削除を true に設定し、data-disk-bをカスタム イメージに置き換えます。

gcloud compute instance-templates create my-instance-template  \
    --source-instance my-source-instance \
    --configure-disk=device-name=data-disk-a,instantiate-from=source-image, \
      auto-delete=true
    --configure-disk=device-name=data-disk-b,instantiate-from=custom-image, \
      custom-image=projects/coreos-cloud/global/images/coreos-alpha-1492-3-0-v20170810

API

すべてのフラグの一覧については、InstanceTemplates API のドキュメントをご覧ください。

POST https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/instanceTemplates
{
  "name": "[INSTANCE_TEMPLATE_NAME]",
  "sourceInstance": "zones/[SOURCE_INSTANCE_ZONE]/instances/[SOURCE_INSTANCE]",
  "sourceInstanceParams": {
    "diskConfigs": [
      {
        "deviceName": "[SOURCE_DISK]",
        "instantiateFrom": "[INSTANTIATE_FROM]"
      }
    ]
  }
}

ここで

  • [PROJECT_ID] はリクエストのプロジェクト ID です。
  • [INSTANCE_TEMPLATE_NAME] は、新しいテンプレートの名前です。
  • [SOURCE_INSTANCE_ZONE] はソース インスタンスのゾーンです。
  • [SOURCE_INSTANCE] は、このインスタンス テンプレートのモデルとして使用されるソース インスタンスの名前です。
  • [SOURCE_DISK] は、テンプレート内でオーバーライドするソース インスタンスのディスクの名前です。
  • [INSTANTIATE_FROM] は、ディスクを組み込むかどうか、組み込む場合はどのイメージを使用するかを指定します。有効な値は、ディスクの種類によって異なります。
    • source-image または source-image-family(ブートディスクとその他の読み取り / 書き込み用の永続ディスクにのみ有効)。
    • custom-image(ブートディスクとその他の読み取り / 書き込み用の永続ディスクにのみ有効)。指定した場合、次の例のようにカスタム イメージのパスまたは URL も指定する必要があります。
    • attach-read-only(読み取り専用ディスクにのみ有効)。
    • blank(ブートディスク以外の永続ディスクとローカル SSD にのみ有効)。指定した場合、テンプレートを使用して新しいインスタンスを作成すると、ディスクはフォーマットされていない状態で作成されます。スケーラブルな設定でディスクを使用するには、起動スクリプトでディスクをフォーマットしてマウントする必要があります。
    • do-not-include(ブートディスク以外の永続ディスクと読み取り専用ディスクにのみ有効)。

次の例では、my-source-instance に基づく新しいインスタンス テンプレートを作成しています。インスタンス テンプレートでは、data-disk-a のイメージは projects/coreos-cloud/global/images/coreos-alpha-1492-3-0-v20170810 に置き換えられます。

POST https://compute.googleapis.com/compute/v1/projects/my_project/global/instanceTemplates
{
  "name": "my-instance-template",
  "sourceInstance": "zones/us-central1-a/instances/my-source-instance",
  "sourceInstanceParams":
  {
    "diskConfigs":
    [
      {
        "deviceName": "data-disk-a",
        "instantiateFrom": "custom-image",
        "customImage": "projects/coreos-cloud/global/images/coreos-alpha-1492-3-0-v20170810"
      }
    ]
  }
}

次の表は、テンプレートでディスクの定義方法をオーバーライドするオプションを示しています。

ディスクタイプ オプション
ブートディスク
  • [デフォルト] ソース インスタンスでブートディスクを作成するために使用されたソースイメージまたはイメージ ファミリーと同じものを使用します。
  • 任意の(カスタムまたは公開)イメージの URL を使用します。
その他の読み取り / 書き込み用の永続ディスク
  • [デフォルト] ソース インスタンスでディスクを作成するために使用されたソースイメージまたはソースイメージ ファミリーと同じものを使用します。注: ソース インスタンスのディスクにソースイメージまたはソースイメージ ファミリーのプロパティがない場合、空のディスクとしてテンプレートに含まれます。
  • 任意の(カスタムまたは公開)イメージの URL を使用します。
  • 代わりに空のディスクをテンプレートで使用します。テンプレートを使用して新しいインスタンスを作成すると、このディスクはフォーマットされていない状態で作成されます。スケーラブルな設定でディスクを使用するには、起動スクリプトでディスクをフォーマットしてマウントする必要があります。
  • ディスクを組み込みません。
読み取り専用ディスク
  • [デフォルト] ディスクを読み取り専用モードで組み込みます。
  • ディスクを組み込みません。
ローカル SSD
  • [デフォルト] 空のローカル SSD を組み込みます。テンプレートを使用して新しいインスタンスを作成すると、このディスクはフォーマットされていない状態で作成されます。スケーラブルな設定でディスクを使用するには、起動スクリプトでディスクをフォーマットしてマウントする必要があります。

ディスクごとで auto-delete 属性をオーバーライドして、関連付けられたインスタンスが削除されるときにディスクを削除するかどうかも指定できます。

デフォルトでは、オーバーライド オプションが指定されていない場合、テンプレート内のディスク構成はソース インスタンスと同じになります。

既存のテンプレートに基づくインスタンス テンプレートの作成

既存のインスタンス テンプレートを更新することはできません。ただし、インスタンス テンプレートが古くなった場合や、インスタンス テンプレートに変更を加える必要がある場合は、同様のプロパティを持つ別のインスタンス テンプレートを作成できます。それには、Console を使用します。

  1. [インスタンス テンプレート] ページに移動します。

    [インスタンス テンプレート] ページに移動

  2. コピーして更新するインスタンス テンプレートをクリックします。

  3. [同様のものを作成] をクリックします。

  4. 新しいテンプレートで構成を更新します。

  5. [作成] をクリックします。

コンテナ イメージを指定したインスタンス テンプレートの作成

インスタンス テンプレートでコンテナ イメージを指定できます。デフォルトでは、Compute Engine によって、Docker がインストールされた Container-Optimized OS イメージもテンプレートに組み込まれます。テンプレートを使用して新しいインスタンスを作成すると、インスタンスの起動時にコンテナが自動的に起動されます。

Console

  1. [インスタンス テンプレート] ページに移動します。

    [インスタンス テンプレート] ページに移動

  2. [インスタンス テンプレートを作成] をクリックします。

  3. [コンテナ] セクションで、[この VM インスタンスにコンテナ イメージをデプロイします。] チェックボックスをオンにします。

  4. [コンテナ イメージ] で使用するコンテナ イメージを指定します。

    • たとえば、gcr.io/cloud-marketplace/google/nginx1:1.12 と指定すると、Google Cloud マーケットプレイスから NGINX 1.12 コンテナ イメージを選択できます。
    • Docker Hub のコンテナ イメージを使用する場合は、常に完全な Docker イメージ名を指定します。たとえば、Apache コンテナ イメージをデプロイするには、次のイメージ名 docker.io/httpd:2.4 を指定します。
  5. 必要に応じて、[コンテナの詳細オプション] をクリックします。詳細については、コンテナを実行する際のオプションの構成をご覧ください。

  6. [作成] をクリックします。

gcloud

gcloud compute instance-templates create-with-container コマンドを使用します。

gcloud compute instance-templates create-with-container INSTANCE_TEMPLATE_NAME \
     --container-image CONTAINER_IMAGE

以下を置き換えます。

  • INSTANCE_TEMPLATE_NAME: 作成するテンプレートの名前。
  • CONTAINER_IMAGE: 使用するコンテナ イメージの完全な名前。

たとえば、次のコマンドは nginx-vm という新しいインスタンス テンプレートを作成します。このテンプレートから作成された VM インスタンスは、起動時にコンテナ イメージ gcr.io/cloud-marketplace/google/nginx1:1.12 を起動して実行します。

 gcloud compute instance-templates create-with-container nginx-vm \
     --container-image gcr.io/cloud-marketplace/google/nginx1:1.12

コンテナの実行オプションを構成することもできます。

サブネットを指定したインスタンス テンプレートの作成

インスタンス テンプレート コマンドで --subnet および --region フラグを使用すると、新しいインスタンスを任意のサブネットに配置できます。--subnet フラグを使用する場合、--region フラグも必要です。

gcloud compute instance-templates create INSTANCE_TEMPLATE_NAME \
    --region REGION \
    --subnet SUBNET_NAME_OR_URL

以下を置き換えます。

  • INSTANCE_TEMPLATE_NAME: インスタンス テンプレートに付ける名前。
  • REGION: サブネットのリージョン。
  • SUBNET_NAME_OR_URL: サブネットの名前またはその URL。

次の例では、subnet-us-qa サブネットでのみインスタンスを作成する template-qa というテンプレートを作成しています。

gcloud compute instance-templates create template-qa \
    --region us-central1 \
    --subnet subnet-us-qa

Created [https://compute.googleapis.com/compute/latest/projects/PROJECT_ID/global/instanceTemplates/template-qa].
NAME        MACHINE_TYPE  PREEMPTIBLE CREATION_TIMESTAMP
template-qa n1-standard-1             2015-12-23T20:34:00.791-07:00

このテンプレートを使用してマネージド インスタンス グループのインスタンスを作成すると(自動スケーリングの設定は任意)、指定したリージョンおよびサブネットにインスタンスが自動的に作成されます。これにより、負荷分散のために新規に作成するインスタンスのサブネットを制御できるようになります。

インスタンス テンプレートでのカスタム イメージまたはパブリック イメージの使用

マネージド インスタンス グループはインスタンスの追加と削除が頻繁に行われることを想定した設計であるため、カスタム イメージを作成してそれをインスタンス テンプレートで指定するようにすると便利です。インスタンスに必要なアプリと設定を使用したイメージを準備します。こうすると、MIG の個々のインスタンスでこうしたアイテムを手動で構成する必要がなくなります。

代わりに、公開イメージ起動スクリプトを使用するインスタンス テンプレートを作成し、それを起動してインスタンスを準備することもできます。カスタム イメージは起動スクリプトを使用するインスタンスより確定的であり、起動時間が短くなります。ただし、起動スクリプトのほうが柔軟性が高く、インスタンス内のアプリケーションと設定を簡単に更新できます。

インスタンス テンプレートの更新

既存のインスタンス テンプレートを更新したり、インスタンス テンプレートを作成した後で変更したりすることはできません。インスタンス テンプレートが最新でなくなった場合や、構成の変更が必要になった場合は、新しいインスタンス テンプレートを作成してください。

次のステップ