EC2で起動時やterminate時にシェルを実行する
特定のタイミングでシェルを動かしたい
EC2インスタンスの起動や停止など、任意のタイミングで何か処理をしたいことがあるとおもいます。 例えば、次のようなケースです。
- AutoScallingで起動されたインスタンスが、起動時にアプリケーションを起動したい
- terminate/stop予定のインスタンスが停止する前にデータのバックアップを行いたい
Linux環境であれば、サービスとしてシェルスクリプトを登録することで、インスタンスの起動や停止時に処理を行うことができます。
使用した環境
- EC2のOS : Amazon Linux
やってみる
起動時/停止時実行されるシェルを作成
まずはインスタンス起動/停止時に実行されるシェルを作成します。 下記のような、起動/停止時にメッセージを特定のファイルに出力するだけの単純なシェルを作成します。 名前は、「mytest」とでもしておきましょう。 なお、メッセージを出力する場所は適切な場所に変更してください。
#!/bin/sh # chkconfig: 2345 99 10 # description: test shell case "$1" in start) echo "start!" > /path/your/start.txt ;; stop) echo "stop!" > /path/your/stop.txt ;; *) break ;; esac
2行目のchkconfigは、このシェルを後にchkconfigコマンドで登録する際に必要の記述です。 最初の数字がRUNレベルの設定となっており、RUNレベル2、3、4、5で起動することを示しています。 2番目の数字がstart時の優先度、3番目の数字がstop時の優先度となっており、0〜100の数値を設定します。 3行目のdescriptionは、シェルに関する説明です。
シェルを登録
シェルができたら、/etc/init.dに置きましょう。そしてchkconfigコマンドで登録し、有効化しておきます。
% chkconfig --add mytest % chkconfig mytest on
AMIを作成
登録できたらその状態でAMIを作成し、インスタンスを起動してみましょう。 起動後にメッセージログ出力に指定したパスを確認してみてください。シェルが実行されてログファイルが作成されているはずです。 また、インスタンスをstopすれば停止時のメッセージが出力されます。