...という質問を, 会社の同期から受けました.
状況としては, 夜退社する前にEC2インスタンス上で処理に時間がかかるスプリクトを動かしていて, 朝に結果を確認しているのだけれど, スクリプトの処理が終わってから, 朝確認するまで無駄にEC2インスタンスが動いていて, もったいないので何とか出来ないか? とのこと.
ソリューション
こういう場合, aws
コマンドとか, 或いはSDKを使って, プログラムが終わったタイミングで自分が動いているEC2インスタンスを止めてしまう, というのが1つの手だと思います.
aws
コマンドであれば, EC2インスタンスのインスタンスIDがi-xxxxxxxx
の場合,
$ aws ec2 stop-instances --instance-ids i-xxxxxxxx
のように止められるので, 同じインスタンスを使い回すのであれば, 処理に時間がかかるスクリプトの最後で, このコマンドを実行するようにしておけば良さそうです.
インスタンスIDについては,
$ curl http://169.254.169.254/latest/meta-data/instance-id i-xxxxxxxx
このようにすれば取れるので,
$ aws ec2 stop-instances --instance-ids $(curl http://169.254.169.254/latest/meta-data/instance-id)
こういう感じにしてやれば, どのEC2インスタンスでスクリプトを動かしても, 処理が終わったタイミングで適切に自分自身のEC2インスタンスを停止してくれる, と思います.
まとめ
処理に時間がかかるスクリプトが終わった時にEC2インスタンスを止める方法について書きました. もっと良い方法をご存知の方は, 是非教えていただけると嬉しいです!