EC2で起動時やterminate時にシェルを実行する

2013.02.28

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

特定のタイミングでシェルを動かしたい

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すれば停止時のメッセージが出力されます。