外部ホストでのテンプレートの保存

このドキュメントは、デプロイにおいて、ローカルマシンではなくインターネット上でホストされている外部テンプレートを使用する方法について説明します。

インターネット上の外部ホストにテンプレートを保存し、構成内から呼び出すことができます。テンプレートを外部でホストする方法は、テンプレートをローカルで保存する方法に比べてさまざまなメリットがあります。

  • 他のユーザーと簡単にテンプレートを共有できます。
  • 常に最新のテンプレートが構成で使用されます。
  • 関連するインポートやスキーマを自動的に管理できます。

構成を再デプロイするたびに、Deployment Manager は常に最新バージョンの外部テンプレートをフェッチします。テンプレートのメンテナンスを行うと、デプロイも常に最新の状態が維持されます。また、外部テンプレート内で別のテンプレートが参照されている場合、Deployment Manager は、そのような依存テンプレートのインポートもユーザーに代わって処理します。

次の構成は、外部テンプレートをインポートします。

resources:
- name: my-frontend
  type: gs://my-frontend-templates/webserver-frontend.jinja

始める前に

外部テンプレートをホストする

Google Cloud Storage 上や、GitHub といった一般公開されている場所で、外部テンプレートをホストできます。ファイルを示す URL が存在し、テンプレートにアクセスできれば、Deployment Manager でダウンロードできます。ファイルが他のテンプレートをインポートするスキーマを使用している場合は、そのようなテンプレートも同一のベース URL でホストする必要があります。

Google Cloud Storage 上の場合

Google Cloud Storage でテンプレートをホストするには:

  1. テンプレート用のバケットを作成するか、既存のバケットを使用します。
  2. バケットにテンプレートをアップロードします。スキーマなどの関連テンプレート ファイルも一緒にバケットにアップロードします。
  3. 今回のテンプレートが属する Google Cloud Platform プロジェクトとは異なるプロジェクトに属するテンプレートを使用する予定がある場合は、アクセス制御を設定して、そのアクセスを許可するようにします。

Google Cloud Storage でテンプレートをホストした場合、対象の Cloud Storage バケットやテンプレートに対してアクセス制御オプションを設定できるため、テンプレートへのアクセス権限を制御できるようになります。

これに対し、他の一般公開 URL 上でテンプレートをホストする場合、テンプレートを広く利用できるようにする必要があります。

一般公開 URL 上の場合

Google Cloud Storage 以外でも、一般公開されているテンプレートであれば、外部テンプレートとしてホストできます。たとえば、GitHub 上でテンプレートをホストし、GitHub URL を使用してそのテンプレートを参照できます。

GitHub の場合に限り、未加工の GitHub URL を指定する必要があります。これにより、Deployment Manager は HTML GitHub ページではなく、テンプレートを取得できます。たとえば、未加工の URL は次のようになります。

https://raw.githubusercontent.com/GoogleCloudPlatform/deploymentmanager-samples/master/examples/v2/single_vm/jinja/vm_template.jinja

外部テンプレートを呼び出す

ローカル テンプレートと同様に、外部テンプレートを呼び出すことができます。ただし、テンプレート ファイルの完全な URL をタイプとして指定する必要があります。たとえば、次のように設定します。

resources:
- name: my-salt-cluster
  type: gs://v2/saltstack/salt_cluster.jinja

GitHub URL の場合:

resources:
- name: my-salt-cluster
  type: https://raw.githubusercontent.com/GoogleCloudPlatform/deploymentmanager-samples/master/examples/v2/single_vm/vm_template.jinja

外部テンプレートが他のテンプレートをインポートする場合、あるいは付属スキーマが存在する場合は、元のテンプレートと同じディレクトリまたはそのサブディレクトリに関連ファイルを保存し、相対 URL で指定できます。Deployment Manager は、ベース URL を基に、相対パスを使用して追加テンプレートや関連ファイルの場所を特定します。

たとえば、構成ファイルが

resources:
- name: my-salt-cluster
  type: gs://v2/saltstack/salt_cluster.jinja

のような内容で、これらのファイルをインポートする次のような salt_cluster.jinja.schema という名前のスキーマ ファイルがあった場合:

imports:
- path: minion.py
- path: master.py
- path: examples/source/example.py

Deployment Manager は、元のテンプレートに必要なすべてのファイルを自動的にダウンロードして、インポートします。