Google Compute Engineで各インスタンスが、どのインスタンステンプレートを元に生成されているかを一括表示するコマンドを作りました。
前回記事
前回の記事では、オートスケール構成でインスタンスグループのインスタンスのテンプレートを更新するのをコマンド貼り付けでなるべくやれるようにしました。
ただし、既にオートスケールで起動しているインスタンスを再作成する部分で、いったいどのインスタンスが新しいテンプレートで動いているか、調べるのが面倒という課題がありました。
今回は、それをコマンド一発で確認する方法を紹介します。
jq のインストール
インスタンスがどのテンプレートで動いているかは、以下のコマンドでわかります。
gcloud compute instances describe web-xxxx | grep instanceTemplates
describeの後はインスタンス名ですね。
まあ、これをシェルコマンドでループさせればいいんですが、せっかくなのでjson形式のデータを処理してインスタンス名を列挙してみます。
まずは、コマンドでjsonを処理できる「jq」をインストールします。Macだと「brew install jq」で一発です。先に「brew update」をしないとnot foudになるかもしれないので注意。
El Capitanでうまく行かない人はこちらを参照してみるといいと思います。
jq コマンドはこんな感じで使います↓
便利だな。これ。
シェルでループして取得
先にコマンドを出すと、これです↓
gcloud compute instances list | awk -F " " 'NR>1 {print $1}' | while read line; do echo ${line} `gcloud compute instances describe ${line} --format json | jq -r '.metadata.items[] | select( .key == "instance-template") | .value'` ; done
「gcloud compute instances list」でインスタンスの一覧を取得し、awk コマンドでヘッダはスキップして、2行目以降の1列目に出ているインスタンス名を取得。それを引数にして、「gcloud compute instances describe」コマンドでインスタンスの情報をjsonで取得。jq コマンドを使って、「instance-template」の値を表示ということをやっている。インスタンス分gcloudコマンドをたたいているので、ちょっと結果が出てくるのに時間がかかる。
こんな感じで出る↓
db
web-7oat projects/xxxx/global/instanceTemplates/ins-template-web02
web-8s49 projects/xxxx/global/instanceTemplates/ins-template-web03
web-aczz projects/xxxx/global/instanceTemplates/ins-template-web03
web-mqi7 projects/xxxx/global/instanceTemplates/ins-template-web02
web-nwie projects/xxxx/global/instanceTemplates/ins-template-web03
インスタンステンプレート使ってないインスタンスがあるとエラーが最初に出たりするけど、結果は綺麗になっているので、よしとしています。
他に方法があるかもしれませんが、今のところこれしかわからなかった。ともあれこれで、各インスタンスがどのインスタンステンプレートで動いているかは一覧で確認できるようになった。