概要
普段kaggleでGCEを使うときにプリエンプティブインスタンスを使うのですが, プリエンプティブインスタンスは24時間以内に停止させられてしまいます.
停止させられたら「停止したよ」ってお知らせできるようにしたいなと思って, GCEだとそれが簡単にできることがわかったのでそれの覚書です.
事前準備
まず事前準備として通知したいslackのチャンネルなどのwebhookを設定してください.こちらの記事がわかりやすくまとまっています.
では以下で説明しやすいようにwebhookのurlをhttps://hogehoge
として, 自分宛てにメンションを飛ばすように自分のユーザー名をhoge
とします.
シェルスクリプトでの動作確認
慎重に行うためにまずはシェルスクリプトでの動作確認をしてみます.
以下のようなシェルスクリプトを作ってください.これをtmp.sh
とします.
# bin/bash
WEBHOOK_URL="https://hogehoge"
JSON="{\"text\": \"<@hoge> インスタンスが停止しちゃったよ!\"}"
curl -s -X POST -H 'Content-Type: application/json' -d "$JSON" $WEBHOOK_URL
メンションは<@hoge>
とするとできますよ.
さ, これを叩いてみて実際に自分のところにメンション付きできたのを確認できたら次に進みましょう.
インスタンスの設定
さ, もう一歩です.
自分のGCEのインスタンスの設定を編集したいのでインスタンス名を押すと以下の画像のようにインスタンスの編集を行うボタンが現れるので押します.
するとカスタムメタデータ
という項目があるので項目を追加
を押して, キーにshutdown-script
と入れます.
値にはさきほどのtmp.sh
の内容をまるっとコピペします.
以上で完了です! ちなみにshutdown-script
の部分をstartup-script
にすると起動したタイミングで通知させることができます.
こんな感じです.
まとめ
- まずはwebhookのurlを取得しよう
- シェルスクリプトから立たけるようにしよう
- GCEのカスタムメタデータのキーに
shutdown-script
と入れよう - GCEのカスタムメタデータの値にさっきのシェルスクリプトの内容を貼り付けよう