このページでは、Deployment Manager で複合タイプを作成する方法について説明します。作成した複合タイプを構成で呼び出し、デプロイメントを作成できます。
複合タイプは、Deployment Manager に永続的に追加され、一緒に機能するように構成された 1 つ以上のテンプレートです。複合タイプを追加した後は、Google 所有のタイプと同じようにそれを使用できます。タイプの詳細については、タイプの概要をご覧ください。
たとえば、ネットワーク負荷分散型のマネージド インスタンス グループをデプロイする一連のテンプレートを作成できます。これらのテンプレートを複合タイプとして Deployment Manager に追加すると、今後の構成で他のタイプと同様にテンプレートを使用できます。
プロジェクト間でタイプを共有することもできます。
始める前に
- このガイドのコマンドラインの例を使用する場合、gcloud コマンドライン ツールをインストールします。
- このガイドの API の例を使用する場合は、API アクセスを設定します。
- このガイドに記載の API サンプルには v2beta API を使用します。
複合タイプのコンポーネント
複合タイプを作成するには、最上位の Jinja または Python テンプレートと、最終的には基本タイプに解決される一連のサポート ファイルが必要です。複合タイプは、それ自体が別の複合タイプであるリソースで構成できます。Deployment Manager は、デプロイ中にこれらのタイプを再帰的に展開します。
複合タイプは次の要素で構成されています。
- 最上位テンプレート: タイプの呼び出し時の展開で実行される最上位の Jinja または Python テンプレート。
- スキーマ: 最上位テンプレートと定義済みのサブインポート(存在する場合)に関する情報が記述された JSON スキーマ ファイル。
- インポートされたファイル: ヘルパー ファイル、サブテンプレート、サブテンプレートに関連するスキーマなど、実行に必要な追加のファイル。ただし、これはオプションです。複合タイプには、最上位テンプレートを 1 つしか含めることができません。
複合タイプの作成
構成の最上位のテンプレートと、これに関連するインポートおよびスキーマを登録して、複合タイプを作成できます。gcloud
または API を使用して複合タイプを作成します。
複合タイプの作成方法と呼び出し方法について説明した例もご覧ください。
gcloud
このコマンドを実行するには、この複合タイプの一部である最上位のテンプレートとサブ テンプレートを保存しているディレクトリに移動する必要があります。
gcloud CLI を使用して types create
リクエストを作成し、最上位のテンプレートと目的のタイプ名を指定して、この複合タイプを呼び出します。テンプレート ファイルが置かれているローカル ディレクトリで、次のコマンドを実行します。
$ gcloud beta deployment-manager types create [TYPE_NAME] --template=[TOP_LEVEL_TEMPLATE]
ここで
[TYPE_NAME]
は、このタイプを呼び出すための名前です。[TOP_LEVEL_TEMPLATE]
は、このタイプを記述する最上位のテンプレートへの相対パスです。
API
API で composite
フィールドと name
フィールドを含む POST
リクエストを作成します。composite
フィールドで、以下を定義します。
- 最上位のスキーマ
- インポートされているテンプレートのコンテンツ
- 最上位のテンプレートのコンテンツ
API リクエストの本文は以下の構造になります。
POST https://www.googleapis.com/deploymentmanager/v2beta/projects/[PROJECT_ID]/global/compositeTypes
{
"composite": {
"files": {
"schema": "[CONTENTS_OF_SCHEMA]",
"imports": [
{
"name": "[TEMPLATE_FILE]",
"content": "[CONTENTS_OF_TEMPLATE_FILE]"
},
{
"name": "[ANOTHER_TEMPLATE_IF_NECESSARY]",
"content": "[CONTENTS_OF_TEMPLATES]"
}
],
"template": "[TOP-LEVEL_TEMPLATE_CONTENTS]",
"templateFileType": "[FILE_TYPE]"
}
},
"name": "[TYPE_NAME]"
}
これらのリクエストの作成方法の例については、自動スケーリングされたマネージド インスタンス グループの複合タイプの作成をご覧ください。詳細については、insert
メソッドのドキュメントをご覧ください。
複合タイプのデプロイ
タイプはプロジェクトごとのリソースで、アクセス制御のドキュメントに記載されている権限に従い、アクセスが可能です。つまり、次のようになります。
- プロジェクトの編集者と閲覧者、およびタイプ編集者は、そのプロジェクトで利用できるタイプの作成と使用が可能です。
- タイプ閲覧者は、そのプロジェクトで使用できるタイプの一覧を取得し、タイプを使用できます。
タイプ閲覧者として別のプロジェクトを追加し、タイプにアクセスできるようにすることもできます。詳しくは、プロジェクト間でのタイプの共有をご覧ください。
登録された複合タイプは、Google で管理されるタイプを呼び出す場合と同じ方法でデプロイできます。
types: [PROJECT_ID]/composite:[TYPE_NAME]
次に例を示します。
resources:
- name: my example-resource
type: example-project/composite:autoscaled-igm
properties:
...
コマンドライン ツールを使用した複合タイプの直接デプロイ
Deployment Manager には、Google Cloud CLI を使用して複合タイプを直接デプロイする機能があります。最上位構成ファイルを作成する代わりに、gcloud CLI が自動的に最上位構成を生成します。
たとえば、次のコマンドは、autoscaled-igm
という複合タイプをデプロイします。
gcloud deployment-manager deployments create my-igm \
--composite-type example-project/composite:autoscaled-igm
また、--properties
フラグを使用して複合タイプのプロパティを設定することもできます。
gcloud deployment-manager deployments create my-igm \
--composite-type example-project/composite:autoscaled-igm \
--properties zone:us-central1-a
注意すべき点:
すべての値は YAML 値として解析されます。たとえば、
version: 3
は整数として渡されます。文字列として指定するには、version: \'3\'
のように値を一重引用符で囲んでエスケープします。ブール値では大文字と小文字は区別されません。
TRUE
、true
、True
は同じ値として処理されます。複合タイプで定義されたすべての必須プロパティを渡す必要があります。プロパティのサブセットだけを渡すことはできません。特定のプロパティにデフォルト値がある場合は、コマンドラインでそのプロパティを省略できます。
複数のプロパティを指定するには、Key-Value ペアをカンマ区切りで指定します。ペアは任意の順序で指定できます。次に例を示します。
gcloud deployment-manager deployments create my-igm \ --composite-type example-project/composite:autoscaled-igm \ --properties zone:us-central1-a,machineType:n1-standard-1,image:debian-8
このコマンドを実行すると、Deployment Manager は指定された複合タイプを使用してデプロイメントを作成します。Google Cloud Console または gcloud CLI を使用して、デプロイが作成されたことを確認できます。デプロイの表示については、マニフェストの表示をご覧ください。
例: 複合タイプの作成
Deployment Manager では、複合タイプとして使用できる数多くのサンプル構成が Deployment Manager GitHub リポジトリに用意されています。この例では、負荷分散型の高可用性サービスをシングル リージョンの複数のゾーンにデプロイする複合タイプを追加します。詳細については、完全な例をご覧ください。
この例では、最上位構成ファイルは ha-service.py ファイルです。すべてのサブ テンプレートがスキーマ ファイルにインポートされます。
- GitHub ディレクトリから Python ファイルとスキーマ ファイルをダウンロードします。サブディレクトリ内のファイルとダイアグラム ファイルはすべて除外します。
すべてのファイルをダウンロードしたローカル ディレクトリで次のコマンドを実行し、
ha-service-example
という複合タイプを新たに作成します。gcloud beta deployment-manager types create ha-service-example --template=ha-service.py
タイプの一覧を取得し、タイプが正常に作成されていることを確認します。
gcloud beta deployment-manager types list --provider composite
新しいタイプを記述します。
gcloud beta deployment-manager types describe ha-service-example --provider composite
タイプをデプロイする構成を新たに作成します。
[PROJECT_ID]
は実際のプロジェクト ID に置き換えてください。resources: - name: ha-service-example type: [PROJECT_ID]/composite:ha-service-example properties: dockerImage: gcr.io/deployment-manager-examples/nodejsservicestatic zones: - us-central1-b - us-central1-a
構成を
example-config.yaml
として保存します。構成にテンプレートをインポートする必要はありません。新しく作成された複合タイプをデプロイします。
gcloud deployment-manager deployments create ha-service-deployment --config example-config.yaml
API から、このタイプから作成されるリソース一覧が返されます。
Waiting for create [operation-1488254932422-5498f5a950d71-2bd3b8c8-b13ddab5]...done. Create operation operation-1488254932422-5498f5a950d71-2bd3b8c8-b13ddab5 completed successfully. NAME TYPE STATE ERRORS INTENT ha-service-deployment-lb-fr compute.v1.forwardingRule COMPLETED [] ha-service-deployment-lb-hc compute.v1.httpHealthCheck COMPLETED [] ha-service-deployment-lb-tp compute.v1.targetPool COMPLETED [] ha-service-deployment-service-us-central1-a-as compute.v1.autoscaler COMPLETED [] ha-service-deployment-service-us-central1-a-igm compute.v1.instanceGroupManager COMPLETED [] ha-service-deployment-service-us-central1-a-it compute.v1.instanceTemplate COMPLETED [] ha-service-deployment-service-us-central1-b-as compute.v1.autoscaler COMPLETED [] ha-service-deployment-service-us-central1-b-igm compute.v1.instanceGroupManager COMPLETED [] ha-service-deployment-service-us-central1-b-it compute.v1.instanceTemplate COMPLETED []
これで最初の複合タイプが作成されました。