ウォームプールでライフサイクルフックを使用する - Amazon EC2 Auto Scaling

ウォームプールでライフサイクルフックを使用する

ウォームプールのインスタンスは、移行ごとに適切なカスタムアクションを作成できるように、独自の独立したライフサイクルを維持します。このライフサイクルは、インスタンスがまだ初期化中、およびサービスを開始する前に、ターゲットサービス (Lambda 関数など) でアクションを呼び出すように設計されています。

注記

ライフサイクルフックと完全なライフサイクルアクションの追加と管理に使用する API オペレーションは変更されません。インスタンスのライフサイクルのみが変更されます。

ライフサイクルフック追加の詳細については、ライフサイクルフックを追加する を参照してください。ライフサイクルアクション完了の詳細については、ライフサイクルアクションを完了する を参照してください。

ウォームプールに入るインスタンスは、次のいずれかの理由でライフサイクルフックが必要になる場合があります。

  • 初期化の完了に時間がかかる AMI から EC2 インスタンスを起動する。

  • ユーザーデータスクリプトを実行して EC2 インスタンスをブートストラップする。

ウォームプールを離れるインスタンスは、次のいずれかの理由でライフサイクルフックが必要になる場合があります。

  • EC2 インスタンスの使用準備に、時間を追加することができます。例えば、インスタンスの再起動時に、アプリケーションが正常に動作する前に、開始する必要があるサービスがあるとします。

  • キャッシュデータを事前入力して、新しいサーバーが空のキャッシュで起動しないようにすることができます。

  • 新しいインスタンスをマネージドインスタンスとして設定管理サービスに登録する場合。

ウォームプール内のインスタンスのライフサイクル状態の移行

オートスケーリングインスタンスは、ライフサイクルの一環として多くの状態に移行します。

次の図表は、ウォームプール使用時のオートスケーリング状態間の移行を示しています。


                    ウォームプール内のインスタンスのライフサイクル状態の移行。

¹ この状態は、ウォームプールのプール状態設定によって異なります。プール状態が Running に設定されている場合、この状態は代わりに Warmed:Running になります。プール状態が Hibernated に設定されている場合、この状態は代わりに Warmed:Hibernated になります。

ライフサイクルフックを追加するときは、次の点を考慮してください。

  • ライフサイクルフックが autoscaling:EC2_INSTANCE_LAUNCHING ライフサイクルアクションに対して設定されている場合、新しく起動したインスタンスは、Warmed:Pending:Wait 状態に達したときに一時停止してカスタムアクションを実行します。その後、インスタンスが再開して Pending:Wait 状態になったときに再度一時停止してカスタムアクションを実行します。

  • ライフサイクルフックが EC2_INSTANCE_TERMINATING ライフサイクルアクションに対して設定されている場合、終了するインスタンスは、Terminating:Wait 状態に達したときに一時停止してカスタムアクションを実行します。ただし、スケールインでインスタンスをウォームプールに戻すインスタンスの再使用ポリシーを指定した場合、ウォームプールに戻るインスタンスは Warmed:Pending:Wait 状態で一時停止して EC2_INSTANCE_TERMINATING ライフサイクルアクションにカスタムアクションを実行します。

  • アプリケーションの要求によってウォームプールが枯渇した場合、Amazon EC2 Auto Scaling はグループが最大容量に到達していない限り、 Auto Scaling グループでインスタンスを直接起動できます。インスタンスがグループ内で直接起動する場合、インスタンスは Pending:Wait 状態でのみ一時停止してカスタムアクションを実行します。

  • 次の状態に遷移するまでにインスタンスが待機状態を維持する時間を制御するには、complete-lifecycle-action コマンドを使用するようカスタムアクションを設定します。ライフサイクルフックを使用すると、インスタンスは、指定されたライフサイクルアクションが完了したことをユーザーが Amazon EC2 Auto Scaling に通知するか、タイムアウト期間が終了するまで (デフォルトでは 1 時間) 待機状態のままになります。

スケールアウトイベントのフローの概要を次に示します。


                    スケールアウトイベントのフロー図。

インスタンスが待機状態になると、Amazon EC2 Auto Scaling は通知を送信します。これらの通知の例については、このガイドの EventBridge セクションを参照してください。詳しくは、「ウォームプールイベントのタイプとパターン」を参照してください。

サポートされている通知ターゲット

Amazon EC2 Auto Scaling は、ライフサイクル通知の通知ターゲットとして、次のいずれかを定義するためのサポートを提供します。

  • EventBridge ルール

  • Amazon SNS トピック

  • Amazon SQS キュー

重要

起動時にインスタンスを設定するユーザーデータ (cloud-init) スクリプトが起動テンプレートまたは起動設定にある場合、起動または再起動されるインスタンスでカスタムアクションを実行するための通知を受け取る必要はありません。

次のセクションでは、通知ターゲットの設定方法について説明しているドキュメントへのリンクを示します。

EventBridge ルール: Amazon EC2 Auto Scaling がインスタンスを待機状態にする際にコードを実行するには、EventBridge ルールを作成し、ターゲットとして Lambda 関数を指定します。異なるライフサイクル通知に基づいて異なる Lambda 関数を呼び出すには、複数のルールを作成し、各ルールを特定のイベントパターンおよび Lambda 関数に関連付けます。詳細については、「ウォームプールイベント向けの EventBridge ルールを作成する」を参照してください。

Amazon SNS トピック: インスタンスが待機状態になったときに通知を受け取るには、Amazon SNS トピックを作成し、メッセージ属性に基づいてライフサイクル通知を異なる方法で配信するように、Amazon SNS メッセージフィルタリングを設定します。詳細については、「Amazon SNS を使用した通知の受信」を参照してください。

Amazon SQS キュー: 関連するコンシューマーがライフサイクル通知を受け取って処理できる配信ポイントを設定するには、Amazon SQS キュー、および SQS キューからのメッセージを処理するキューコンシューマーを作成します。キューコンシューマーに、メッセージ属性に基づいてライフサイクル通知を別々に処理させる場合は、特定の属性が目的の値と一致する際にメッセージを解析、処理するようにキューコンシューマーを設定する必要があります。詳細については、「Amazon SQS を使用した通知の受信」を参照してください。