技術情報

【GCE】インスタンスの起動/停止をslackで通知する

こんにちは!
分析官の望月です。

最近、クライアント先でELTツールであるMatillionの試験利用が始まりました。GCPを利用している場合ですと、GCE上にMatillion用のインスタンスを立て、その環境でMatillionを動かすことになります。Matillionはインスタンスが起動している時間によって課金されるので、利用後にインスタンスの停止を忘れてしまうと無駄に費用がかかってしまいます。今回、インスタンスの停止忘れを防止したいと思ったので、インスタンスの起動時と停止時にslackで通知する仕組みを作りました。本記事ではその方法をご共有したいと思います。

①インスタンス起動時に実行したいシェルスクリプトを作成

スクリプト自体は下記の通り非常にシンプルです。

#bin/bash

WEBHOOK_URL="hoge"
JSON="{\"text\": \"インスタンスが起動されました。\"}"
curl -s -X POST -H 'Content-Type: application/json' -d "$JSON" $WEBHOOK_URL

1行目の”hoge”の箇所は通知先のslackチャンネルのWebhookURLに変更してください。
こちらの記事にWebhookURLの取得方法が分かりやすく記述されています。
2行目で通知したい内容を記述し、3行目でslack通知を行っています。

②インスタンスの編集画面から起動時に実行したいスクリプトを設定

GCEの「VMインスタンス」ページから対象のインスタンスを選択→”編集”を選択します。

編集ページの一番下にある「自動化>起動スクリプト」欄に①で作成したスクリプトを貼り付けます。

最後に”保存”を選択すれば起動時の設定は完了です。

③インスタンス停止時に実行したいシェルスクリプトを作成

こちらは①で作成したスクリプトの2行目を任意のテキストに変更するだけでOKです。

#bin/bash

WEBHOOK_URL="hoge"
JSON="{\"text\": \"インスタンスが停止されました。\"}"
curl -s -X POST -H 'Content-Type: application/json' -d "$JSON" $WEBHOOK_URL

 

④インスタンスの編集画面から停止時に実行したいスクリプトを設定

停止時の設定は編集ページ下部の「メタデータ」から行います。
下図の通り、[キー]欄に”shutdown-script”、[値]欄に③で作成したスクリプトを貼り付け、”保存”を選択すれば停止時の設定も完了です。

さいごに

watchコマンドを使えば、「インスタンス起動中は一定間隔で通知を流す」といったこともできそうです。時間がある時に試してみようと思います。

mochizuki
データサイエンティスト。筋トレ、温泉、時々スキー。