Google Deployment Managerでインスタンス作成

Trick or Treat!! grasys加藤です。

前回、インスタンスの作成方法を3つご紹介しました。

3つの方法でGoogle Compute Engineでインスタンスを作成する

今回はGoogleが提供する Cloud Deployment Manager を使ってインスタンスを作成してみます。

Cloud Deployment Managerを使うとGoogle Compute Engine上のインスタンスに限らず、Google Cloud Storage, Google Container Engine, BigQueryなどGoogleプラットフォームでのリソースをYAMLで管理することが出来ます。

この YAMLで管理 という点がデプロイメントでは非常に重要です。再現可能、再利用可能、可読性も良いですね。

インスタンス作成

さっそくインスタンスを作成します。スペックは以下の通りとします。

名前: grasys-deployment-test01
ゾーン: asia-northeast1-a
マシンタイプ: g1-small
イメージ: rhel-7-v20171025
外部IP: NAT

このスペックをYAMLでの設定に落とすと次のようになります。

resources:
- type: compute.v1.instance
  name: grasys-deployment-test01
  properties:
    zone: asia-northeast1-a
    machineType: https://www.googleapis.com/compute/v1/projects/[PROJECT]/zones/asia-northeast1-a/machineTypes/g1-small
    disks:
    - deviceName: boot
      type: PERSISTENT
      boot: true
      autoDelete: true
      initializeParams:
        sourceImage: https://www.googleapis.com/compute/v1/projects/centos-cloud/global/images/centos-7-v20171025
    networkInterfaces:
    - network: https://www.googleapis.com/compute/v1/projects/[PROJECT]/global/networks/default
      accessConfigs:
      - name: External NAT
        type: ONE_TO_ONE_NAT

ちょっとAPIを書かせたり嫌な感じです。

このYAMLを適当なファイルで作成します。ひとまず test01.yaml にしてみました。 [PROJECT]はお使いのGoogle Cloud PlatformのProjectIdを入れて下さいね。

gcloudコマンドでデプロイします。

$ gcloud deployment-manager deployments create test01-deployment --config test01.yaml
The fingerprint of the deployment is CANz1JihS0_-oGDh48vjRQ==
Waiting for create [operation-1509429100388-55cd159579ea1-2290634c-712b5e30]...done.
Create operation operation-1509429100388-55cd159579ea1-2290634c-712b5e30 completed successfully.
NAME                      TYPE                 STATE      ERRORS  INTENT
grasys-deployment-test01  compute.v1.instance  COMPLETED  []

成功しました。

インスタンスが作成されていることがわかります。

$ gcloud compute instances list --filter grasys-deployment-test01
NAME                      ZONE               MACHINE_TYPE PREEMPTIBLE  INTERNAL_IP  EXTERNAL_IP      STATUS
grasys-deployment-test01  asia-notrheast1-a  g1-small                  10.XXX.X.X   XXX.XXX.XXX.XXX  RUNNING

template機能

次にtemplate機能を使ってみます。

おもむろにさきほどのYAMLをtemplate化します。インスタンス名は変数定義に変えておきます。

$ cp -p test01.yaml template.jinja
$ sed -e "s/name: grasys-deployment-test01/name: {{ env[\"name\"] }}/" -i template.jinja
$ cat template.jinja
resources:
- type: compute.v1.instance
  name: {{ env["name"] }}
  properties:
    zone: asia-northeast1-a
    machineType: https://www.googleapis.com/compute/v1/projects/clean-monitor-760/zones/asia-northeast1-a/machineTypes/g1-small
    disks:
    - deviceName: boot
      type: PERSISTENT
      boot: true
      autoDelete: true
      initializeParams:
        sourceImage: https://www.googleapis.com/compute/v1/projects/centos-cloud/global/images/centos-7-v20171025
    networkInterfaces:
    - network: https://www.googleapis.com/compute/v1/projects/clean-monitor-760/global/networks/default
      accessConfigs:
      - name: External NAT
        type: ONE_TO_ONE_NAT

templateはYAMLに近い形式のjinjaの他にpythonも使えますので、得意な方で作成するのが良いと思います。

次にtemplateを呼び出すYAMLを作成しましょう。名前はtemplate.yamlとしました。

imports:
- path: template.jinja

resources:
- name: grasys-template-test01
  type: template.jinja
- name: grasys-template-test02
  type: template.jinja

deployしてみましょう。

$ gcloud deployment-manager deployments create template-deployment --config template.yaml
The fingerprint of the deployment is 30iQy6P6ZeCapJ2cwraGaQ==
Waiting for create [operation-1509433148574-55cd24aa20930-c6868a0a-587101ca]...done.
Create operation operation-1509433148574-55cd24aa20930-c6868a0a-587101ca completed successfully.
NAME                    TYPE                 STATE      ERRORS  INTENT
grasys-template-test01  compute.v1.instance  COMPLETED  []
grasys-template-test02  compute.v1.instance  COMPLETED  []

今度は同じ構成のインスタンスが2つできていることが確認できます。

$ gcloud compute instances list --filter grasys-template
NAME                    ZONE               MACHINE_TYPE PREEMPTIBLE  INTERNAL_IP  EXTERNAL_IP      STATUS
grasys-template-test01  asia-notrheast1-a  g1-small                  10.XXX.X.X   XXX.XXX.XXX.XXX  RUNNING
grasys-template-test02  asia-notrheast1-a  g1-small                  10.XXX.X.X   XXX.XXX.XXX.XXX  RUNNING

最後に環境をキレイにクリーンアップしましょう。

$ gcloud deployment-manager deployments delete template-deployment
The following deployments will be deleted:
- template-deployment

Do you want to continue (y/N)?  y

Waiting for delete [operation-1509438271562-55cd37bfca111-26e52a27-980b3018]...done.
Delete operation operation-1509438271562-55cd37bfca111-26e52a27-980b3018 completed successfully.
$ gcloud deployment-manager deployments delete test01-deployment

まとめ

今回はGoogle Deployment Managerを使ってインスタンスを作成してみました。

こちらのコマンドでGoogle Deployment Managerがサポートしているリソースの一覧を取得することが可能です。

$ gcloud deployment-manager types list

実に多い!