ヤマムギ

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 ,

  関連記事

AWS RDS でMySQLインスタンスを構築する

Amazon Web ServiceにはAmazon Relational Da …

AWS Lambda(Python)からAmazon Connectで電話を発信する

自動で電話を発信する必要がありまして、電話発信APIを開発することになりましたの …

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

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

AWS ControlTowerで既存アカウントをまとめて追加

AWS Organizationsに新たに招待したアカウントをAWS Contr …

EC2 Auto Recovery機能を設定しておいた

以前EC2インスタンスのリタイア対象になったこともあり、というより、やっておいて …

RDSのスナップショットをS3へエクスポートが日本語マネジメントコンソールでもできるようになってました

RDSスナップショットをS3にエクスポートする新機能を試そうかと思ったのときは、 …

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

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

AWS Application Discovery Serviceのエージェントを実行

本来はオンプレミスのサーバーにエージェントをインストールして、自動でアプリケーシ …

AWS CLIを使用せずにCodeCommitへhttpsで接続する

AWS CLIやアクセスキーID、シークレットアクセスキーなどを開発環境にセット …

ブラウザからJavaScript SDKを使ってAmazon S3 への写真のアップロードチュートリアルをやってみました

ブラウザから Amazon S3 への写真のアップロードをやってみました。 HT …