簡単なワークロードの場合、基本的な構成ファイルで十分ですが、より複雑なアーキテクチャや再利用を行う構成の場合、構成を複数のテンプレートに分割することができます。
テンプレートは、構成でタイプとしてインポートされ、使用される個別のファイルです。テンプレートは、構成で必要な数だけ使用できます。
テンプレートを使用すると、構成をさまざまな部分に分割し、別のデプロイで再利用できます。テンプレートは、必要に応じて汎用化することも、特化することもできます。テンプレートを使えば、動的な構成やテンプレート ファイルを作成するときに、テンプレート プロパティ、環境変数、モジュール、他のテンプレート機能などを利用できます。
独自のデプロイで使用できるテンプレートの例については、Deployment Manager GitHub リポジトリをご覧ください。
始める前に
- このガイドのコマンドラインの例を使用する場合、gcloud コマンドライン ツールをインストールします。
- このガイドの API の例を使用する場合は、API アクセスを設定します。
- 基本的な構成の作成方法を理解しておきます。
テンプレートの構文
テンプレートは、Jinja 2.10.x または Python 3.x で記述します。 YAML 構文により対応しているのは Jinja です。YAML に慣れている場合には、テンプレートを Jinja で作成するほうが簡単です。
テンプレート ファイルは Python で記述することもできます。Python を使用すると、テンプレートの一部を自動的に作成できます。たとえば、Python ライブラリを使用して、テンプレート定義をフォーマットできます。Python に慣れている場合には、こちらの方法のほうが簡単です。
Deployment Manager は、Jinja と Python の両方のテンプレートを受け入れます。同じ構成に両方の言語のテンプレートをインポートできます。
基本テンプレートの作成
テンプレートは、Jinja または Python のいずれかで作成したファイルです。たとえば、次の構成ファイルについて考えてみます。
この構成は有効ですが、個別のテンプレート ファイルに分割して再利用できるようにしておくと、構成をさらに簡素化できます。上の構成に基づいてテンプレートを作成するには、該当するリソースのセクションを抽出して新しい Jinja または Python ファイルを作成します。
次のスニペットは、デプロイを簡略化できるテンプレートのセクションを示しています。テンプレート全体を表示するには、[GitHub で表示]をクリックします。
Jinja
Python
Python テンプレートは、次の要件を満たす必要があります。
テンプレートには、
GenerateConfig(context)
またはgenerate_config(context)
という名前のメソッドを定義する必要があります。同じテンプレート内で両方のメソッド名を使用する場合、generate_config()
メソッドが優先されます。context
オブジェクトには、デプロイと環境に関するメタデータ(デプロイ名、現在のプロジェクトなど)が含まれています。詳しくは、デプロイメント固有の環境変数の使用をご覧ください。メソッドで Python 辞書を返す必要があります。
この条件を満たしていない場合、自身でテンプレートのコンテンツを生成する必要があります。
例
Python の完全なサンプルについては、Deployment Manager の GitHub リポジトリを参照してください。
テンプレートのインポート
テンプレートを作成したら、構成ファイルにインポートして使用します。テンプレートをインポートするには、構成に imports
セクションを追加し、その後に現在のディレクトリからの相対パスまたは絶対パスを続けます。たとえば、前のステップの仮想マシン用のテンプレートをインポートするには、構成の先頭に次の行を追加します。
imports:
- path: path/to/my_vm_template.jinja
ファイルパスが長い場合、ファイルのエイリアスとして name
プロパティを使用できます。あとでテンプレートを参照するときに、この名前を使用できます。名前を設定しない場合には、path
を使用してテンプレートを参照します。
imports:
- path: path/to/my_vm_template.jinja
name: my_renamed_template.jinja
テンプレートが Jinja か Python かにかかわらず、複数のテンプレートを混在させることができます。また、一致させることもできます。
imports:
- path: path/to/my_vm_template.jinja
name: my_renamed_template.jinja
- path: special_vm.py
テンプレートに別のテンプレートと依存関係がある場合には、依存するテンプレートも構成にインポートします。
imports:
- path: path/to/my_vm_template.jinja
- path: special_vm.py
- path: base_vm.jinja
テキスト ファイルをインポートしてコンテンツをインラインに挿入することもできます。たとえば、次の文字列を含む resource_type.txt という名前のファイルを作成します。
compute.v1.instance
これを構成にインポートし、コンテンツをインラインに挿入します。
imports: - path: resource_type.txt resources: - name: my-vm type: {{ imports["resource_type.txt"] }} # Resolves to "compute.v1.instance" properties: zone: us-central1-a machineType: zones/us-central1-a/machineTypes/f1-micro disks: - deviceName: boot type: PERSISTENT boot: true autoDelete: true initializeParams: sourceImage: projects/debian-cloud/global/images/family/debian-9 networkInterfaces: - network: global/networks/default accessConfigs: - name: External NAT type: ONE_TO_ONE_NAT
テンプレートのデプロイ
テンプレートをインポートしたら、それを構成のタイプとして使用します。
Jinja
Python
テンプレートの名前を設定していない場合には、テンプレート パスでテンプレートを呼び出します。
imports:
- path: path/to/my_vm_template.jinja
resources:
- name: my-first-virtual-machine
type: path/to/my_vm_template.jinja
コマンドライン ツールを使用したテンプレートの直接デプロイ
Deployment Manager には、最上位構成ファイルを作成する代わりに、Google Cloud CLI でテンプレートを直接デプロイする機能があります。
たとえば、次のリクエストでは vm-template.jinja
というテンプレートをデプロイします。
gcloud deployment-manager deployments create a-single-vm --template vm-template.jinja
また、テンプレートにテンプレート プロパティがある場合、コマンドラインで --properties
フラグを使用してプロパティを設定することもできます。
gcloud deployment-manager deployments create my-igm \
--template vm-template.jinja \
--properties zone:us-central1-a
注意すべき点:
すべての値は YAML 値として解析されます。たとえば、
version: 3
は整数として渡されます。文字列として指定するには、version: \'3\'
のように値を一重引用符で囲んでエスケープします。ブール値では大文字と小文字は区別されません。
TRUE
、true
、True
は同じ値として処理されます。テンプレートで定義されたすべての必須プロパティを渡す必要があります。プロパティのサブセットだけを渡すことはできません。特定のプロパティにデフォルト値がある場合は、コマンドラインでそのプロパティを省略できます。
複数のプロパティを指定するには、キー値のペアをカンマ区切りで指定します。ペアは任意の順序で指定できます。次に例を示します。
gcloud deployment-manager deployments create my-igm
--template vm-template.jinja
--properties zone:us-central1-a,machineType:n1-standard-1,image:debian-9
このコマンドを実行すると、Deployment Manager は指定されたテンプレートを使用してデプロイを作成します。Google Cloud Console または gcloud CLI を使用して、デプロイが作成されたことを確認できます。デプロイの表示については、マニフェストの表示をご覧ください。
次のステップ
- GitHub の Cloud Foundation Toolkit のサンプルで、本番環境で使用できるテンプレートのサンプルを確認する。
- テンプレート プロパティを使用してさらにコンテンツを抽象化する。
- 環境変数を使用してプロジェクトとデプロイの情報を設定する。
- プロジェクトに、テンプレートを複合タイプとして永続的に追加する。