ここでは Deployment Manager で使用する構文について説明します。設定やテンプレートにどのような構文を使用するのかについて、このガイドをご参照ください。
設定とテンプレートに使用する構文
基本的な構文
resources
: これから作成するリソースセット。name
: このリソースをインスタンスにしたときの名前。type
: リソースの型。これは、compute.v1.instance
のような基本タイプ、gcp-types/compute-v1:addresses
などのタイプ プロバイダ、またはインポートされたテンプレートです。サポートされているタイプ プロバイダの一覧をご覧ください。properties
: このリソースのプロパティ。概要については、テンプレート プロパティをご覧ください。metadata
: このリソースの追加の構成。メタデータのフィールド リストをご覧ください。
例
resources:
- name: vm-instance
type: compute.v1.instance
properties:
machineType: zones/us-central1-a/machineTypes/n1-standard-1
...
アクセス制御
リソースに IAM ポリシーを設定する場合は、accessControl
セクションを使用します。
アクセス制御ポリシーを適用する各リソースの最上位の構成に
accessControl
セクションを追加します。リソースに目的の
gcpIamPolicy
を指定します。IAM ポリシーには、バインディングのリストを含めることができます。バインディングによって、1 つのロールにプリンシパルのリストが結び付けられます。
リソースへのアクセス制御の詳細については、構成でアクセス制御を設定するをご覧ください。
たとえば、次の accessControl
セクションでは、これらの役割をユーザーに付与するバインディングを追加しています。
ユーザー | ロール |
---|---|
alice@example.com |
roles/pubsub.editor |
|
roles/pubsub.publisher |
resources:
- name: a-new-pubsub-topic
type: pubsub.v1.topic
properties:
...
accessControl:
gcpIamPolicy:
bindings:
- role: roles/pubsub.editor
members:
- "user:alice@example.com"
- role: roles/pubsub.publisher
members:
- "user:jane@example.com"
- "serviceAccount:my-other-app@appspot.gserviceaccount.com"
リファレンス
リファレンスの使用方法については、リファレンスの作成をご覧ください。
値を直接指定する代わりに、他のリソースのプロパティへのリファレンスを使用できます。たとえば、同じデプロイのインスタンス テンプレートを使用するインスタンス グループ マネージャーを作成する場合は、インスタンス テンプレートの完全なリンクを明示的に入力する代わりに、$(ref.instance-template.selfLink)
という構文のリファレンスを使用できます。
リファレンスを作成できるプロパティは、リソースの API の get
メソッドで確認できます。たとえば、VM インスタンスのすべてのプロパティのリストを調べる場合は、instances.get()
メソッドのレスポンスを確認します。
リファレンスは、JSONPath のドット表記と類似した構文で宣言します。リファレンスを宣言するには、次の構文を使用します。
$(ref.RESOURCE_NAME.PATH_TO_PROPERTY)
Compute Engine インスタンスのネットワーク インターフェースなどのプロパティのリストには、次の構文を使用します。
$(ref.RESOURCE_NAME.LIST_PROPERTY[index].ITEM)
例
$(ref.exampleInstance.networkInterfaces[0].natIp)
$(ref.exampleInstance.serviceAccounts[0].email)
デプロイ固有の環境変数
デプロイを作成すると、Deployment Manager は、デプロイに関する情報(現在のプロジェクト名、デプロイ名など)を含む環境変数を作成します。
利用可能なすべての環境変数については、環境変数をご覧ください。
環境変数の使用方法:
{{ env["deployment"] }} # Jinja context.env["deployment"] # Python
例
- type: compute.v1.instance name: vm-{{ env["deployment"] }}
テンプレート プロパティ
テンプレートのプロパティは、任意のプロパティとして作成できます。値を直接記述するのではなく、トップレベルの設定にテンプレート プロパティを宣言し、プロパティ値を設定します。テンプレートにプロパティと値を静的な状態で直接設定する方法とは異なります。テンポラリ プロパティを作成するには、次の構文を使用します。
{{ properties["property-name"] }} # Jinja context.properties["property-name"] # Python
次に、トップレベルの設定または親テンプレートにプロパティ値を設定します。
imports:
- path: vm_template.jinja
resources:
- name: my-vm
type: vm_template.jinja
properties:
property-name: example-value
テンプレートのプロパティについてさらに学習する。
出力
デプロイに関する一定の情報が公開されように、出力セクションに任意のキー/値のペアを定義することができます。キーを提供し、値を設定します。これには静的文字列、プロパティへのリファレンス、テンプレート変数、または環境変数のいずれかを使用します。
outputs
: リソース プロパティ内にユーザーが呼び出すことができる出力のリストを宣言します。name
: 出力プロパティの名前。value
: 出力プロパティの値。
例
resources:
- name: vm-instance
type: compute.v1.instance
...
outputs:
- name: databaseIp
value: $(ref.vm-instance.networkInterfaces[0].natIp)
- name: databaseName
value: example-database
出力についてさらに学習する。
メタデータ
metadata
セクションには、リソース単位で適用できる特別なメタデータが含まれています。Deployment Manager には、一定の機能を起動する固有のメタデータがあります。たとえば、dependsOn
機能はメタデータ入力に依存します。
依存関係
dependsOn
プロパティはリソース間に明示的な依存関係を作成します。たとえば、A リソースが B リソースに依存するように指定すると、A リソースが作成される前に必ず B リソースが作成されます。
metadata: the metadata for this resource
dependsOn: Any explicit dependencies to another resource.
例
resources:
- name: vm-instance
type: compute.v1.instance
properties:
machineType: zones/us-central1-a/machineTypes/n1-standard-1
...
metadata:
dependsOn:
- persistent-disk-1
- a-new-network-1
明示的な依存関係についてさらに学習する。
スキーマの構文
スキーマを使用すると、テンプレートに対してユーザーがどのように操作できるかを制御できます。スキーマ ファイルには、次の構文を使用できます。詳細については、スキーマの詳細をご覧ください。
情報
info
プロパティは、スキーマに関するメタ情報を格納します。タイトル、バージョン番号、説明などの情報が含まれます。
最低限の条件として、このプロパティではタイトルと説明を指定します。
例
info:
title: MongoDB Template
author: Jane
description: Creates a MongoDB cluster
version: 1.0
imports
imports
フィールドは、このスキーマを使用するテンプレートに必要な関連ファイルのリストを格納します。imports のリストを備えたスキーマを持つテンプレートをアップロードすると、Deployment Manager によって、imports プロパティに示されたすべてのファイルがテンプレートと一緒にアップロードされているかチェックされます。
例
imports:
- path: helper.py
name: mongodb_helper.py
必須
required フィールドは、スキーマを使用するテンプレートで必要とされるプロパティ フィールドの要素のリストを格納します。この required フィールドに指定されていない要素は、省略可能な要素と判断されます。
例
required:
- name
properties:
name:
type: string
description: Name of your Mongo Cluster
size:
type: integer
default: 2
description: Number of Mongo Secondaries
properties
properties
フィールドには、このドキュメントの JSON スキーマルールが含まれています。properties フィールドで定義された要素は、テンプレートを使用するユーザーが設定できます。次のように、各プロパティに対し、サポートされているすべての JSON スキーマ検証を使用できます。
type
(文字列、ブール値、整数、数値など)default
minimum / exclusiveMinimum / maximum / exclusiveMaximum
minLength / maxLength
pattern
not X / allOf X, Y / anyOf X, Y / oneOf X, Y
最低限の条件として、このフィールドで type と description を設定し、どのような値がこのプロパティで受け入れられるのか、ユーザーに伝えることをおすすめします。オプションのプロパティについては、default 値も含めることをおすすめします。
検証キーワードのリストについては、JSON スキーマ検証ドキュメントをご覧ください。
例
properties:
name:
type: string
description: Name of your Mongo Cluster
size:
type: integer
default: 2
description: Number of Mongo Secondaries
minimum: 1
次のステップ
- リファレンスについてさらに学習する。
- 環境変数についてさらに学習する。
- テンプレートのプロパティについてさらに学習する。
- 出力についてさらに学習する。
- スキーマについてさらに学習する。