参照の使用

設定内には多数のタイプのリソースを入れることができ、アプリケーション開発を継続するにつれて、リソースと同じ設定内の他のリソースとの間で依存関係が出てくる場合があります。リソースの作成順序が重要になるので、厄介なことになりかねません。存在しないネットワークに仮想マシンのインスタンスを追加したり、存在しない永続ディスクを付加したりすることはできません。また、デフォルトでは Deployment Manager が並列的にすべてのリソースを作成するので、依存関係のあるリソースが正しい順序で作成されることは保証されません。

そうした種類の依存関係を構成ファイルに正しく定義できるように、Deployment Manager はリソース作成の動的な指定方法をサポートしています。具体的には、他のリソースを指す参照を使用することで、依存関係のあるリソースを正しい順序で Deployment Manager に作成させることができます。参照の利点は次のとおりです。

  • Deployment Manager は依存する順序でリソースを解決します。つまり、リソース A がリソース B を参照している場合は、リソース B が先に作成されます。参照の宣言は設定内のどこで行っても構いません。Deployment Manager は、参照が設定内のどこで記述されているかには関係なく、適切に参照を評価します。インスタンスが設定内の新しいネットワークを参照している場合、Deployment Manager は常にインスタンスを作成する前に、ネットワークを作成します。
  • 参照を使用してリソースのプロパティを参照できます。 仮想マシン インスタンスの外部 IP アドレスやイメージの selfLink など、リソースの特定のプロパティへの参照が使用できます。たとえば、仮想マシン インスタンスが一時的な外部 IP アドレスを使用する場合、仮想マシン インスタンスが作成されるまでその IP アドレスを知ることはできません。代わりに、natIP フィールドへの参照を提供することができ、Deployment Manager は存在する natIP の値を自動的に取得します。

参照を使用するには、設定の中で次の構文を使用します。

$(ref.RESOURCE_NAME.PROPERTY)

ここで、ステップ 2 の構成を作成するで作成した構成を更新しましょう。ネットワークを作成し、2 つの仮想マシン インスタンスがその新しいネットワークを参照するようにします。

ネットワークの定義を追加する

ステップ 2 の設定ファイル two-vms.yaml を開いて、ファイルの末尾に次のネットワーク リソース定義を追加します。

- name: a-new-network
  type: compute.v1.network
  properties:
    IPv4Range: 10.0.0.1/16

仮想マシンの各プロパティ内のネットワークを参照に置き換える

両方の仮想マシン インスタンスの properties セクションで、network の値を新しいネットワークの selfLink プロパティへの参照に置き換えて、ネットワーク インターフェース プロパティが次のようになるようにします。

networkInterfaces:
- network: $(ref.a-new-network.selfLink)

変更を保存します。設定は次のようになります。

# 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: the-first-vm
  type: compute.v1.instance
  properties:
    zone: us-central1-f
    machineType: https://www.googleapis.com/compute/v1/projects/[MY_PROJECT]/zones/us-central1-f/machineTypes/f1-micro
    disks:
    - deviceName: boot
      type: PERSISTENT
      boot: true
      autoDelete: true
      initializeParams:
        sourceImage: https://www.googleapis.com/compute/v1/projects/debian-cloud/global/images/family/debian-9
    networkInterfaces:
    - network: $(ref.a-new-network.selfLink)
      accessConfigs:
      - name: External NAT
        type: ONE_TO_ONE_NAT
- name: the-second-vm
  type: compute.v1.instance
  properties:
    zone: us-central1-f
    machineType: https://www.googleapis.com/compute/v1/projects/[MY_PROJECT]/zones/us-central1-f/machineTypes/g1-small
    disks:
    - deviceName: boot
      type: PERSISTENT
      boot: true
      autoDelete: true
      initializeParams:
        sourceImage: https://www.googleapis.com/compute/v1/projects/debian-cloud/global/images/family/debian-9
    networkInterfaces:
    - network: $(ref.a-new-network.selfLink)
      accessConfigs:
      - name: External NAT
        type: ONE_TO_ONE_NAT
- name: a-new-network
  type: compute.v1.network
  properties:
    IPv4Range: 10.0.0.1/16

設定を再デプロイする

gcloud deployment-manager deployments create deployment-with-references --config two-vms.yaml

デプロイを確認する

gcloud deployment-manager deployments describe deployment-with-references

これで、最初の参照を作成しました。デプロイの作成を開始するときには、参照に留意してください。

次は、作成した設定を再編成して、柔軟で再利用可能なテンプレートにします。

デプロイを削除する

Compute Engine のリソースには費用が発生します。このデプロイは後のステップでは不要なので削除することをおすすめします。このデプロイを削除すると、その中にあるリソースもすべて削除されます。このデプロイを残したままにすると、以降の例と衝突を起こします。

gcloud deployment-manager deployments delete deployment-with-references

次へ: テンプレートを作成する

関連トピック

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

Cloud Deployment Manager のドキュメント