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

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

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

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

Auto Scaling インスタンスでライフサイクルフックを使用する例として、以下を実行します。

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

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

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

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

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

イベント インスタンスの起動または終了¹ インスタンスの最大存続期間: 置き換えインスタンス インスタンスの更新: 置き換えインスタンス キャパシティーの再調整: 置き換えインスタンス ウォームプール: ウォームプールに出入りするインスタンス
インスタンスの起動
インスタンスの削除

¹ 自動的に開始されたか、または手動で開始されたかにかかわらず (SetDesiredCapacity もしくは TerminateInstanceInAutoScalingGroup オペレーションを呼び出す場合など)、すべての起動と終了に適用されます。インスタンスのアタッチまたはデタッチ、インスタンスのスタンバイモードへの切り替え、または強制削除オプションを使用したグループの削除には適用されません。

ライフサイクルフックの考慮事項と制限

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

  • Amazon EC2 Auto Scaling は、Auto Scaling グループの管理に役立つ独自のライフサイクルを提供します。このライフサイクルは、他の EC2 インスタンスのライフサイクルとは異なります。詳細については、「Amazon EC2 Auto Scaling インスタンスのライフサイクル」を参照してください。ウォームプール内のインスタンスには、ウォームプール内のインスタンスのライフサイクル状態の移行 で説明されている独自のライフサイクルもあります。

  • スポットインスタンスによりライフサイクルフックを使用できますが、使用可能なキャパシティがなくなった場合、ライフサイクルフックはインスタンスの終了を防ぐことができません。これは、2 分間の中断通知により、いつでも起こり得ます。詳細については、[Amazon EC2 の Linux インスタンス用ユーザーガイド] の[スポットインスタンス中断] を参照してください。ただし、キャパシティの再調整を有効にして、Amazon EC2 スポットサービスから再調整のレコメンデーションを受け取ったスポットインスタンスを積極的に置換することができます。これは、スポットインスタンスの中断リスクが高まったときに送信される信号です。詳細については、「キャパシティの再調整を使用して Amazon EC2 スポットの中断に対処する」を参照してください。

  • インスタンスは一定期間、待機状態に維持できます。ライフサイクルフックのデフォルトタイムアウトは 1 時間です (ハートビートタイムアウト)。インスタンスを待機状態に保つことができる最大時間を指定するグローバルタイムアウトもあります。グローバルタイムアウトは、48 時間か、ハートビートタイムアウトの 100 倍の時間のどちらか短い方になります。

  • ライフサイクルフックの結果は、中止または続行のどちらかになります。インスタンスが起動中の場合、「続行」はアクションが正常に実行され、Amazon EC2 Auto Scaling がインスタンスをサービス開始できることを示します。それ以外の場合、中止はカスタムアクションが失敗し、インスタンスを終了して置き換えることができることを示します。インスタンスが終了する場合、「中止」と「続行」の両方でインスタンスを終了できます。ただし、「中止」は他のライフサイクルフックなど残りのアクションをすべて停止し、「続行」は他のライフサイクルフックを完了することを許可します。

  • ライフサイクルフックが繰り返し失敗する場合、Amazon EC2 Auto Scaling はインスタンスの起動を許可する頻度を制限するので、ライフサイクルアクションをテストして永続的なエラーを修正するようにしてください。

  • AWS CLI、AWS CloudFormation、または SDK を使用したライフサイクルフックの作成と更新は、AWS Management Consoleからライフサイクルフックを作成するときには利用できないオプションを提供します。例えば、コンソールには SNS トピックや SQS キューの ARN を指定するフィールドが表示されません。これは、Amazon EC2 Auto Scaling がすでに Amazon EventBridge にイベントを送信しているからです。これらのイベントはフィルタリングして、必要に応じて Lambda、Amazon SNS、および Amazon SQS などの AWS のサービスにリダイレクトできます。

  • AWS CLI、AWS CloudFormation、または SDK を使用して CreateAutoScalingGroup API を呼び出すことによって、Auto Scaling グループの作成中に複数のライフサイクルフックを追加できます。ただし、各フックの通知ターゲットと IAM ロール (指定されている場合) が同じである必要があります。異なる通知ターゲットと異なるロールでライフサイクルフックを作成するには、PutLifecycleHook API に対する別個の呼び出しで、ライフサイクルフックを 1 つずつ作成します。

  • インスタンス起動用のライフサイクルフックを追加すると、ヘルスチェックの猶予期間は、インスタンスが InService 状態に到達するとすぐに開始されます。詳細については、「Auto Scaling グループにヘルスチェックの猶予期間を設定する」を参照してください。

スケーリングに関する考慮事項
  • 動的スケーリングポリシーは、複数のインスタンスから集計した、CPU やネットワーク I/O などの CloudWatch メトリックスデータに応じて、スケールインとスケールアウトを行います。スケールアウトしても、Auto Scaling グループで集計するインスタンスメトリックスに、Amazon EC2 Auto Scaling が新しいインスタンスを追加するわけではありません。インスタンスが InService 状態に到達し、ウォームアップが完了するまで待機します。詳細については、デフォルトインスタンスのウォームアップのトピックの「パフォーマンスのスケーリングに関する考慮事項」を参照してください。

  • スケールインでは、終了するインスタンスの削除が集約インスタンスメトリックスに直ちに反映されない場合があります。Amazon EC2 Auto Scaling の終了ワークフローが開始すると、終了するインスタンスは、グループの集計インスタンスメトリクスへのカウントを停止します。

  • ほとんどの場合、ライフサイクルフックが呼び出されると、簡易スケーリングポリシーに起因するスケーリングアクティビティは、ライフサイクルアクションが完了し、クールダウン期間が終了するまで一時停止されます。クールダウン期間に長い間隔を設定すると、スケーリングが再開されるまでに時間がかかることになります。詳細については、クールダウントピックの「追加の遅延を発生させる可能性のあるライフサイクルフック」を参照してください。一般的に、ステップスケーリングポリシーまたはターゲット追跡スケーリングポリシーを使用できる場合には、簡易スケーリングポリシーを使わないことをおすすめします。

紹介ビデオについては、[AWSre: Invent 2018: Amazon EC2 Auto Scaling でキャパシティ管理を容易にする] の [YouTube] をご覧ください。

AWS CloudFormation のスタックテンプレートでライフサイクルフックを宣言する方法を理解するために使用できる、JSON および YAML のテンプレートスニペットをいくつかご用意しています。詳細については、AWS CloudFormation ユーザーガイドの AWS::AutoScaling::LifecycleHook のリファレンスを参照してください。

ライフサイクルフックのサンプルテンプレートとユーザーデータスクリプトは、GitHub リポジトリでダウンロードできます。

ライフサイクルフックの使用例については、次のブログ記事を参照してください。