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

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

インスタンス テンプレートを使用して、マネージド インスタンス グループ(MIG)に属するインスタンスや個々の VM を作成できます。

始める前に

制限事項

インスタンス テンプレートの nic0 以外のインターフェースの共有 VPC は、gcloud ツールと API ではサポートされますが、Cloud Console ではサポートされません。

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

インスタンス メタデータ、起動スクリプト、永続ディスク、サービス アカウントなど、リクエストで個々の VM インスタンスを作成する際に指定できる大半のインスタンス プロパティはインスタンス テンプレートでも指定できます。マシンタイプ、ブートディスク、ネットワークを指定する必要があります。

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

Console

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

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

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

  3. 次のフィールドに値を入力するか、デフォルト値を受け入れます。デフォルト値は、選択したマシン ファミリーに応じて変わります。

    • マシンタイプ
    • 画像
    • ブートディスク
    • VPC ネットワーク
    • 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 コマンドを使用してインスタンス テンプレートを作成します。

gcloud compute instance-templates create INSTANCE_TEMPLATE_NAME

INSTANCE_TEMPLATE_NAME は、インスタンス テンプレートの名前に置き換えます。

明示的なテンプレート設定を指定しない場合は、gcloud compute は次のデフォルト値を使用します。

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

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

gcloud compute instance-templates create example-template-custom \
    --machine-type e2-standard-4 \
    --image-family debian-10 \
    --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 でモニタリングできます。詳細については、整合性モニタリングをご覧ください。

使用可能なすべてのサブコマンドとフラグの一覧については、instance-templates リファレンスをご覧ください。

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

gcloud compute instance-templates describe example-template
creationTimestamp: '2019-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-10
    kind: compute#attachedDisk
    mode: READ_WRITE
    type: PERSISTENT
  machineType: e2-standard-2
  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

instanceTemplates.insert メソッドを呼び出します。最小の必須フィールドでは、リクエスト本文は次のようになります。

{
  "name": "example-template",
  "properties": {
    "machineType": "e2-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-10"
        }
      }
    ]
  }
}

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

--source-instance フラグと --source-instance-zone フラグを指定して、gcloud instance-templates create コマンドを使用します。

gcloud compute instance-templates create INSTANCE_TEMPLATE_NAME \
    --source-instance=SOURCE_INSTANCE \
    --source-instance-zone=SOURCE_INSTANCE_ZONE \

ソース インスタンスのディスクの定義方法をオーバーライドするには、1 つ以上の --configure-disk フラグを追加します。

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/cps-cloud/global/images/cos-89-16108-403-15

API

instanceTemplates.insert メソッドを呼び出し、sourceInstance フィールドを指定します。ソース インスタンスのディスクの定義方法をオーバーライドするには、1 つ以上の diskConfigs フィールドを追加します。

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",
        "autoDelete": false
      }
    ]
  }
}

次のように置き換えます。

  • 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/cos-cloud/global/images/cos-89-16108-403-15 に置き換えられます。

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/cos-cloud/global/images/cos-89-16108-403-15"
      }
    ]
  }
}

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

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

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

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

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

既存のインスタンス テンプレートを更新することはできません。ただし、インスタンス テンプレートが最新でなくなった場合や、変更を行う必要がある場合は、コンソールを使用して、同様のプロパティを持つ別のインスタンス テンプレートを作成できます。

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

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

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

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

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

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

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

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

Console

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

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

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

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

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

    • Container Registry または Artifact Registry からイメージを指定できます。例:
      • gcr.io/cloud-marketplace/google/nginx1:1.12 が Google Cloud Marketplace から NGINX 1.12 コンテナ イメージを選択します。
      • us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0 は、Artifact Registry に格納されているサンプル hello-app イメージを選択します。
    • 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 フラグを使用して、テンプレートから作成されたインスタンスを任意のサブネットに配置します。--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 e2-standard-2             2019-12-23T20:34:00.791-07:00

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

インスタンス テンプレートでのカスタム イメージまたは公開イメージの使用

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

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

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

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

次のステップ