基本構成の作成

このページでは、デプロイの作成時に使用できる構成を作成する方法について説明します。デプロイの詳細については、デプロイを作成するをご覧ください。

構成ファイルには、デプロイを構成する Google Cloud Platform リソースをすべて定義する必要があります。構成ファイルがないとデプロイを作成できません。構成ファイルは YAML 構文で記述する必要があります。

始める前に

構成ファイルの構造

構成ファイルは YAML 形式で記述します。構造は次のとおりです。

#  imported templates, if applicable
imports:
  #  path relative to the configuration file
- path: path/to/template.jinja
  name: my-template
- path: path/to/another/template.py
  name: another-template

resources:
  - name: NAME_OF_RESOURCE
    type: TYPE_OF_RESOURCE
    properties:
      property-a: value
      property-b: value
      ...
      property-z: value
  - name: NAME_OF_RESOURCE
    type: TYPE_OF_RESOURCE
    properties:
      property-a: value
      property-b: value
      ...
      property-z: value

各セクションには、デプロイの異なる部分を定義します。

  • imports セクションは、構成で使われるテンプレート ファイルのリストです。Deployment Manager は、インポートしたテンプレートを再帰的に展開し、最終構成を作成します。

  • resources セクションは、このデプロイを構成するリソースのリストです。リソースには次のものがあります。

outputsmetadata など、省略可能なセクションを追加することもできます。outputs セクションを使用してテンプレートと構成のデータを出力として公開すると、同じデプロイ内の他のテンプレートで利用できるようになります。また、エンドユーザーが参照することも可能です。metadata セクションを使用すると他の機能も使用できます。たとえば、リソース間で依存関係を明示的に設定できます。

1 つの構成には必ず resources セクションを宣言し、リソースのリストを記述する必要があります。他のセクションは省略可能です。

リソースタイプを宣言する

構成内で、各リソースはタイプとして指定する必要があります。タイプには、Google が管理する基本タイプ、複合タイプ、タイプ プロバイダ、インポートされたテンプレートがあります。

Google が管理する基本タイプは、Google Cloud のリソースに解決されるタイプです。 たとえば、Cloud SQL インスタンスや Cloud Storage バケットは、Google が管理する基本タイプです。これらのタイプは次の構文で宣言します。

type: <api>.<api-version>.<resource-type>

たとえば、Compute Engine インスタンスの場合は、次のタイプを指定します。

type: compute.v1.instance

BigQuery データベースの場合は、次のタイプを指定します。

type: bigquery.v2.dataset

サポートされるすべてのタイプを一覧表示するには、次のコマンドを使用します。

gcloud deployment-manager types list

サポート対象の Google が管理する基本タイプの完全なリストについては、サポートされるリソースタイプをご覧ください。

複合タイプまたはタイプ プロバイダを使用する場合は、次のようにタイプを宣言します。

# Composite type

resources:
- name: my-composite-type
  type: [PROJECT]/composite:[TYPE_NAME]

タイプ プロバイダの場合:

# Base type

resources:
- name: my-base-type
  type: [PROJECT_ID]/[TYPE_PROVIDER_NAME]:[TYPE_NAME]

Google が管理するタイプ プロバイダ(ベータ版)を使用してリソースを作成することもできます。Google Cloud タイプ プロバイダのリストについては、サポートされているタイプ プロバイダをご覧ください。

テンプレートを使用する場合は、テンプレートをタイプとして宣言し、テンプレートの名前またはパスを type の値として指定します。たとえば、次の構成は、my_vm_template.jinja という名前のテンプレートをインポートし、そのテンプレートをタイプとして指定します。

imports:
- path: path/to/template/my_vm_template.jinja
  name: my-template.jinja

resources:
- name: my-first-virtual-machine
  type: my-template.jinja

テンプレートの詳細については、基本テンプレートの作成をご覧ください。

リソース プロパティを宣言する

リソースのタイプを宣言したら、リソースに name を設定し、リソースのプロパティを指定する必要があります。たとえば、次の構成ファイルでは、vm-created-by-deployment-manager という仮想マシン インスタンスとそのプロパティを定義しています。Deployment Manager は、この情報を使用して、これらのプロパティを持つ VM インスタンスを作成します。

# 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-created-by-deployment-manager
  type: compute.v1.instance
  properties:
    zone: us-central1-a
    machineType: zones/us-central1-a/machineTypes/n1-standard-1
    disks:
    - deviceName: boot
      type: PERSISTENT
      boot: true
      autoDelete: true
      initializeParams:
        sourceImage: projects/debian-cloud/global/images/family/debian-9
    networkInterfaces:
    - network: global/networks/default

リソースの properties を判別するには、そのリソースの API ドキュメントを参照してください。

  • リソースに対する insert または create メソッドでのリクエストの形式を確認します。
  • リクエスト URI にゾーンが含まれている場合は、そのゾーンをプロパティに追加します。
  • 配列には、YAML リスト構文を使用して配列の要素をリストします。たとえば、API を使用して Compute Engine インスタンスを作成する場合、インスタンスに接続するディスクの配列を次の形式で指定する必要があります。

    "disks": [
      {
        "type": "PERSISTENT",
        "deviceName": "disk1",
        ...
      },
      {
        "type": "PERSISTENT",
        "deviceName": "disk2",
        ...
      }
    ]
    

    Deployment Manager 構成には、これらのディスクを次の構文で追加します。

    disks:
    - deviceName: disk1
      type: PERSISTENT
      ...
    - deviceName: disk2
      type: PERSISTENT
    

また、リソースの書き込み可能なプロパティを指定することもできます。プロパティが書き込み可能かどうかを確認する方法については、該当するリソースタイプの API リファレンス ドキュメントをご覧ください。たとえば、Compute Engine リファレンスでは、一部のプロパティが出力専用としてマークされ、変更不可能になるため、このようなプロパティは構成の中で定義できません。

API によっては、リソースの作成に最小限のプロパティ セットが必要になります。たとえば Compute Engine 永続ディスクの場合、新しいディスクを作成するには、ディスク名、イメージソース、ディスクサイズなどが必要です。特定のリソースの詳細については、そのリソースの API リファレンスをご覧ください。

テンプレート プロパティの定義

構成で使用するためにテンプレートをインポートする場合は、properties セクションを使用して、リソース プロパティの代わりにテンプレート プロパティの値を定義します。テンプレートにテンプレート プロパティがない場合、properties セクションを省略できます。

別の GCP サービスからリソースを作成する

最後に、構成ファイルで別の GCP サービスからリソースを作成できます。たとえば、次の構成ファイルは Compute Engine と BigQuery からリソースを作成します。

# 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-created-by-deployment-manager
  type: compute.v1.instance
  properties:
    zone: us-central1-a
    machineType: zones/us-central1-a/machineTypes/n1-standard-1
    disks:
    - deviceName: boot
      type: PERSISTENT
      boot: true
      autoDelete: true
      initializeParams:
        sourceImage: projects/debian-cloud/global/images/family/debian-9
    networkInterfaces:
    - network: global/networks/default

- name: big-query-dataset
  type: bigquery.v2.dataset
  properties:
    datasetReference:
      datasetId: example_id

サポートされるリソースタイプとリソース プロパティ

サポートされる Google 管理のリソースについては、サポートされるリソースタイプのドキュメントをご覧ください。

次のステップ