概要
普段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のカスタムメタデータの値にさっきのシェルスクリプトの内容を貼り付けよう
