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

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

始める前に

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

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

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

インスタンス テンプレートを作成するには、Google Cloud Platform Consolegcloud compute ツール、または API のいずれかを使用します。

Console

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

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

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

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

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

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

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

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

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

gcloud

gcloud computeinstance-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 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-vm-secure-boot: セキュアブートを無効にします。セキュアブートは、ブートレベルやカーネルレベルの不正ソフトウェアとルートキットから VM インスタンスを保護します。詳細については、セキュアブートをご覧ください。
  • --no-shielded-vm-vtpm: Virtual Trusted Platform Module(vTPM)を無効にします。vTPM を有効にすると、メジャード ブートが有効になり、これによって VM の起動前と起動時の整合性が検証されます。詳細については、Virtual Trusted Platform Module(vTPM)をご覧ください。

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

使用可能なフラグの一覧については、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://www.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://www.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://www.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: Virtual Trusted Platform Module(vTPM)を有効または無効にします。vTPM を使用すると、メジャード ブートが有効になり、それによって VM の起動前と起動時の整合性が検証されます。詳細については、Virtual Trusted Platform Module(vTPM)をご覧ください。
  • enableIntegrityMonitoring: 整合性のモニタリングを有効または無効にします。整合性モニタリングを使用すると、Shielded VM インスタンスの実行時の起動の整合性を Stackdriver レポートでモニタリングして検証できます。詳細については、整合性モニタリングをご覧ください。

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

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

--source-instance フラグと --source-instance-zone フラグを使用すると、既存の仮想マシン インスタンスの構成をインスタンス テンプレートに保存できます。必要に応じて、テンプレートでインスタンスのソースディスクが定義される方法をオーバーライドできます。

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

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

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

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

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] は、インスタンスが削除されたときにディスクを自動削除するかどうかを指定します。有効な値は、falsenotrue、および yes です。

たとえば、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://www.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://www.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"
      }
    ]
  }
}

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

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

Console

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

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

  2. [インスタンス テンプレートを作成] をクリックします。
  3. [コンテナ] セクションで、[この VM インスタンスにコンテナ イメージをデプロイします。] チェックボックスをオンにします。
  4. [コンテナ イメージ] で使用するコンテナ イメージを指定します。
    • たとえば、Cloud Launcher から NGINX 1.12 コンテナ イメージを選択するには、gcr.io/cloud-marketplace/google/nginx1: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 に置き換えます。注: サブネットの名前を使用すると、Google はターゲット リージョン内でそのサブネットを見つけます(存在する場合)。一方、サブネットの URL を使用すると、作成されるインスタンス テンプレートは、そのサブネット URL に関連付けられている特定のリージョン内にインスタンスを作成する場合でなければ使用できません。

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

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

Created [https://www.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

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

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

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

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

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

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

次のステップ

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

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

Compute Engine ドキュメント