構成またはテンプレートのプロパティを定義するときには、値を直接指定する代わりに、他のリソースのプロパティへの参照を使用できます。たとえば、同じデプロイのインスタンス テンプレートを使用するインスタンス グループ マネージャーを作成する場合は、インスタンス テンプレートの完全なリンクを明示的に入力する代わりに、$(ref.instance-template.selfLink)
という構文のリファレンスを使用できます。
参照を使用すると、次のようなことが可能です。
リソースが作成されるまでは未定義であるプロパティにアクセスできます。たとえば、構成内で仮想マシンを定義する時点で、そのマシンの IP アドレスは不明です。この場合、IP アドレスのリファレンスを使用できます。構成をデプロイすると、まず VM が作成され、外部 IP アドレスが取得可能になった時点で Deployment Manager がその IP アドレスを取得します。
構成やテンプレートを読みやすくして、トラブルシューティングを容易にします。たとえば、複数の転送ルールを構成する必要がある場合は、使用するネットワークも指定する必要があります。転送ルールごとにネットワークへのリンクを指定する代わりに、次の構文を使用することによって、ネットワークの
selfLink
プロパティへの参照を作成できます。$(ref.network-name.selfLink)
構成のトラブルシューティングが必要な場合は、この参照により、転送ルールでどのネットワークが使用されているかが判別しやすくなります。
リソースへの参照を作成する場合は、リソース間の依存関係も作成します。たとえば、次のスニペットについて考えます。このスニペットでは、sandbox-vm
が network-a
への参照を使用しています。
resources:
- name: sandbox-vm
type: compute.v1.instance
properties:
network: $(ref.network-a.selfLink)
...
...
- name: network-a
type: compute.v1.network
properties:
...
この構成をデプロイすると、Deployment Manager は参照を解決するために、sandbox-vm
の前に network-a
を作成します。参照が正しく解決されないとデプロイは失敗します。
参照は、構成とテンプレートの両方で使用できます。
始める前に
- このガイドのコマンドラインの例を使用する場合、gcloud コマンドライン ツールをインストールします。
- このガイドの API の例を使用する場合は、API アクセスを設定します。
- 構成の作成方法を理解しておきます。
- 基本テンプレートの作成方法を理解しておきます。
構成ファイル内で参照を作成する
構成内で参照を宣言するには、次の形式を使用します。
$(ref.RESOURCE_NAME.PROPERTY)
次の例では、ネットワークを作成してから、新しく作成されたネットワークへの参照を使用する 2 つのインスタンスを作成します。この例では、参照は次のようになります。
$(ref.a-new-network.selfLink)
この構成をデプロイすると、2 つのインスタンスの前にネットワークが作成され、参照はネットワーク リソースの selfLink
に解決されます。
テンプレートで参照を作成する
テンプレート ファイルの場合、参照の先頭に $
を付け、全体をかっこで囲みます。
$(ref.RESOURCE_NAME.PROPERTY)
参照と他の機能(テンプレート プロパティや環境変数など)を組み合わせることもできます。Deployment Manager が参照を正しく解析できるように、参照の文字列全体をかっこで囲んでください。
以下では、テンプレートで参照を宣言する例を示します。
Jinja
環境変数を含む参照
network: $(ref.{{ env["deployment"] }}-network.selfLink)
配列内の値への参照
subnetwork: $(ref.{{ env["deployment"] }}-vm.networkInterfaces[2].subnetwork)
テンプレート プロパティを含む参照
network: $(ref.{{ properties["network"] }}.selfLink)
Jinja パラメータを使用した参照
network: $(ref.{{ NETWORK_NAME }}.selfLink)
出力内の参照
outputs: - name: UrlToService value: http://$(ref.{{ env["deployment"] }}-network.networkInterfaces[0].accessConfigs[0].natIp):8080/
Python
環境変数を含む参照
'network': '$(ref.' + context.env['deployment'] + '-network.selfLink)'
配列内の値への参照
'subnetwork': '$(ref.' + context.env['deployment'] + '-vm.networkInterfaces[2].subnetwork)'
テンプレート プロパティを含む参照
'network': '$(ref.' + context.properties['network'] + '.selfLink)'
Python パラメータを使用した参照
'value': '$(ref.' + base_name + '.networkInterfaces[0].networkIP)'
出力内の参照
outputs = [{'name': 'UrlToService', 'value': '$(ref.' + context.env['deployment'] + '-network.networkInterfaces[0].accessConfigs[0].natIP):8080'}]
次のステップ
- デプロイを commit する前に構成をプレビューする。
- デプロイを作成します。
- テンプレートについて詳しく学ぶ。