AutoScalingからCloudWatchEvents(Lambda)を呼ぶ

Apr 23, 2017   #aws  #autoscaling  #ssm  #cloudwatch  #lambda 

はじめに

ご無沙汰してます、えのかわです。先日投稿したエントリの続きです。
今回は、Auto Scaling の Lifecycle Hooks の TERMINATING をトリガーに、CloudWatch Events から Lambda Function をキックして、SSM Run Commandを呼んでみます。
ゴールはログを S3 に転送することとします。

AutoScaling設定

前回のエントリと同様の AWS CLI を流します。
Scaling Policies、Lifecycle hook の作成も併せて行います。

Lambda Function作成

今回はせっかくなので Serverless Framework を用いて Lambda Function を作成します。

CloudWatch Events作成

CloudWatch Events の設定も Serverless Framework で行いたかったのですが何故か上手くいかず、、、しょうがなく GUI で設定しました。 ドキュメントはこちらです。

AutoScaling実施

今回は Scale In Event のみ Execute します。

Terminating -> Terminating:Wait -> Terminating:Proceed -> Terminated の順番でサービスアウトしました。

s3 の中身を見てみると、、、

sls-autoscaling % aws s3 ls s3://enokawa-logs/
                           PRE i-xxxxxxxxxxxxxx1/
                           PRE i-xxxxxxxxxxxxxx2/

問題なくスケールインされたインスタンスのログのみ転送されてました。

おわりに

awslabs のサンプルスクリプトが参考になりました。
AutoScaling の Complete Lifecycle Action を Lambda で実施するか Run Command で実施するかどうかは賛否両論あるかと思いますが、今回はシンプルに実行できる Run Command で投げてみました。
Lifecycle Hooks 便利ですね〜。