Edited at

AWS Auto Scalingのインスタンス縮退時のログの退避手段について

More than 1 year has passed since last update.


問題

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のインスタンス縮退時にログが退避されるようになります。