ヤマムギ

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 LinuxにRedmine 環境構築(エラーと対応をそのまま記載版)

Amazon Linuxにgit + Redmineの環境を構築してみます。 自 …

Amazon CodeCatalystのスペースとプロジェクトを作成してみました

Amazon CodeCatalystはIAMユーザーで操作するのではなく、AW …

特定AWSアカウント特定リージョンのSQSキューを削除するLambda(Python)

やりたいこと 特定アカウント内特定リージョン内のSQSキューを全部削除したいです …

VPC内のLambdaからVPCエンドポイント経由でSecrets Managerを使う

InternetGatewayのないVPCでMySQLに対して一日数回のレポーテ …

EC2 Auto ScalingカスタムメトリクスのモニタリングにCloudWatch検索式が便利でした

EC2 Auto Scalingで起動したインスタンスのカスタムメトリクス この …

「Getting started with AWS Glue DataBrew」をやってみました

AWS Glue DataBrewを体験してみたくて、開発者ガイドのチュートリア …

EC2 Auto Scalingグループでインスタンスの更新を実行

このブログのAMI、起動テンプレートを更新して、EC2 Auto Scaling …

EC2 Global Viewで不要なインスタンスを見つけて4つほど終了しました

EC2 Global Viewという機能がリリースされました。 EC2コンソール …

EC2スケジュールリザーブドインスタンスって終わりましたん?

ユーザーガイドのScheduled Reserved Instancesを見ると …

ヤマムギ vol.8 (AWS)EC2でLinuxサーバー構築ハンズオン 手順

ヤマムギとは from Mitsuhiro Yamashita 「AWSではじめ …