Deployment Manager の基礎知識

Deployment Manager の基本的なコンポーネントについて説明します。

構成

構成とは、単一のデプロイに必要なすべてのリソースを記述したものです。 構成は、作成するリソースとそのプロパティをそれぞれ列挙する YAML 形式で記述されたファイルです。 構成には resources: セクションが必須で、ここに作成するリソースのリストを含めます。

各リソースには、次の 3 つの構成要素を含める必要があります。

  • name - リソースを特定するためのユーザー定義の文字列(my-vmproject-data-diskthe-test-network など)。
  • type - デプロイされるリソースのタイプ(compute.v1.instancecompute.v1.disk など)。基本リソースタイプは、サポートされているリソースタイプにリストされ、説明されています。
  • properties - リソースタイプのパラメータ。値はリソースタイプのプロパティのいずれか(例: zone: asia-east1-a boot: true)に一致する必要があります。

以下は構成の一例です。

resources:
- name: the-first-vm
  type: compute.v1.instance
  properties:
    zone: us-central1-a
    machineType: https://www.googleapis.com/compute/v1/projects/myproject/zones/us-central1-a/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/debian-7-wheezy-v20150423
    networkInterfaces:
    - network: https://www.googleapis.com/compute/v1/projects/myproject/global/networks/default
      accessConfigs:
      - name: External NAT
        type: ONE_TO_ONE_NAT

テンプレート

構成にいくつかのテンプレートを含めることができます。テンプレートは本質的に、個々の構成単位として抽象化された構成ファイルの一部です。テンプレートを作成した後、必要に応じてさまざまなデプロイメントでそれを再利用できます。 同様に、よく似たプロパティを共有する複数の構成を作成するときには、共有部分をテンプレートとして抽象化することができます。 テンプレートは、個別の構成ファイルよりはるかに柔軟性があり、デプロイメントを越えて簡単に移植できます。

テンプレート ファイルは Python または Jinja2 で作成します。Deployment Manager システムにより各テンプレートが再帰的に解釈され、その結果が構成ファイルにインラインで挿入されます。各テンプレートが解釈されると、最終的には、上で構成ファイルに定義したものと同じ YAML 構文のリソースが生成されます。

単純なテンプレートを作成するには、基本テンプレートの作成をご覧ください。

構成は、完全展開形式または非展開形式で記述されます。完全展開形式の構成では、デプロイメントのすべてのリソースとプロパティが記述され、インポートされたテンプレート ファイルの内容もこれに含まれます。たとえば、次のようなテンプレートを使用した非展開構成を指定するとします。

imports:
- path: vm_template.jinja

resources:
- name: vm-instance
  type: vm_template.jinja
  properties:
    zone: us-central1-a
    project: myproject

展開されると、次のようにすべてのテンプレートの内容が構成ファイルに含まれます。

resources:
- name: the-first-vm
  type: compute.v1.instance
  properties:
    zone: us-central1-a
    machineType: https://www.googleapis.com/compute/v1/projects/myproject/zones/us-central1-a/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/debian-7-wheezy-v20150423
        networkInterfaces:
        - network: https://www.googleapis.com/compute/v1/projects/myproject/global/networks/default
    accessConfigs:
    - name: External NAT
      type: ONE_TO_ONE_NAT

リソース

リソースとは、単一の API リソースを意味します。これは、Google が管理する基本タイプに備わっている API リソース、またはタイプ プロバイダから提供される API リソースです。 たとえば Compute Engine インスタンスや Cloud SQL インスタンスはそれぞれ 1 つのリソースです。

リソースを指定するには、そのリソースのタイプを指定します。タイプの詳細については、次の「タイプ」セクションをご覧ください。

Deployment Manager でリソースを作成するには、type を指定する必要があります。タイプは、デプロイメントの一部として作成される API リソースのセット(複合タイプと呼ばれる)または 1 つの API リソース(基本タイプと呼ばれる)を表すことがあります。

たとえば、Compute Engine VM インスタンスを作成するには、構成で対応する基本タイプを次のように指定します。

resources:
- name: the-first-vm
  type: compute.v1.instance # The type of resource to deploy
  ...

Deployment Manager では、Google によって維持管理されているすぐに使用できる基本タイプのリストが提供されています。サポートされるリソースタイプとリソース プロパティに、このようなタイプのリストが記載されています。

