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 になります。
リソースプロパティを調べる
リソースタイプのページを開きます。
compute.v1.instance を探して、「ドキュメント」を開きます。
疑似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形式に変換する
上記のサイトに、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ファイルの書き方に慣れていきましょう。
コメント