はじめに
AutoScalingのヘルスチェック猶予期間のパラメータの算出方法を備忘として書いておきます。
そもそもAutoScalingのヘルスチェック猶予期間とは?
AutoScalingのヘルスチェックには以下2つのタイプがあります。
・EC2
・ELB
EC2の場合、EC2のステータスチェック(コンソール上2/2OKと出るもの)が評価され、正常な状態であれば、AutoScalingは対象のEC2を正常とみなします。
ELB側を選択すると、ELBのヘルスチェック(HTTPやTCP)結果を元に正常か判断されるため、EC2だけでなく、アプリケーションとしての正常性も評価可能であることから、通常ELBタイプを選択しておくことが望ましいです。
ただし、AutoScalingが発動し、ELBのヘルスチェックに合格する前にAutoScalingがヘルスチェックをしてしまうと、AutoScalingが正常とみなさず、インスタンスを削除してしまいます。これを猶予する期間がヘルスチェック猶予期間です。
適切な設定でない場合の問題
よくある事象が以下の例です。OSなどの起動が間に合わず、ヘルスチェック猶予期間中にALBのヘルスチェックがOKにならず、AutoScalingがインスタンスの削除と追加を繰り返してしまうパターンです。
適切な設定値
動きを見ていきましょう。※すべでデフォルト値前提です。
EC2が作成された時点で、ALBはヘルスチェックを開始します。
この時点ではOS、アプリが起動していない場合、30s間隔かつタイムアウト5秒で2連続失敗でNG判定されます。
以後30秒間隔で5連続成功でOK判定されます。
つまり、OS、アプリが起動する時間とヘルスチェックの連続成功するまでの時間をカウントに入れる必要があるということです。
実際の例を見てみましょう。
まずはOKの場合です。
デフォルトのヘルスチェック猶予期間300秒までの間に5連続成功する時間150秒より前にアプリの起動が成功していれば、大抵の場合ヘルスチェックに問題はありません。
しかし、300秒より後にヘルスチェックが成功するパターンになると、AutoScalingは削除と作成を繰り返す動作になります。
結論
ヘルスチェックの猶予期間は以下の時間を合計した値の最大を目安にするといいです。
・OSの起動時間
・APの起動時間
・ヘルスチェック待機時間(デフォルト30s)
・ヘルスチェック連続成功判定の時間(30s*5回+α)※APのレスポンスタイムを考慮にいれる
まとめ
APのリリースにより起動時間に差分が発生したりすることもあります。リリース後はAutoScalingが頻繁に発動していないかチェックを行い、猶予期間が問題ないかモニタリングしましょう。