ヤマムギ

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認定資格試験テキスト AWS認定AIプラクティショナー」という本を書きました。

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

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

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

 - AWS ,

  関連記事

RDS for MySQL のインスタンスタイプ変更

当ブログのデータベースは、RDS for MySQLです。 個人利用ですし、障害 …

AWS Systems Managerパラメータストアで「Parameter name must be a fully qualified name.」

パラメータストアでパラメータ階層を作成しようとして、パラメータ名に例えば「wor …

Cloud9でAWS CDK環境

最初ローカルに作ろうと思ったのですが、環境依存がというか、Macbookの環境で …

DynamoDB IAMポリシーで特定項目だけを許可する

検証記録です。 対象テーブル 書籍のサンプルで作ったこちらです。 所属バンドの楽 …

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

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

AWSアカウント内のLambda関数を削除するLambda(Python)

やりたいこと 特定のAWSアカウントの特定リージョンのAWS Lambda関数を …

AWS Systems Manager Run CommandでEC2 Linuxのユーザーとカレントディレクトリを確認

AWS Systems Manager Run CommandからEC2 Lin …

Amazon EC2 インスタンスメタデータサービス(IMDS) v2のみにしました

今さらながらですが、EC2 インスタンスメタデータサービス(IMDS) v2を確 …

AWS KMSのキーポリシーとアイデンティティベースポリシー

AWS KMSのCMKを作成する際に、管理者とキーユーザーを選択することで、以下 …

このブログをAWS大阪リージョンへ移行しました

大阪リージョン爆誕!! 朝起きて寝ぼけながらリージョンを見てると。 「大阪リージ …