Amazon EC2 Auto Scaling ライフサイクルフック - Amazon EC2 Auto Scaling (日本語)

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Amazon EC2 Auto Scaling ライフサイクルフック

Amazon EC2 Auto Scaling は、Auto Scaling グループにライフサイクルフックを追加する機能を提供します。これらのフックにより、Auto Scaling グループは Auto Scaling インスタンスライフサイクルのイベントを認識し、対応するライフサイクルイベントが発生したときにカスタムアクションを実行できます。ライフサイクルフックは、インスタンスが次の状態に移行する前に、ライフサイクルアクションを完了するための指定された時間(デフォルトでは 1 時間)を提供します。

Auto Scaling インスタンスでライフサイクルフックを使用する例として、

  • スケールアウトイベントが発生すると、新しく起動したインスタンスは起動シーケンスを完了し、待機状態に移行します。インスタンスが待機状態の間に、スクリプトを実行して、トラフィックの受信を開始する前に、インスタンスの準備をすべて完了できます。スクリプトがソフトウェアのインストールを終了すると、complete-lifecycle-actionコマンドを実行して、操作を続けます。

  • スケールインイベントが発生すると、ライフサイクルフックによってインスタンスが終了される前に一時停止され、Amazon EventBridge を使用して通知が送信されます。インスタンスが待機状態にあるときに、AWS Lambda関数を使用するか、インスタンスに接続して、インスタンスが完全に終了される前にログやその他のデータをダウンロードできます。

ライフサイクルフックの一般的な使用方法は、インスタンスが Elastic Load Balancing に登録されるタイミングを制御することです。Auto Scaling グループに起動ライフサイクルフックを追加すると、ライフサイクルフックの最後にロードバランサーに登録される前に、インスタンス上のアプリケーションがトラフィックを受け入れる準備ができていることを確認できます。

注記

Amazon EC2 Auto Scaling は、Auto Scaling グループのデプロイを支援する独自のライフサイクルを提供します。このライフサイクルは、他の EC2 インスタンスのライフサイクルとは異なります。詳細については、「Amazon EC2 Auto Scaling インスタンスのライフサイクル」を参照してください。

ライフサイクルフックの仕組み

Auto Scaling グループにライフサイクルフックを追加すると、次のように機能します。

  1. Auto Scaling グループはスケールアウトイベントに応答し、インスタンスの起動を開始します。

  2. ライフサイクルフックはインスタンスを待機状態 (Pending:Wait) し、カスタムアクションを実行します。

    インスタンスは、ライフサイクルアクションを完了するまで、待機状態のままです。完全なライフサイクルアクションCLI コマンド、またはCompleteLifecycleActionアクションを終了するか、タイムアウト期間が終了するまで。デフォルトでは、インスタンスは 1 時間にわたって待機状態になった後、Auto Scaling グループは起動プロセスを続行します (Pending:Proceed). さらに時間が必要な場合は、ハートビートを記録することにより、タイムアウト期間を再開できます。タイムアウト期間が切れる前にライフサイクルアクションを完了すると、その期間が終了し、Auto Scaling グループは起動プロセスを続行します。

  3. インスタンスはInService状態になり、ヘルスチェックの猶予期間が開始します。Auto Scaling グループが Elastic Load Balancing ロードバランサーに関連付けられている場合、インスタンスはロードバランサーに登録され、ロードバランサーの状態チェックを開始します。ヘルスチェックの猶予期間が終了すると、Amazon EC2 Auto Scaling はインスタンスのヘルス状態のチェックを開始します。

  4. Auto Scaling グループはスケールインイベントに応答し、インスタンスの終了を開始します。Auto Scaling グループが Elastic Load Balancing で使用されている場合、まず、終了するインスタンスがロードバランサーから登録解除されます。ロードバランサーの接続のドレインが有効になっている場合、インスタンスは新しい接続の受け入れを停止し、既存の接続のドレインを待ってから登録解除プロセスを完了します。

  5. ライフサイクルフックはインスタンスを待機状態 (Terminating:Wait) し、カスタムアクションを実行します。

    ライフサイクルアクションを完了するまで、またはタイムアウト期間が終了するまで (デフォルトでは 1 時間)、待機状態のままになります。ライフサイクルフックを完了するか、タイムアウト期間が終了すると、インスタンスは次の状態 (Terminating:Proceed).

  6. インスタンスは終了しました。

次の図は、このプロセスにおける Auto Scaling インスタンスの状態間の遷移を示しています。


                ライフサイクルフックを使用するインスタンスのライフサイクル。

考慮事項と制約事項