基本タイプとタイプ プロバイダ

基本タイプでは、1 つの基本リソースを作成します。たとえば、Google が所有している基本タイプには、compute.v1.instancestorage.v1.bucketsqladmin.v1beta4.database があり、これらのすべてがそれぞれ Compute Engine V1 API、Cloud Storage V1 API、Cloud SQL v1beta4 Admin API によって提供されます。

基本タイプは作成、読み取り、更新、削除(CRUD)オペレーションをサポートする RESTful API によってサポートされます。また、Google が所有しているタイプだけではニーズを満たすことができない場合、タイプ プロバイダを追加することで追加の基本タイプを作成することもできます。タイプ プロバイダの作成によって、API のすべてのリソースが、使用可能な基本タイプとして公開されます。タイプ プロバイダを作成するには、API 記述子ドキュメント(OpenAPI 仕様または Google Discovery)を指定して、必要な入力マッピングを API 用に調整し、タイプを Deployment Manager に登録する必要があります。作成すると、プロジェクトへのアクセス権を持つユーザーが、プロバイダによって提供されるタイプを使用できるようになります。

タイプ プロバイダを追加すると、API によって提供され、作成、読み取り、更新、削除(CRUD)オペレーションによって RESTful インターフェースでサポートされるすべてのリソースが、デプロイメントで使用できるタイプとして公開されます。

独自のタイプ プロバイダの作成は高度なシナリオです。これは、統合する API に精通している場合にのみ行うことをおすすめします。

タイプ プロバイダの作成方法については、Deployment Manager との統合をご覧ください。

テンプレートまたは構成で基本タイプを呼び出す場合、タイプに応じて、次の構文のいずれかを使用します。

  • Google が管理する基本タイプの場合、次の構文を使用します。

    type: [API].[VERSION].[RESOURCE]
    

    例:compute.v1.instance

  • Google が管理するタイプ プロバイダ(ベータ版)の場合、次の構文を使用します。

    type: gcp-types/[PROVIDER]:[RESOURCE]
    

    サポートされるタイプ プロバイダのリストについては、サポートされる Google Cloud タイプ プロバイダをご覧ください。

  • タイプ プロバイダによって提供される基本タイプの場合は、次の構文を使用します。

    type: [PROJECT_ID]/[TYPE_PROVIDER]:[COLLECTION]
    

    ここで、[COLLECTION] はデプロイする API リソースへのパスです。

複合タイプ

複合タイプには、一緒に動作するように事前に構成された 1 つまたは複数のテンプレートが含まれています。これらのテンプレートは、環境にデプロイされると一連の基本タイプに展開されます。複合タイプは基本的に、Deployment Manager に追加できる、ホストされるテンプレートです。一般的なソリューション用の複合タイプを作成して、そのソリューションを簡単に再利用できるようにするか、または将来的に再利用できる複雑な構成を作成することができます。

たとえば、ネットワーク負荷分散型マネージド インスタンス グループをデプロイする複合タイプを作成できます。ネットワーク ロードバランサでは、複数の Google Cloud リソースおよびリソース間のいくらかの構成を必要とするため、構成でこれらのリソースをセットアップし、Deployment Manager にタイプを登録できます。その後、プロジェクトへのアクセス権を持つユーザーが、将来の構成で、そのタイプを呼び出して、デプロイすることができます。

構成での複合タイプを呼び出すには、次の構文を使用します。

type: [PROJECT_ID]/composite:[TYPE_NAME]

次に例を示します。

resources:
- name: my-composite-type
  type: myproject/composite:example-composite-type

複合タイプの作成方法については、Deployment Manager への複合タイプの追加をお読みください。

マニフェスト

マニフェストとは、インポートされたテンプレートを含めた最初の構成内容を格納する読み取り専用オブジェクトです。またマニフェストには Deployment Manager により作成された完全展開形式のリソースリストも含まれています。デプロイメントの内容を更新するたびに、その内容を反映する新しいマニフェストが Deployment Manager により生成されます。デプロイメントにおけるトラブルシューティングの際にはマニフェストが役に立ちます。

詳細については、マニフェストを参照するをご覧ください。

デプロイ

デプロイメントとは構成によりデプロイ、管理されるリソースの一式です。

詳細については、デプロイメントを作成するをご覧ください。

次のステップ