問題
AWSのEC2でautoscalingをしているときに、インスタンス縮退時のログの退避ってどうしたらいいんだろう?
簡単な方法は何かないかなーと思って調べました。
Auto Scaling のライフサイクルフック
下記のAWSのAuto Scalingのライフサイクルフックのオンラインマニュアルを読んだのですがよくわかりませんでした。
Auto Scaling ライフサイクルフック
よくわからないというのは、具体的にどういう手順なのかが見えませんでした…
なので、シェルスクリプトをサービスとして登録することで、
インスタンスがterminateさせられるタイミングで処理させます。
サービスのシェルスクリプト
/etc/init.d/instance-lifecycle
に下記の内容で保存します。
#!/bin/sh
# chkconfig: 2345 99 1
# description: インスタンス縮退時にトラッキングログ、各種ログを退避する
case "$1" in
start)
echo "instance lifecycle process start"
touch /var/lock/subsys/instance-lifecycle
;;
stop)
export AWS_CREDENTIAL_FILE=/opt/aws/credential
# ログをコピー
scp ~user/project/log/access_log user@server:~user/project/log/`hostname`-access_log-`date "+%Y%m%d%H" -d "1 hours"`
# ログをS3にコピー
aws s3 sync ~user/project/log s3://access_log/`hostname`
echo "instance lifecycle process end"
rm -f /var/lock/subsys/instance-lifecycle
;;
*) break ;;
esac
/var/lock/subsys/
以下にファイルが置かれたサービスがOSの終了時に実行されます。
これを有効化するために以下のコマンドを実行します。
chkconfig --add instance-lifecycle
chkconfig instance-lifecycle on
service instance-lifecycle start
これでAuto Scalingのインスタンス縮退時にログが退避されるようになります。