【GCP】Deployment Manager 向けの YAMLファイルの書き方

YAMLファイル GCP
YAMLファイル

GCP の Deployment Manager 向けの YAMLファイルの書き方を習ったので、忘れないようにメモしておきます。

Deployment Manager 向けの YAMLファイルの書き方

YAMLファイルは、このような内容になります。
どうやって書くのか、順番に解説していきます。

YAML ファイルの基本形式

resources:
- name: [RESOURCE_NAME]
  type: [RESOURCE_TYPE]
  properties:
    # プロパティ

[RESOURCE_NAME] は、リソースの名前です。ここでは testserver にしておきます。
YAMLファイルの名前も、testserver.yaml にしておきます。

リソースタイプを調べる

gcloud deployment-manager types list

リソースタイプの一覧を取得します。

gcloud deployment-manager types list | grep v1.*instance

仮想マシンインスタンスのリソースタイプを調べるときは、上記のコマンドを使用します。
本番環境対応のリソースは「v1」で区別します。
リソースタイプ[RESOURCE_TYPE]は、compute.v1.instance になります。

リソースプロパティを調べる

Supported resource types  |  Cloud Deployment Manager Documentation  |  Google Cloud

リソースタイプのページを開きます。
compute.v1.instance を探して、「ドキュメント」を開きます。

REST Resource: instances  |  Compute Engine Documentation  |  Google Cloud

疑似JSONコードでプロパティが書かれています。
instance-properties.txt という名前のファイルを作成し、疑似JSONコードを保存します。

疑似JSONコードをJSONコードに変換する

echo $1
sed -i 's/string/"string"/g' $1
sed -i 's/boolean/"boolean"/g' $1
sed -i 's/integer/"integer"/g' $1
sed -i 's/unsigned long/"unsigned long"/g' $1
sed -i 's/bytes/"bytes"/g' $1
sed -i 's/(key)/"(key)"/g' $1
sed -i 's/float/"float"/g' $1
sed -i 's/etag/"etag"/g' $1
sed -i 's/long,/"long",/g' $1
sed -i 's/enum/"enum"/g' $1
sed -i 's/\.\.\./"dummy": "string"/g' $1

proto2json というファイル名で上記の内容を保存します。

chmod +x proto2json

proto2json に実行権限を付けます。

./proto2json instance-properties.txt

疑似JSONコードをJSONコードに変換します。

JSONコードを YAML形式に変換する

https://www.json2yaml.com/
Convert JSON to YAML and slim down your data with the json2yaml online editor

上記のサイトに、JSONコードをコピー&ペーストして、YAML形式に変換します。
エラーが出るときは、proto2json を修正するか、不要なJSONコードを削除しましょう。
必要なプロパティだけ残して、testserver.yaml にコピー&ペーストします。
ここまでで、testserver.yaml の内容はこのようになります。

resources:
- name: testserver
  type: compute.v1.instance
  properties:
    machineType: string
    zone: string
    networkInterfaces:
    - network: string
      accessConfigs:
      - type: enum
        name: string
    disks:
    - type: enum
      deviceName: string
      boot: boolean
      initializeParams:
        sourceImage: string
      autoDelete: boolean

「ドキュメント」で角括弧で書かれているプロパティは、リストを表します。
YAMLでリストは「-」で表します。
「ドキュメント」と見比べて、「-」が必要なところは追記します。

プロパティ値を決める

zone

gcloud compute zones list

zone 一覧が表示されるので、zone を選択します。

machineType

gcloud compute machine-types list | grep [YOUR_ZONE]

ゾーン[YOUR_ZONE]で使えるマシンタイプが表示されます。
例えば、f1-micro を使用したい場合、次のコマンドで表示される selfLink を machineType に指定します。

gcloud compute machine-types describe f1-micro --zone [YOUR_ZONE]

network

gcloud compute networks list

ネットワーク一覧が表示されます。
ネットワークの詳細に表示される selfLink を network に指定します。

gcloud compute networks describe default

accessConfigs

「ドキュメント」を参照して、name は任意の文字列(ここでは「External_NAT」)、 type は「ONE_TO_ONE_NAT」を指定します。

disks

type

「ドキュメント」を参照して、「PERSISTENT」を指定します。

deviceName

「ドキュメント」を参照して、一般的な名前「boot」を指定します。

boot

ブートディスクなので「true」を指定します。

initializeParams の sourceImage
gcloud compute images list --uri | grep debian

debian-10 のソースイメージをURIで指定します。

autoDelete

インスタンスが削除されたときに、自動で削除されるようにしたいので「true」を指定します。

YAMLファイルの完成

resources:
- name: testserver
  type: compute.v1.instance
  properties:
    machineType: https://www.googleapis.com/compute/v1/projects/[YOUR_PROJECT]/zones/us-east1-b/machineTypes/f1-micro
    zone: us-east1-b
    networkInterfaces:
    - network: https://www.googleapis.com/compute/v1/projects/[YOUR_PROJECT]/global/networks/default
      accessConfigs:
      - type: ONE_TO_ONE_NAT
        name: External_NAT
    disks:
    - type: PERSISTENT
      deviceName: boot
      boot: true
      initializeParams:
        sourceImage: https://www.googleapis.com/compute/v1/projects/debian-cloud/global/images/debian-10-buster-v20200413
      autoDelete: true

デプロイ

gcloud deployment-manager deployments create testserver --config testserver.yaml

サーバーが起動することを確認します。
エラーが出たら、YAMLファイルを修正します。
GCP Console の Compute Engine で下記のように起動したら成功です。

まとめ

YAMLファイルが完成しました。
簡単な構成なのに、けっこう時間がかかった印象です。
しかし、一回 YAMLファイルを作ってしまえば、次に使う時にも使い回せます。
YAMLファイルの書き方に慣れていきましょう。

コメント

タイトルとURLをコピーしました