このページでは、インスタンス テンプレートの作成および管理方法について説明します。インスタンス テンプレートを使用すると、新しい VM インスタンスを作成するときに使用するマシンタイプ、ブートディスク イメージまたはコンテナ イメージ、ネットワーク、その他のインスタンス プロパティを定義できます。インスタンス テンプレートを使用すると、マネージド インスタンス グループに属するインスタンスを作成できます。また、個々のインスタンスを作成することもできます。
始める前に
- このガイドのコマンドラインの例を使用する場合、以下を行います。
- gcloud コマンドライン ツールの最新バージョンをインストールするか、最新バージョンに更新します。
- デフォルトのリージョンとゾーンを設定します。
- このガイドの API の例を使用する場合、API アクセスを設定します。
新しいインスタンス テンプレートの作成
インスタンス メタデータ、起動スクリプト、永続ディスク、サービス アカウントなど、通常の API リクエストで個々の VM インスタンスを作成する際に定義できるほとんどのインスタンス プロパティは、インスタンス テンプレートで定義できます。
インスタンス テンプレートの作成には最低限、インスタンスの作成に必要なプロパティと同じプロパティが必要になります。必須フィールドの一覧については、instanceTemplates().insert
のリファレンスをご覧ください。
インスタンス テンプレートを作成するには、Google Cloud Platform Console、gcloud compute
ツール、または API のいずれかを使用します。
Console
- GCP Console で、[インスタンス テンプレート] ページに移動します。
- [インスタンス テンプレートを作成] をクリックします。
インスタンス テンプレートに使用する各フィールドの値を入力するか、またはデフォルトの値を受け入れます。デフォルトの値は次のとおりです。
- マシンタイプ: n1-standard-1
- イメージ: 最新の Debian イメージ
- ブートディスク: インスタンスにちなんで名付けられた新しい標準のブートディスク
- VPC ネットワーク:
default
VPC ネットワーク - IP アドレス: エフェメラル外部 IP アドレス
Shielded VM をサポートするイメージを選択した場合は、インスタンスの Shielded VM の設定を必要に応じて変更します。
- [管理、セキュリティ、ディスク、ネットワーク、単一テナンシー] セクションで [セキュリティ] タブをクリックします。
- セキュアブートを無効にする場合は、[セキュアブートをオンにします] をオフにします。セキュアブートは、ブートレベルとカーネルレベルの不正なソフトウェアとルートキットから VM インスタンスを保護します。詳細については、セキュアブートをご覧ください。
Virtual Trusted Platform Module(vTPM)を無効にする場合は [vTPM をオンにします] をオフにします。vTPM を使用すると、メジャード ブートが有効になり、それによって VM の起動前と起動時の整合性が検証されます。詳細については、Virtual Trusted Platform Module(vTPM)をご覧ください。
整合性のモニタリングを無効にする場合は、[整合性のモニタリングを有効にする] をオフにします。整合性のモニタリングを使用すると、Shielded VM インスタンスの起動時の整合性を Stackdriver でモニタリングできます。詳細については、整合性のモニタリングをご覧ください。
必要に応じて、[管理、セキュリティ、ディスク、ネットワーク、単一テナンシー] セクションのタブをクリックし、テンプレートをさらにカスタマイズします。たとえば、ブートディスク以外のセカンダリ ディスクを最大 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 イメージ
- ブートディスク: インスタンスにちなんで名付けられた新しい標準のブートディスク
- ネットワーク:
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
プロパティを指定します。空のディスクを作成するには、これらのプロパティを指定しないでください。ディスクの 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-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
を指定しないでください。必要に応じて、diskSizeGb
、diskType
、labels
プロパティを指定できます。
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
フラグを使用すると、既存の仮想マシン インスタンスの構成をインスタンス テンプレートに保存できます。必要に応じて、テンプレートでインスタンスのソースディスクが定義される方法をオーバーライドできます。
次の表に、テンプレートでのディスクの定義方法をオーバーライドするためのオプションを示します。
ディスクタイプ | オプション |
---|---|
ブートディスク |
|
その他の読み取り / 書き込み用の永続ディスク |
|
読み取り専用ディスク |
|
ローカル 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]
は、インスタンスが削除されたときにディスクを自動削除するかどうかを指定します。有効な値は、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://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
- [インスタンス テンプレート] ページに移動します。
- [インスタンス テンプレートを作成] をクリックします。
- [コンテナ] セクションで、[この VM インスタンスにコンテナ イメージをデプロイします。] チェックボックスをオンにします。
- [コンテナ イメージ] で使用するコンテナ イメージを指定します。
- たとえば、Cloud Launcher から NGINX 1.12 コンテナ イメージを選択するには、
gcr.io/cloud-marketplace/google/nginx1:1.12
を指定できます。 - Docker Hub のコンテナ イメージを使用する場合は、常に完全な Docker イメージ名を指定します。たとえば、Apache コンテナ イメージをデプロイするには、イメージ名
docker.io/httpd:2.4
を指定します。
- たとえば、Cloud Launcher から NGINX 1.12 コンテナ イメージを選択するには、
- 必要に応じて、[コンテナの詳細オプション] をクリックします。詳細については、コンテナを実行する際のオプションの構成をご覧ください。
- [作成] をクリックします。
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
このテンプレートを使用してマネージド インスタンス グループのインスタンスを作成すると(自動スケーリングの設定は任意)、指定したリージョンおよびサブネットにインスタンスが自動的に作成されます。これにより、負荷分散のために新規に作成するインスタンスのサブネットを制御できるようになります。
インスタンス テンプレートでのカスタム イメージまたはパブリック イメージの使用
マネージド インスタンス グループはインスタンスの追加と削除が頻繁に行われることを想定した設計であるため、カスタム イメージを作成してそれをインスタンス テンプレートで指定するようにすると便利です。インスタンスで必要とするアプリケーションと設定をイメージで用意しておくと、マネージド インスタンス グループ内の個々のインスタンスにこれらを手動で構成する必要がなくなります。
また、公開イメージと起動スクリプトを使用するインスタンス テンプレートを作成し、起動後にインスタンスを作成することもできます。カスタム イメージは起動スクリプトを使用するインスタンスより確定的であり、起動時間が短くなります。ただし、起動スクリプトのほうが柔軟性が高く、インスタンス内のアプリケーションと設定を簡単に更新できます。
インスタンス テンプレートの更新
既存のインスタンス テンプレートを更新したり、作成したインスタンス テンプレートを変更したりすることはできません。インスタンス テンプレートが最新でなくなった場合や、構成の変更が必要になった場合は、新しいインスタンス テンプレートを作成してください。
次のステップ
- 確定的なインスタンス テンプレートを作成するためのヒントを読む。
- インスタンス テンプレートから VM インスタンスを作成する。
- ゾーン マネージド インスタンス グループを作成する。
- リージョン マネージド インスタンス グループを作成する。