このページでは、インスタンス テンプレートの作成および管理方法について説明します。インスタンス テンプレートを使用すると、仮想マシン(VM)インスタンスの作成に使用するマシンタイプ、ブートディスク イメージ、ネットワーク、その他の VM プロパティを指定できます。
インスタンス テンプレートを使用すると、次のことができます。
- 個別の VM を作成します。
- マネージド インスタンス グループ(MIG)内の VM を作成する。
- VM の予約を作成します。
始める前に
- このガイドのコマンドラインの例を使用する場合は、次の操作を行います。
- Google Cloud CLI の最新バージョンをインストールするか、最新バージョンに更新します。
- デフォルトのリージョンとゾーンを設定します。
- このガイドの API の例を使用する場合、API アクセスを設定します。
- 確定的なインスタンス テンプレートを作成する条件と理由を確認してください。
制限事項
- インスタンス テンプレートで
nic0
以外のインターフェースの共有 VPC は、gcloud CLI と API ではサポートされますが、Google Cloud コンソールではサポートされません。 - 既存のインスタンス テンプレートを更新することはできません。また、インスタンス テンプレートの作成後に変更することもできません。インスタンス テンプレートが最新でなくなった場合や、構成の変更が必要になった場合は、新しいインスタンス テンプレートを作成してください。
新しいインスタンス テンプレートを作成
VM メタデータ、起動スクリプト、永続ディスク、サービス アカウントなど、リクエストで個々の VM インスタンスを作成する際に指定できる大半の VM プロパティはインスタンス テンプレートでも指定できます。マシンタイプ、ブートディスク、ネットワークを指定する必要があります。
Google Cloud コンソール、Google Cloud CLI、API、Terraform、または Cloud クライアント ライブラリを通してインスタンス テンプレートを作成します。
Console
Google Cloud コンソールで、[インスタンス テンプレート] ページに移動します。
残りの手順は、Google Cloud コンソールに自動的に表示されます。
- [
インスタンス テンプレートを作成 ] をクリックします。 次のフィールドでは、デフォルト値をそのまま使用するか、必要に応じて変更します。 デフォルト値は、選択したマシン ファミリーに応じて変わります。
- [
マシンタイプ ] を選択します。 - ブートディスクの種類またはイメージを更新するには、[
ブートディスク ] をクリックし、[変更] をクリックします。 - ネットワーク インターフェースまたは IP アドレスの設定を更新するには、[
詳細オプション ]、[ネットワーキング] の順にクリックし、編集するネットワーク インターフェースをクリックします。
- [
省略可: Shielded VM をサポートするイメージを選択した場合は、VM の Shielded VM の設定を変更します。
- [管理、セキュリティ、ディスク、ネットワーク、単一テナンシー] をクリックし、[セキュリティ] タブをクリックします。
- セキュアブートを無効にする場合は、[セキュアブートをオンにする] チェックボックスをオフにします。セキュアブートは、ブートレベルやカーネルレベルの不正ソフトウェアとルートキットから VM インスタンスを保護します。詳細については、セキュアブートをご覧ください。
仮想トラステッド プラットフォーム モジュール(vTPM)を無効にする場合は、[vTPM をオンにする] チェックボックスをオフにします。vTPM を使用すると、メジャード ブートが有効になり、それによって VM の起動前と起動時の整合性が検証されます。詳細については、Virtual Trusted Platform Module(vTPM)をご覧ください。
整合性モニタリングを無効にする場合は、[整合性のモニタリングを有効にする] チェックボックスをオフにします。整合性モニタリングを使用すると、Shielded VM インスタンス起動時の整合性を Cloud Monitoring でモニタリングできます。詳細については、整合性モニタリングをご覧ください。
省略可: [管理、セキュリティ、ディスク、ネットワーク、単一テナンシー] で、テンプレートをさらにカスタマイズするタブをクリックします。たとえば、ブートディスク以外のセカンダリ ディスクを最大 15 個追加できます。
省略可: [同等の REST] をクリックして REST リクエストの本文を表示します。リクエストの本文には、インスタンス テンプレートの JSON 表現が含まれています。
[作成] をクリックしてテンプレートを作成します。
gcloud
gcloud compute
で、instance-templates create
コマンドを使用してインスタンス テンプレートを作成します。
gcloud compute instance-templates create INSTANCE_TEMPLATE_NAME
INSTANCE_TEMPLATE_NAME
は、インスタンス テンプレートの名前に置き換えます。
明示的なテンプレート設定を指定しない場合は、gcloud compute
は次のデフォルト値を使用します。
- マシンタイプ: マシンタイプ(
n1-standard-1
など) - イメージ: 最新の Debian イメージ
- ブートディスク: VM にちなんで名付けられた新しい標準のブートディスク
- ネットワーク: デフォルトの 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
プロパティを指定します。空のディスクを作成するには、これらのプロパティを指定しないでください。ディスクの size
と type
のプロパティは必要に応じて指定してください。リージョン永続ディスクを指定するには、replica-zones
プロパティを使用します。
gcloud compute instance-templates create INSTANCE_TEMPLATE_NAME \ --zone=ZONE \ --create-disk= \ {image=DISK_IMAGE | image-family=DISK_IMAGE_FAMILY}, \ image-project=DISK_IMAGE_PROJECT, \ size=SIZE_GB \ --create-disk= \ device-name=DISK_NAME, \ replica-zones=^:^ZONE:REMOTE_ZONE,boot=false
以下を置き換えます。
INSTANCE_TEMPLATE_NAME
: 新しいテンプレートの名前ZONE
: VM を作成するゾーン-
DISK_IMAGE
またはDISK_IMAGE_FAMILY
: 次のいずれかを指定します。DISK_IMAGE
: 非ブートディスクとして使用するイメージの名前DISK_IMAGE_FAMILY
: 非ブートディスクとして使用するイメージ ファミリーイメージ ファミリーの詳細については、Compute Engine でイメージ ファミリーを使用する場合のベスト プラクティスをご覧ください。
DISK_IMAGE_PROJECT
: イメージを含むイメージ プロジェクト空のディスクには、
image-project
プロパティを指定しないでください。公開イメージの詳細については、公開イメージをご覧ください。SIZE_GB
: セカンダリ ディスクのサイズ。DISK_NAME
: 省略可。VM の作成後にゲスト OS に表示されるディスク名。REMOTE_ZONE
: ディスクを複製するゾーンゾーンディスクの場合は、
replica-zones
プロパティを含めないでください。
空のディスクには、image
プロパティを指定しないでください。
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
Terraform
インスタンス テンプレートを作成するには、google_compute_instance_template
リソースを使用します。
この Terraform の例は、次の gcloud CLI コマンドと類似しています。
gcloud compute instance-templates create my-instance-template \ --machine-type=e2-standard-4 \ --image-family=debian-9 \ --image-project=debian-cloud \ --boot-disk-size=250GB
Terraform 構成を適用または削除する方法については、基本的な Terraform コマンドをご覧ください。
API
インスタンス テンプレートを作成するには、instanceTemplates.insert
メソッドに POST
リクエストを送信します。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/instanceTemplates
PROJECT_ID をプロジェクト ID で置き換えます。
disks
プロパティに、ディスクごとに 1 つのフィールドを指定して、最大 15 個のセカンダリ非ブートディスクを追加できます。追加するディスクごとに、次のことができます。
- 公開イメージまたは非公開イメージを使用した追加のディスクを作成します。
- 空のディスクを追加するには、
sourceImage
値のないinitializeParams
エントリを定義します。 - リージョン永続ディスクを作成するには、プロパティ
replicaZones
を使用してinitializeParams
エントリを定義します。
リクエストの本文で、テンプレート プロパティを指定します。
{ "name": "INSTANCE_TEMPLATE_NAME", "properties": { "machineType": "zones/ZONE/machineTypes/MACHINE_TYPE", "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/IMAGE_PROJECT/global/images/IMAGE" } }, { "type": "PERSISTENT", "boot": false, "deviceName": "DISK_NAME", "initializeParams": { "replicaZones": [ "projects/PROJECT_NAME/zones/ZONE", "projects/PROJECT_NAME/zones/REMOTE_ZONE" ] } } ] } }
次のように置き換えます。
INSTANCE_TEMPLATE_NAME
: インスタンス テンプレートの名前ZONE
: VM を配置するゾーンMACHINE_TYPE
: VM のマシンタイプ-
IMAGE_PROJECT
: イメージを含むイメージ プロジェクト公開イメージの詳細については、公開イメージをご覧ください。
IMAGE
またはIMAGE_FAMILY
: 次のいずれかを指定します。-
IMAGE
: 特定のバージョンのイメージ例:
"sourceImage": "projects/debian-cloud/global/images/debian-10-buster-v20200309"
IMAGE_FAMILY
: イメージ ファミリーこれにより、非推奨ではない最新の OS イメージから VM が作成されます。たとえば、
"sourceImage": "projects/debian-cloud/global/images/family/debian-10"
を指定すると、Compute Engine は Debian 10 イメージ ファミリーの OS イメージの最新バージョンから VM を作成します。イメージ ファミリーの詳細については、Compute Engine でイメージ ファミリーを使用する場合のベスト プラクティスをご覧ください。
-
DISK_NAME
: 省略可。VM の作成後にゲスト OS に表示されるディスク名。PROJECT_NAME
: VM に関連付けられているプロジェクトREMOTE_ZONE
: リージョン ディスクのレプリケーション先となるゾーン
disks
プロパティには、次のいずれかのオプションを指定できます。
インスタンスごとに永続ブートディスクを作成するには、
initializeParams
を指定します。追加するディスクごとにinitializeParams
プロパティを使用して、最大 15 個のセカンダリ非ブートディスクを追加できます。前の例に示すように、公開イメージまたはカスタム イメージ(またはイメージ ファミリー)をsourceImage
に使用してディスクを作成できます。空のディスクを追加するには、sourceImage
を指定しないでください。既存の永続ブートディスクをアタッチするには、
source
を指定します。既存のブートディスクをアタッチした場合、テンプレートから作成できるインスタンスは 1 つのみです。
initializeParams
には diskSizeGb
、diskType
、labels
のプロパティを、source
には diskSizeGb
プロパティを必要に応じて指定します。
Shielded VM をサポートするイメージを選択した場合は、必要に応じて次のブール値の項目をリクエスト本文で使用して、VM の Shielded VM の設定を変更できます。
enableSecureBoot
: セキュアブートをオンまたはオフにします。セキュアブートは、ブートレベルとカーネルレベルのマルウェアとルートキットから VM インスタンスを保護します。詳細については、セキュアブートをご覧ください。
enableVtpm
: 仮想トラステッド プラットフォーム モジュール(vTPM)をオンまたはオフにします。vTPM を使用すると、メジャード ブートが有効になり、それによって VM の起動前と起動時の整合性が検証されます。詳細については、仮想トラステッド プラットフォーム モジュール(vTPM)をご覧ください。
enableIntegrityMonitoring
: 整合性モニタリングをオンまたはオフにします。整合性モニタリングを使用すると、Shielded VM インスタンスの実行時の起動の整合性を Cloud Monitoring レポートでモニタリングして検証できます。詳細については、整合性モニタリングをご覧ください。
リクエスト パラメータの詳細については、instanceTemplates.insert
メソッドをご覧ください。
Go
Java
Node.js
Python
既存のインスタンスに基づくインスタンス テンプレートの作成
Compute Engine API または gcloud CLI を使用して、既存の VM インスタンスの構成をインスタンス テンプレートとして保存できます。必要に応じて、テンプレートで、ソースディスクの定義方法をオーバーライドできます。
他のプロパティをオーバーライドする必要がある場合は、既存のインスタンスに基づいてインスタンス テンプレートを作成してから、オーバーライドを追加した同様のテンプレートを作成します。
gcloud
--source-instance
フラグと --source-instance-zone
フラグを指定して、gcloud compute 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_OPTIONS, \ auto-delete=AUTO_DELETE
次のように置き換えます。
INSTANCE_TEMPLATE_NAME
は、作成するテンプレートの名前です。SOURCE_INSTANCE
は、新しいテンプレートのモデルとして使用するインスタンスの名前です。SOURCE_INSTANCE_ZONE
は、ソース インスタンスを含むゾーンです。SOURCE_DISK
は、テンプレート内でオーバーライドするソース インスタンスのディスクの名前です。INSTANTIATE_OPTIONS
は、ディスクを組み込むかどうか、組み込む場合はどのイメージを使用するかを指定します。有効な値は、ディスクのタイプによって異なります。source-image
またはsource-image-family
(ブートディスクとその他の読み取り / 書き込み用の永続ディスクにのみ有効)。ソース VM インスタンスでディスクを作成するために使用されたソースイメージまたはソースイメージ ファミリーと同じものを使用する場合は、このオプションを指定します。custom-image
(ブートディスクとその他の読み取り / 書き込み用の永続ディスクにのみ有効)。インスタンス テンプレート内のソース VM のアプリケーションと設定を保持する場合は、カスタム イメージを作成して、テンプレートを作成するときに指定できます。指定する場合、次の例のようにカスタム イメージのパスまたは URL を指定します。また、次の形式を使用してイメージ ファミリーを指定することもできます。--configure-disk=device-name=DATA_DISK_NAME,instantiate-from=custom-image,
custom-image=projects/PROJECT_ID/global/images/family/IMAGE_FAMILY_NAMEattach-read-only
(読み取り専用ディスクにのみ有効)。blank
(ブートディスク以外の永続ディスクとローカル SSD にのみ有効)。指定した場合、テンプレートを使用して新しいインスタンスを作成すると、ディスクはフォーマットされていない状態で作成されます。スケーラブルな設定でディスクを使用するには、起動スクリプトでディスクをフォーマットしてマウントする必要があります。do-not-include
(ブートディスク以外の永続ディスクと読み取り専用ディスクにのみ有効)。
インスタンスを削除したときに
AUTO_DELETE
でディスクを自動削除するかどうかを指定します。有効な値はfalse
、no
、true
、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/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_OPTIONS", "autoDelete": false } ] } }
次のように置き換えます。
PROJECT_ID
: リクエストのプロジェクト IDINSTANCE_TEMPLATE_NAME
: 新しいテンプレートの名前SOURCE_INSTANCE_ZONE
: ソース インスタンスのゾーンSOURCE_INSTANCE
: このインスタンス テンプレートのモデルとして使用するソース インスタンスの名前SOURCE_DISK
: テンプレート内でオーバーライドするソース インスタンスのディスクの名前INSTANTIATE_OPTIONS
: ディスクを組み込むかどうかを指定します。組み込む場合は、どのイメージを使用するかを指定します。有効な値は、ディスクのタイプによって異なります。
source-image
またはsource-image-family
(ブートディスクとその他の読み取り / 書き込み用の永続ディスクにのみ有効)。custom-image
(ブートディスクとその他の読み取り / 書き込み用の永続ディスクにのみ有効)。インスタンス テンプレート内のソース VM のアプリケーションと設定を保持する場合は、カスタム イメージを作成して、テンプレートを作成するときに指定できます。指定する場合、次の例のようにカスタム イメージのパスまたは URL を指定します。また、次の形式を使用してイメージ ファミリーを指定することもできます。--configure-disk=device-name=DATA_DISK_NAME,instantiate-from=custom-image,
custom-image=projects/PROJECT_ID/global/images/family/IMAGE_FAMILY_NAMEattach-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" } ] } }