複数のテンプレートの使用

次に、別のテンプレートをインポートするテンプレートを作成します。この例では、最初に作成した構成two-vms.yamlを分解して、ネットワーク用のテンプレートとファイアウォール ルール用のテンプレートを作成し、ポート 80 での受信トラフィックを許可します。

次に、結合された 1 つのテンプレートにデプロイ全体を移行します。このページの最後で、単一のテンプレートを呼び出し、これらのリソースをすべて含むデプロイを作成します。

ネットワーク用のテンプレートを作成する

次のネットワーク定義を使用して、network-template.[jinja|py] という名前のテンプレート ファイルを作成します。

Jinja

{#
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: a-new-network
  type: compute.v1.network
  properties:
    IPv4Range: 10.0.0.1/16

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.

"""Creates the network."""

def GenerateConfig(unused_context):
  """Creates the network."""

  resources = [{
      'name': 'a-new-network',
      'type': 'compute.v1.network',
      'properties': {
          'IPv4Range': '10.0.0.1/16'
      }
  }]
  return {'resources': resources}

ファイアウォール用のテンプレートを作成する

ポート 80 からの TCP トラフィックを許可する新しいファイアウォール ルールのテンプレートを作成します。ファイル firewall-template.[jinja|py] を呼び出します。

Jinja

{#
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: a-firewall-rule
  type: compute.v1.firewall
  properties:
    network: $(ref.a-new-network.selfLink)
    sourceRanges: ["0.0.0.0/0"]
    allowed:
    - IPProtocol: TCP
      ports: ["80"]

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.

"""Creates the firewall."""

def GenerateConfig(unused_context):
  """Creates the firewall."""

  resources = [{
      'name': 'a-firewall-rule',
      'type': 'compute.v1.firewall',
      'properties': {
          'network': '$(ref.a-new-network.selfLink)',
          'sourceRanges': ['0.0.0.0/0'],
          'allowed': [{
              'IPProtocol': 'TCP',
              'ports': [80]
          }]
      }
  }]
  return {'resources': resources}

テンプレートではリファレンスも使用できます。最終構成に a-new-network という名前のネットワークが含まれている限り、リファレンスは有効になります。

ネットワーク、ファイアウォール、仮想マシンのテンプレートを使用するテンプレートを作成する

compute-engine-template.[jinja|py] という名前のファイルを作成します。以下のものをファイルに追加します。Deployment Manager が基本テンプレートの名前に基づいてリソース名を設定するため、リソース名は任意です。

Jinja

{#
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-1
  type: vm-template.jinja
- name: vm-2
  type: vm-template-2.jinja
- name: network-1
  type: network-template.jinja
- name: firewall-1
  type: firewall-template.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.

"""Creates the Compute Engine."""

def GenerateConfig(unused_context):
  """Creates the Compute Engine with network and firewall."""

  resources = [{
      'name': 'vm-1',
      'type': 'vm-template.py'
  }, {
      'name': 'vm-2',
      'type': 'vm-template-2.py'
  }, {
      'name': 'network-1',
      'type': 'network-template.py'
  }, {
      'name': 'firewall-1',
      'type': 'firewall-template.py'
  }]
  return {'resources': resources}

構成を作成する

前の手順のテンプレートを使用する構成を作成します。config-with-many-templates.yaml という名前のファイルを作成し、次の内容を構成に追加します。

Jinja

# 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.

imports:
- path: vm-template.jinja
- path: vm-template-2.jinja
- path: network-template.jinja
- path: firewall-template.jinja
- path: compute-engine-template.jinja

resources:
- name: compute-engine-setup
  type: compute-engine-template.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.

imports:
- path: vm-template.py
- path: vm-template-2.py
- path: network-template.py
- path: firewall-template.py
- path: compute-engine-template.py

resources:
- name: compute-engine-setup
  type: compute-engine-template.py

この構成は他のテンプレートを直接呼び出していませんが、これらのテンプレートを compute-engine-template.jinja ファイルと一緒にインポートする必要があります。compute-engine-template.jinja ファイルの有効性は残りのテンプレートに依存します。

ここで使用されていない場合には、オプションの name フィールドを使用してインポートに名前を設定できます。これは、テンプレートの名前として適用され、ファイルの残りの部分でリソースタイプとして使用されます。現在のファイルと異なるディレクトリにテンプレートが保存され、テンプレート名として完全修飾ファイルパスを追加しない場合、name フィールドは便利です。次に例を示します。

imports:
- path: a/path/to/templates/vm-template.jinja
  name: a-vm-template.jinja

これにより、タイプとしてフルパスではなく、a-vm-template.jinja を使用できます。

resources:
- name: this-is-just-an-example
  type: a-vm-template.jinja

構成を保存してデプロイする

gcloud deployment-manager deployments create deployment-with-many-templates \
  --config config-with-many-templates.yaml

デプロイを確認する

gcloud deployment-manager deployments describe deployment-with-many-templates

Compute Engine API を使用してリソースリストを取得し、リソースの存在を確認できます。

インスタンスに関する情報を取得するには:

gcloud compute instances list # List instances
gcloud compute instances describe the-first-vm

ネットワークに関する情報を取得するには:

gcloud compute networks list # List networks
gcloud compute networks describe a-new-network

ファイアウォールルールに関する情報を取得するには:

gcloud compute firewall-rules list # List firewall rules

次に、テンプレートの固定部分の一部をカスタム テンプレートと環境変数で置換します。

デプロイを削除する

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

デプロイを削除するには:

gcloud deployment-manager deployments delete deployment-with-many-templates

次のステップ: テンプレートと環境変数の使用

関連トピック

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

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

Cloud Deployment Manager のドキュメント