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) にし、カスタムアクションを実行します。

    インスタンスは、complete-lifecycle-action 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 は、起動ライフサイクルフックが終了するまで (スケーリングポリシーのウォームアップ期間が完了するまで)、新しいインスタンスを CloudWatch グループの集計Auto Scalingメトリクスにカウントしません。スケールイン時に、終了ライフサイクルフックが完了するまで、終了インスタンスはグループの集計メトリクスの一部としてカウントされ続けます。

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

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

  • ライフサイクルフックの使用例については、ブログ投稿 AWS Lambda および Amazon Amazon EC2 Run CommandRun code before terminating an EC2 Auto Scaling instance」を参照してください。

インスタンスを待機状態に維持する

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

タイムアウト期間の長さは、次の方法で調整できます。

  • ライフサイクルフックを作成するときに、ライフサイクルフックのハートビートタイムアウトを設定します。put-lifecycle-hook コマンドで、--heartbeat-timeout パラメータを使用します。PutLifecycleHook オペレーションでは、 HeartbeatTimeout パラメータを使用します。

  • タイムアウト期間が終了する前に終了したときに次の状態に移るには、complete-lifecycle-action コマンド、または CompleteLifecycleAction オペレーションを使用します。

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

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

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

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

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

注記

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

GitHub リポジトリ

GitHub リポジトリにアクセスして、ライフサイクルフックのテンプレートとスクリプトをダウンロードできます。

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

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

イベント インスタンスの起動または終了¹ インスタンスの最大有効期間: 代替インスタンス インスタンスの更新: 代替インスタンス 容量の再分散: 代替インスタンス ウォームプール: ウォームプールに出入りするインスタンス
インスタンスの起動
インスタンスの削除

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