ヤマムギ

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

  関連記事

Amazon S3オブエジェクトへのリクエストをCloudTrail, Athenaで識別

こちらCloudTrail を使用した Amazon S3 リクエストの識別に書 …

AWS Managed Microsoft ADを構築してユーザー追加まで

事前準備 DNSホスト名と名前解決を有効にしたVPCを作成して、2つのAZにパブ …

EC2ユーザーデータからメタデータを取得してRocket.Chatで80ポートを使用する

Rocket.Chatのデフォルトポート番号は3000です。 80を使うようにす …

AWSのAmazon LinuxにGitマスターサーバをインストールしてRedmineリポジトリブラウザで見る

Amazon LinuxにGitをインストールする Gitをインストールして自動 …

Rocket.ChatにAWS Lambda(Python)から投稿する

Rocket.ChatにAPIで投稿するテスト(Postman)をやってみて、使 …

Amazon Aurora Serverlessを使い始めてみました(1日経過しての課金結果も)

祝!!! Amazon Aurora ServerlessがGAになりました! …

「AWS認定資格試験テキスト AWS認定クラウドプラクティショナー」執筆裏話

今日2019/4/20発売となりました「AWS認定資格試験テキスト AWS認定ク …

AWS Lambda(Python)でDynamoDB テーブルを日次で削除/作成(オートスケーリング付き)

この記事はAWS #2 Advent Calendar 2018に参加した記事で …

AWS EC2 Amazon Linux にEC-CUBE3をnginx+MySql環境へインストール(手順検証中)

EC2インスタンスを作成する 少し古い記事で恐縮ですが試したい事があるのでAWS …

GoogleForm,GASからAPI Gateway, Lambdaで入力情報をDynamoDBに格納する

vol.26 AWS認定試験テキスト認定クラウドプラクティショナーのデモ(Dyn …