不要ならなくしちゃえ、ASのヘルスチェックの猶予期間
概要
- ELB、EC2 Auto Scalingは何度か使用したことがあっても、ELBとAuto Scaling グループの設定は類似したものがあり、理解が難しいものです。
- 今回は、EC2 Auto Scaling を利用していて、スケールアウト時に時間が掛かっていたため、Auto Scalingグループの設定である「ヘルスチェックの猶予期間」をデフォルト値から変更した件です。
「ヘルスチェックの猶予期間」を変更する
パラメータを理解する
- 今回対象とするシステムは、EC2がCPU負荷に応じてスケールアウトするAuto Scalingを採用しています。EC2 は、起動テンプレートのUserData によって、アプリケーションの初期化を実施しますが、この初期化には数分を要します。
- ドキュメントには、下記の記載があります。先ず最初のステップは、EC2 の起動によって、EC2としてのステータスチェックが行われます。
インスタンスが完全に設定され、最初のヘルスチェックに合格すると、Amazon EC2 Auto Scaling によって正常であると見なされ、InService 状態へ移行します。
- 次のステップは、Auto Scalingのライフサイクルフックアクションです。今回は、起動テンプレートに設定したUserData によって、アプリケーションの初期化が行われます。
- 最後のステップは、Auto Scalingのヘルスチェックです。「ヘルスチェックの猶予期間」はアプリケーションのためのウォームアップ期間であり、ライフサイクルフックアクションが完了後に開始されるとのことです。つまり、アプリケーションの準備に掛かる待ち時間をライフサイクルフックアクション、Auto Scalingグループの「ヘルスチェックの猶予期間」の両方で設定しており、(今回担当したシステムに関しては)過剰であったと判断しました。
多くの場合、サービス状態になったばかりの Auto Scaling インスタンスは、ヘルスチェックに合格する前にウォームアップが必要です。Amazon EC2 Auto Scaling は、インスタンスのヘルスステータスをチェックする前に、ヘルスチェックの猶予期間が終了するまで待機します。Amazon EC2 ステータスチェックと Elastic Load Balancing ヘルスチェックは、ヘルスチェックの猶予期間が終了する前に完了することができます。ただし、Amazon EC2 Auto Scaling はヘルスチェックの猶予期間が終了するまで、それらに対応しません。インスタンスに十分なウォームアップ期間を設けるためには、アプリケーションで想定される開始期間に対応するようにヘルスチェックの猶予期間を設定します。ライフサイクルフックを追加した場合、ヘルスチェックの猶予期間が始まるのは、ライフサイクルフックアクションが完了してインスタンスが InService 状態になってからになります。
- 出典元は、下記ドキュメントとなります。
「ヘルスチェックの猶予期間」を”0″秒に変更してみる
- Auto Scalingグループの「ヘルスチェックの猶予期間」は、デフォルトで300秒(5分)です。
- 「ヘルスチェックの猶予期間」を”0秒”とします。(もちろん、システムの構成やポリシーによって異なりますので、ご注意ください)
- 最後に各Auto Scalingグループの「ヘルスチェックの猶予期間」が正しいかをチェックします。
参考資料
- 人間はせっかく覚えても忘れる生き物。この機会に、ELB、Auto Scalingグループのヘルスチェックを正しく理解したいものです。以前、まとめた記事を参考にしてください。