このページでは、インスタンス テンプレートの作成および管理方法について説明します。インスタンス テンプレートを使用すると、仮想マシン(VM)インスタンスを作成するときに使用するマシンタイプ、ブートディスク イメージまたはコンテナ イメージ、ネットワーク、その他のインスタンス プロパティを定義できます。インスタンス テンプレートを使用して、マネージド インスタンス グループ(MIG)に属するインスタンスや個々のインスタンスを作成できます。
始める前に
- このガイドのコマンドラインの例を使用する場合、以下を行ってください。
- gcloud コマンドライン ツールの最新バージョンをインストールするか、最新バージョンに更新します。
- デフォルトのリージョンとゾーンを設定します。
- このガイドの API の例を使用する場合、API アクセスを設定します。
新しいインスタンス テンプレートの作成
インスタンス メタデータ、起動スクリプト、永続ディスク、サービス アカウントなど、通常の API リクエストで個々の VM インスタンスを作成する際に定義できるほとんどのインスタンス プロパティは、インスタンス テンプレートで定義できます。
インスタンス テンプレートの作成には最低限、インスタンスの作成に必要なプロパティと同じプロパティが必要になります。必須項目のリストについては、instanceTemplates.insert
リファレンスをご覧ください。
Google Cloud Console、gcloud
コマンドライン ツール、または API を使用してインスタンス テンプレートを作成します。
コンソール
Cloud Console で、[インスタンス テンプレート] ページに移動します。
[インスタンス テンプレートを作成] をクリックします。
インスタンス テンプレートに使用する各フィールドの値を入力するか、またはデフォルトの値を受け入れます。デフォルトの値は次のとおりです。
- マシンタイプ:
e2-standard-2
- イメージ: 最新の Debian イメージ
- ブートディスク: インスタンスにちなんで名付けられた新しい標準のブートディスク
- VPC ネットワーク:
default
VPC ネットワーク - IP アドレス: エフェメラル外部 IP アドレス
- マシンタイプ:
Shielded VM をサポートするイメージを選択した場合は、インスタンスの Shielded VM の設定を必要に応じて変更します。
- [管理、セキュリティ、ディスク、ネットワーク、単一テナンシー] セクションで [セキュリティ] タブをクリックします。
- セキュアブートを無効にする場合は、[セキュアブートをオンにする] チェックボックスをオフにします。セキュアブートは、ブートレベルやカーネルレベルのマルウェアとルートキットから VM インスタンスを保護します。詳細については、セキュアブートをご覧ください。
仮想トラステッド プラットフォーム モジュール(vTPM)を無効にする場合は、[vTPM をオンにする] チェックボックスをオフにします。vTPM を使用すると、メジャード ブートが有効になり、それによって VM の起動前と起動時の整合性が検証されます。詳細については、仮想トラステッド プラットフォーム モジュール(vTPM)をご覧ください。
整合性モニタリングを無効にする場合は、[整合性のモニタリングを有効にする] チェックボックスをオフにします。整合性モニタリングを使用すると、Shielded VM インスタンス起動時の整合性を Cloud Monitoring でモニタリングできます。詳細については、整合性モニタリングをご覧ください。
必要に応じて、[管理、セキュリティ、ディスク、ネットワーク、単一テナンシー] セクションのタブをクリックし、テンプレートをさらにカスタマイズします。たとえば、ブートディスク以外のセカンダリ ディスクを最大 15 個追加できます。
必要に応じて、ページの下部にある [同等の REST] をクリックして REST リクエストの本文を表示します。リクエストの本文には、インスタンス テンプレートの JSON 表現が含まれています。
[作成] をクリックしてテンプレートを作成します。
gcloud
gcloud compute
で、instance-templates create
コマンドを使用してインスタンス テンプレートを作成します。INSTANCE_TEMPLATE_NAME
は、インスタンス テンプレートの名前で置き換えます。
gcloud compute instance-templates create INSTANCE_TEMPLATE_NAME
明示的なテンプレート設定を指定しない場合には、gcloud compute
により次のデフォルト値を持つテンプレートが作成されます。
- マシンタイプ:
e2-standard-2
- イメージ: 最新の Debian イメージ
- ブートディスク: インスタンスにちなんで名付けられた新しい標準のブートディスク
- ネットワーク:
default
VPC ネットワーク - IP アドレス: エフェメラル外部 IP アドレス
これらの構成設定は明示的に指定することもできます。例:
gcloud compute instance-templates create example-template-custom \
--machine-type e2-standard-4 \
--image-family debian-9 \
--image-project debian-cloud \
--boot-disk-size 250GB
ブートディスク以外のセカンダリ ディスクを最大 15 個追加できます。作成するセカンダリ ディスクごとに --create-disk
フラグを指定します。公開イメージまたはストック イメージからセカンダリ ディスクを作成するには、--create-disk
フラグに image
および image-project
プロパティを指定します。空のディスクを作成するには、これらのプロパティを指定しないでください。ディスクの size
と type
のプロパティは必要に応じて指定してください。
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: '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-9 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
インスタンス テンプレートの 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-9"
}
}
]
}
}
disks
プロパティを使用する場合は、initializeParams
プロパティを使用してインスタンスごとに新しい永続ブートディスクを作成するか、source
プロパティを使用して既存の永続ブートディスクを関連付けます。既存のブートディスクを関連付けた場合、テンプレートから作成できるインスタンスは 1 つだけになります。
追加するディスクごとに initializeParams
プロパティを使用して、最大 15 個のセカンダリ非ブートディスクを追加できます。公開イメージまたは非公開イメージで追加のディスクを作成します。空のディスクを追加するには、sourceImage
を指定しないでください。必要に応じて、diskSizeGb
、diskType
、labels
の各プロパティを指定できます。
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]
でディスクを自動削除するかどうかを指定します。有効な値は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/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"
}
]
}
}
次の表は、テンプレートでディスクの定義方法をオーバーライドするオプションを示しています。
ディスクタイプ | オプション |
---|---|
ブートディスク |
|
その他の読み取り / 書き込み用の永続ディスク |
|
読み取り専用ディスク |
|
ローカル SSD |
|
ディスクごとで auto-delete
属性をオーバーライドして、関連付けられたインスタンスが削除されるときにディスクを削除するかどうかも指定できます。
デフォルトでは、オーバーライド オプションが指定されていない場合、テンプレート内のディスク構成はソース インスタンスと同じになります。
既存のテンプレートに基づくインスタンス テンプレートの作成
既存のインスタンス テンプレートを更新することはできません。ただし、インスタンス テンプレートが古くなった場合や、インスタンス テンプレートに変更を加える必要がある場合は、同様のプロパティを持つ別のインスタンス テンプレートを作成できます。それには、Console を使用します。
[インスタンス テンプレート] ページに移動します。
コピーして更新するインスタンス テンプレートをクリックします。
[同様のものを作成] をクリックします。
新しいテンプレートで構成を更新します。
[作成] をクリックします。
コンテナ イメージを指定したインスタンス テンプレートの作成
インスタンス テンプレートでコンテナ イメージを指定できます。デフォルトでは、Compute Engine によって、Docker がインストールされた Container-Optimized OS イメージもテンプレートに組み込まれます。テンプレートを使用して新しいインスタンスを作成すると、インスタンスの起動時にコンテナが自動的に起動されます。
コンソール
[インスタンス テンプレート] ページに移動します。
[インスタンス テンプレートを作成] をクリックします。
[コンテナ] セクションで、[この VM インスタンスにコンテナ イメージをデプロイします。] チェックボックスをオンにします。
[コンテナ イメージ] で使用するコンテナ イメージを指定します。
- 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
を指定します。
- Container Registry または Artifact Registry からイメージを指定できます。例:
必要に応じて、[コンテナの詳細オプション] をクリックします。詳細については、コンテナを実行する際のオプションの構成をご覧ください。
[作成] をクリックします。
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 e2-standard-2 2019-12-23T20:34:00.791-07:00
このテンプレートを使用してマネージド インスタンス グループのインスタンスを作成すると(自動スケーリングの設定は任意)、指定したリージョンおよびサブネットにインスタンスが自動的に作成されます。これにより、負荷分散のために新規に作成するインスタンスのサブネットを制御できるようになります。
インスタンス テンプレートでのカスタム イメージまたはパブリック イメージの使用
マネージド インスタンス グループはインスタンスの追加と削除が頻繁に行われることを想定した設計であるため、カスタム イメージを作成してそれをインスタンス テンプレートで指定するようにすると便利です。インスタンスに必要なアプリと設定を使用したイメージを準備します。こうすると、MIG の個々のインスタンスでこうしたアイテムを手動で構成する必要がなくなります。
代わりに、公開イメージと起動スクリプトを使用するインスタンス テンプレートを作成し、それを起動してインスタンスを準備することもできます。カスタム イメージは起動スクリプトを使用するインスタンスより確定的であり、起動時間が短くなります。ただし、起動スクリプトのほうが柔軟性が高く、インスタンス内のアプリケーションと設定を簡単に更新できます。
インスタンス テンプレートの更新
既存のインスタンス テンプレートを更新することはできません。また、インスタンス テンプレートの作成後に変更することもできません。インスタンス テンプレートが最新でなくなった場合や、構成の変更が必要になった場合は、新しいインスタンス テンプレートを作成してください。
次のステップ
- 確定的なインスタンス テンプレートを作成するためのヒントを読む。
- インスタンス テンプレートから VM インスタンスを作成する。
- ゾーン MIG を作成する。
- リージョン MIG を作成する。