基本テンプレートの作成

簡単なワークロードの場合、基本的な構成ファイルで十分ですが、より複雑なアーキテクチャや再利用を行う構成の場合、構成を複数のテンプレートに分割できます。

テンプレートは、構成でタイプとしてインポートされ、使用される個別のファイルです。構成では、必要な数のテンプレートを使用できます。Deployment Manager がインポートされたテンプレートを再帰的に展開し、完全な構成を作成します。

テンプレートを使用すると、構成をさまざまな部分に分割し、別のデプロイで再利用できます。テンプレートは、必要に応じて汎用化することも、特化することもできます。テンプレートを使えば、動的な構成やテンプレート ファイルを作成するときに、テンプレート プロパティ、環境変数、モジュール、他のテンプレート機能などを利用できます。

独自のデプロイで使用できるテンプレートの例については、Deployment Manager GitHub リポジトリをご覧ください。

始める前に

テンプレートの構文

テンプレートは、Jinja 2.8 または Python 2.7 で記述します。 YAML 構文により対応しているのは Jinja です。YAML に慣れている場合には、テンプレートを Jinja で作成するほうが簡単です。

テンプレート ファイルは Python で記述することもできます。Python を使用すると、テンプレートの一部を自動的に作成できます。たとえば、Python ライブラリを使用して、テンプレート定義をフォーマットできます。Python に慣れている場合には、こちらの方法のほうが簡単です。

Deployment Manager では、Jinja と Python の両方のファイルを使用します。どちらの構文を使用しても構いません。異なるテンプレートを混在させたり、比較したりすることもできます。また、Jinja または Python のいずれかで異なるテンプレートを作成して、同じ構成に両方のテンプレートをインポートできます。

基本テンプレートの作成

テンプレートは、Jinja または Python のいずれかで作成したファイルです。たとえば、次の構成ファイルについて考えてみます。

# Copyright 2016 Google Inc. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

resources:
- name: vm-created-by-deployment-manager
  type: compute.v1.instance
  properties:
    zone: us-central1-a
    machineType: zones/us-central1-a/machineTypes/n1-standard-1
    disks:
    - deviceName: boot
      type: PERSISTENT
      boot: true
      autoDelete: true
      initializeParams:
        sourceImage: projects/debian-cloud/global/images/family/debian-9
    networkInterfaces:
    - network: global/networks/default

この構成は有効ですが、個別のテンプレート ファイルに分割して再利用できるようにしておくと、構成をさらに簡素化できます。上の構成に基づいてテンプレートを作成するには、該当するリソースのセクションを抽出して新しい Jinja または Python ファイルを作成します。

Jinja

- name: vm-template
  type: compute.v1.instance
  properties:
    zone: us-central1-a
    machineType: zones/us-central1-a/machineTypes/n1-standard-1
    disks:
    - deviceName: boot
      type: PERSISTENT
      boot: true
      autoDelete: true
      initializeParams:
        sourceImage: projects/debian-cloud/global/images/family/debian-9
    networkInterfaces:
    - network: global/networks/default

Python

Python テンプレートの要件は次の 2 つだけです。

  • テンプレートには、GenerateConfig() または generate_config() という名前のメソッドを定義する必要があります。同じテンプレートの中で両方のメソッド名を使用すると、generate_config() メソッドが優先されます。
  • このメソッドは有効な YAML 構成を返す必要があります。

この条件を満たしていない場合、自身でテンプレートのコンテンツを生成する必要があります。

resources.append({
    'name': 'vm-template',
    'type': 'compute.v1.instance',
    'properties': {
        'zone': 'us-central1-a',
        'machineType': 'zones/us-central1-a/machineTypes/n1-standard-1',
        'disks': [{
            'deviceName': 'boot',
            'type': 'PERSISTENT',
            'boot': True,
            'autoDelete': True,
            'initializeParams': {
                'sourceImage':
                    'projects/debian-cloud/global/images/family/debian-9'
            }
        }],
        'networkInterfaces': [{
            'network': 'global/networks/default'
        }]
    }
})

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

imports:
- path: vm-template.jinja

resources:
- name: my-vm
  type: vm-template.jinja

Python

imports:
- path: vm-template.py

resources:
- name: my-vm
  type: vm-template.py

テンプレートの名前を設定していない場合には、テンプレート パスでテンプレートを呼び出します。

imports:
- path: path/to/my_vm_template.jinja

resources:
- name: my-first-virtual-machine
  type: path/to/my_vm_template.jinja

コマンドライン ツールを使用したテンプレートの直接デプロイ

Deployment Manager には、最上位構成ファイルを作成する代わりに、gcloud コマンドライン ツールでテンプレートを直接デプロイする機能があります。

たとえば、次のリクエストでは 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\' のように値を一重引用符で囲んでエスケープします。

  • ブール値では大文字と小文字は区別されません。TRUEtrueTrue は同じ値として処理されます。

  • テンプレートで定義されたすべての必須プロパティを渡す必要があります。プロパティのサブセットだけを渡すことはできません。特定のプロパティにデフォルト値がある場合は、コマンドラインでそのプロパティを省略できます。

複数のプロパティを指定するには、キー値のペアをカンマ区切りで指定します。ペアは任意の順序で指定できます。例:

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 Platform Console または gcloud ツールを使用して、デプロイが作成されたことを確認できます。デプロイの表示については、マニフェストの表示をご覧ください。

次のステップ