GCPで長時間バッチ処理終了時に自動終了したい
簡単にまとめるとこんな感じ
- gcp(Google Cloud Platform)を使っている
- GCPで時間がかかる処理をしている(実験とか、クローリングとか)
- 処理をしてないときはインスタンスを停止させておきたい
- プロセス監視させるシェルスクリプトで対応!
- 停止したことをきちんと確認したい
- shutdown-scriptをメタデータに記述
目次
プロセス監視するシェルスクリプトを書く
今回は、インスタンス内部でプロセスを監視して、プロセス終了とともにインスタンスを終了させる方針にした。
くどい感じではあるが、このスクリプトの中でもSlackに通知させる機能を書いておいた
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
# 自動終了スクリプト # bash machine_auto_shutdown.sh [対象プロセス番号] echo "Start checking" URL_SLACK_WEBHOOK="[ここに書く]" # slack webhookのURL PID=$1 MYHOST=`hostname -s` SLACK_TEXT=${MYHOST}" will be shutdown. Bye!" while : do if [[ ! -e "/proc/${PID}" ]];then # slack通知 if [ -z ${URL_SLACK_WEBHOOK} ]; then echo ""; else curl -X POST --data-urlencode "payload={"channel": "#general", "text": "${SLACK_TEXT}"}" ${URL_SLACK_WEBHOOK}; fi # 終了操作 shutdown -h now exit 0 fi echo `date` " PID ${PID} still lives" sleep 60 done |
停止したことの確認
停止できたことはちゃんと確認できたほうがいいだろう。
(停止したつもりで、インスタンスが動き続けているのは一番ヤバい)
通知先はSlackにしている。SlackはWebhook URLがすぐに用意できるから、通知先としてとても便利
GCPのコンソール画面で、インスタンス作成時に、カスタムメタデータの欄につぎのペアを入力する。
キー
1 |
shutdown-script |
値
slackのWeb HookURLのアドレスは自分のアドレスに変更する
1 2 |
#!/bin/bash curl -X POST --data-urlencode "payload={"text": "GCP instance stopped ($(hostname))\n$(uptime)" }" https://hooks.slack.com/services/xxxxxx |
使い方
- バーチャルコンソール(tmuxなど)を立ち上げておく
- 監視対象のプロセス番号を知る
- ps aux | grep 実行スクリプト名
- sudo bash machine_auto_shutdown.sh プロセス番号
おしまい!
ディスカッション
コメント一覧
まだ、コメントがありません