ライフサイクルフックを使用する場合は、以下の考慮事項と制限事項に留意してください。

  • 予期しない障害が発生した場合に起動を中止するように起動ライフサイクルフックを設定できます。その場合、Amazon EC2 Auto Scaling は自動的に終了し、インスタンスが置き換えられます。

  • Amazon EC2 Auto Scaling は、ライフサイクルフックが一貫して障害が発生した場合に、インスタンスを起動できるレートを制限します。

  • ライフサイクルフックはスポットインスタンスと共に使用できます。ただし、ライフサイクルフックでは、使用可能な容量がなくなった場合にインスタンスが終了するのを防ぐことはできません。これは、2 分間の中断通知がある場合に発生する可能性があります。詳細については、「」を参照してください。スポットインスタンスの中断()Linux インスタンス用 Amazon EC2 ユーザーガイド

  • スケールアウトするとき、Amazon EC2 Auto Scaling は、起動ライフサイクルフックが終了するまで(およびスケーリングポリシーのウォームアップ時間が完了するまで)、Auto Scaling グループの集約された CloudWatch メトリックスに対して新しいインスタンスをカウントしません。スケールインすると、終了するインスタンスは、終了ライフサイクルフックが終了するまでグループの集計メトリックスの一部としてカウントされ続けます。

  • 簡易スケーリングポリシーによって Auto Scaling グループがインスタンスを起動または終了した場合、クールダウン期間が実施されます。クールダウン期間は、以前の簡易スケーリングアクティビティの影響が表示される前に、Auto Scaling グループが必要以上に多くのインスタンスを起動または終了しないようにするのに役立ちます。ライフサイクルアクションが発生し、インスタンスが待機状態になると、簡易スケーリングポリシーによるスケーリングアクティビティが一時停止されます。ライフサイクルアクションが終了すると、クールダウン期間が開始します。クールダウン期間に長い間隔を設定すると、スケーリングが再開されるまでに時間がかかります。詳細については、「Amazon EC2 Auto Scaling のスケーリングクールダウン」を参照してください。

  • Auto Scaling グループごとに作成できるライフサイクルフックの最大数を指定するクォータがあります。詳細については、「Amazon EC2 Auto Scaling サービスのクォータ」を参照してください。

  • ライフサイクルフックの使用例については、以下のブログ記事を参照してください。Lambda および Amazon EC2 の Run コマンドを使用したスケーリングされたインスタンスのBackup システムの構築およびEC2 Auto Scaling インスタンスを終了する前にコードを実行する

インスタンスを待機状態に保つ

インスタンスは一定期間、待機状態に維持できます。デフォルトは 1 時間 (3,600 秒) です。

以下の方法で、タイムアウト期間を調整できます。

  • ライフサイクルフックを作成するときに、ライフサイクルフックのハートビートタイムアウトを設定します。とプットライフサイクルフックコマンドを使用して、--heartbeat-timeoutオプション。

  • タイムアウト期間が終了する前に終了したときに次の状態に移るには、完全なライフサイクルアクションコマンド。

  • ハートビートを記録することにより、タイムアウトの終了を延長するには、レコードライフサイクルアクションハートビートコマンド。これにより、ライフサイクルフックを作成するときに指定するタイムアウト時間によってタイムアウト期間が延長されます。たとえば、タイムアウト値が 1 時間に設定されている場合、30 分後にこのコマンドを呼び出すと、追加した時間に応じてインスタンスが待機状態のままになります (合計 90 分)。

インスタンスを待機状態に保つことができる最大時間は、48 時間またはハートビートのタイムアウトの 100 倍の、どちらか短い方です。

ライフサイクルフック通知の受信

インスタンスが待機状態になり、Amazon EC2 Auto Scaling がライフサイクルアクションのイベントを EventBridge に送信したときに、Lambda 関数を呼び出すか、通知を送信するように、さまざまな EventBridge ルールを設定できます。イベントには、起動または終了されるインスタンスに関する情報と、ライフサイクルアクションをコントロールするために使用できるトークンが含まれています。ライフサイクルフックを作成するための入門チュートリアルスタイルのガイドについては、チュートリアル: Lambda 関数を呼び出すライフサイクルフックの設定。ライフサイクルアクションが発生したときに発行されるイベントの例については、」Auto Scaling イベント

または、起動後にインスタンスを設定するユーザーデータまたは cloud-init スクリプトがある場合は、通知を設定する必要はありません。このスクリプトは、それが実行されているインスタンスの ID を使用してライフサイクルアクションを制御できます。まだそうしていない場合は、インスタンスメタデータからインスタンスのインスタンス ID を取得するためのスクリプトを更新します。詳細については、「」を参照してください。インスタンスメタデータの取得()Linux インスタンス用 Amazon EC2 ユーザーガイド。設定スクリプトの完了時にスクリプトにライフサイクルフックを通知させ、インスタンスが次の状態に進むようにすることができます。

注記

Amazon EC2 Auto Scaling コンソールには、ライフサイクルフックの Amazon SNS または Amazon SQS 通知ターゲットを定義するオプションはありません。これらのライフサイクルフックは、AWS CLIまたは SDK のいずれかを使用することもできます。詳細については、「通知の設定」を参照してください。

GitHub リポジトリ

あなたは私たちを訪問することができますGitHub リポジトリライフサイクルフックのテンプレートとスクリプトをダウンロードします。

ライフサイクルフックの可用性

次の表に、さまざまなシナリオで使用できるライフサイクルフックを示します。

イベント インスタンスの起動または終了¹ インスタンスの最大存続期間: 置換インスタンス インスタンスの更新: 置換インスタンス 容量の再調整: 置換インスタンス ウォームプール: ウォームプールに出入りするインスタンス
インスタンスの作成
インスタンスの停止

¹ グループの作成または削除時、グループの自動スケーリング時、またはグループの希望する容量を手動で調整した場合に、起動または終了したインスタンスに適用されます。インスタンスのアタッチまたはデタッチ、インスタンスのスタンバイモードへの切り替え、または強制削除オプションを使用したグループの削除には適用されません。