構文リファレンス

ここでは Deployment Manager で使用する構文について説明します。設定やテンプレートにどのような構文を使用するのかについて、このガイドをご参照ください。

設定とテンプレートに使用する構文

基本的な構文

  • resources: これから作成するリソースセット。

resources:
- name: vm-instance
  type: compute.v1.instance
  properties:
    machineType: zones/us-central1-a/machineTypes/n1-standard-1
    ...

アクセス制御

リソースに IAM ポリシーを設定する場合は、accessControl セクションを使用します。

  1. アクセス制御ポリシーを適用する各リソースの最上位の構成に accessControl セクションを追加します。

  2. リソースに目的の gcpIamPolicy を指定します。IAM ポリシーには、バインディングのリストを含めることができます。バインディングによって、1 つのロールにプリンシパルのリストが結び付けられます。

リソースへのアクセス制御の詳細については、構成でアクセス制御を設定するをご覧ください。

たとえば、次の accessControl セクションでは、これらの役割をユーザーに付与するバインディングを追加しています。

ユーザー ロール
alice@example.com roles/pubsub.editor
  • my-other-app@appspot.gserviceaccount.com
  • jane@example.com
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

次のステップ