ヤマムギ

growing hard days.

*

Amazon EC2 Auto Scalingのライフサイクルフック

      2021/08/04

EC2 Auto Scalingにライフサイクルフックという機能があります。
スケールアウト時にソフトウェアのデプロイを完全に完了したことを確認してからInServiceにしたり、スケールイン時に必要なデータのコピーを完了してからターミネートする場合などに利用できそうです。

起動テンプレート、オートスケーリンググループは特に何かアプリケーションとかはインストールせずにAmazon Linux2が起動するだけのものにしました。

Amazon EC2 Auto Scalingライフサイクルフックの設定

スケールアウト時の設定です。

スケールイン時の設定です。

これでスケールアウト、スケールインの状態になるとPendingで停止します。
ライフサイクルフックの状態が完了したことを3600秒以内に送信すると、以下になります。
* スケールアウトしたインスタンスがオートスケーリンググループに含まれてInService状態になる。
* スケールインしたインスタンスがターミネートされる。

延長したい場合は、延長アクションも送信できるようです。

3600秒以内に送信しなければABANDON(放棄)なので、スケールアウトは起動したインスタンスの終了?、スケールインはターミネートせずにInServiceに戻るんでしょうか。
これは最後にハートビートタイムアウトを30秒に設定して試します。

Amazon Event Bridgeで通知の設定

ライフサイクルフックを設定したあとに、Event BridgeでLambdaをターゲットに設定しました。

イベントデータを確認したいためです。
LambdaはPythonで、
print(event)
だけ書き足しました。

スケールアウトで試す

希望する容量を1つ手動で増やして確認しました。

オートスケーリングのアクティビティ履歴でPreInServiceになりました。

追加されたインスタンスがPending: Waitになりました。

Lambdaイベント

ライフサイクルフックイベントが実行されたことと、EC2InstanceId、LifecycleActionToken、AutoScalingGroupName、LifecycleHookNameといったこのあと必要な情報がありました。

スケールアウトをPending→InServiceへ

CloudShellからコマンドで実行しました。

EC2InstanceIdを使用する方法と、LifecycleActionTokenを使用する方法があるようです。

EC2InstanceIdを使用する方法

LifecycleActionTokenを使用する方法

InServiceになりました。
アクティビティ履歴もSuccessfulに変わりました。

ちなみにタイムアウトを延長するコマンドはパラメータは同じで、
aws autoscaling record-lifecycle-action-heartbeat
でした。

スケールインで試す

オートスケーリンググループで希望する容量を減らしました。

アクティビティ履歴でMidTerminatingLifecycleActionになりました。

インスタンスはTerminateing: Waitになりました。

Lambdaイベント

スケールアウトのときとフォーマットは同じですね。

スケールインをPending→InServiceへ

スケールアウトのときはトークンを使ったので、今回はインスタンスIDでやってみます。

無事スケールインされました。

ABANDONのふるまい確認

ハートビートタイムアウトを30秒に変更しました。

スケールアウトさせて放置しました。
Pending:Waitになって、30秒経過すると、ターミネートされました。
でも希望する容量は+1の状態なので、次のインスタンスが起動してきて、また30秒経過してターミネートと繰り返されました。

次はスケールインして放置しました。
Terminating:Waitになって、30秒経過するとターミネートされました。

ABANDONの放棄は、リクエストの放棄ではなく、インスタンスを放棄するという意味だったのですね。


最後までお読みいただきましてありがとうございました!

「AWS認定資格試験テキスト&問題集 AWS認定ソリューションアーキテクト - プロフェッショナル 改訂第2版」という本を書きました。

「AWS認定資格試験テキスト AWS認定クラウドプラクティショナー 改訂第3版」という本を書きました。

「ポケットスタディ AWS認定 デベロッパーアソシエイト [DVA-C02対応] 」という本を書きました。

「要点整理から攻略するAWS認定ソリューションアーキテクト-アソシエイト」という本を書きました。

「AWSではじめるLinux入門ガイド」という本を書きました。

 - AWS ,

ad

ad

  関連記事

DS18B20センサー+Raspberry Piで取得した温度をAmazon Kinesis FirehoseからS3へ格納してAthenaでクエリーしたのをQuickSightで可視化する

JAWS DAYS 2017でやりますハンズオンの「[IoTハンズオン] Ras …

EC2インスタンスを必要最小限のパラメータでCLIとSDKから起動する

EC2インスタンスをCLIとSDKから起動するデモで、パラメータを必要最小限にし …

AWS Organizationsでタグポリシーを設定しようとしました

Organizationsで[タグポリシーを有効にする]ボタンを押下しました。 …

kintone webhookからAWS API Gateway – Lambdaを実行しレコードの値を渡す

2017年2月のアップデートでkintoneにWebhook機能がリリースされま …

Amazon CloudWatch Anomaly Detectionをダッシュボードに設定

Amazon CloudWatch クロスリージョンクロスアカウントダッシュボー …

Cloud9 Python3でpipも3にする

このブログは、2019/10/20に書いた、 Cloud9のAMIがCloud9 …

執筆環境(PyCharm, CodeCommit, CodePipeline, S3, Lambda, 署名付きURL)

2018年から、年に1回ぐらい商業本の執筆をさせていただいております。 2020 …

Extend Switch Roles(Chromeのアドオン)で6つ以上のスイッチロール履歴

最近アカウントIDを忘れたりすることも多くなったので、切り替えに手間取ることがあ …

LINE BOT AWARDS 2017に応募しました

LINEの友達追加QRです。 動作のご確認にどうぞ LINE BOT AWARD …

EFSをEC2(Amazon Linux 2)からマウントする

Amazon Elastic File Systemが東京リージョンに来たことも …