結論
ライフサイクルフックを設定する。
概要
オートスケーリングによってALBにWebアプリサーバのEC2インスタンスが追加された時、一時的に一部のリクエストが502 Bad Gatewayなどを返す現象が発生する場合があります。
おそらく新しいインスタンスのソフトウェアの起動などの準備ができる前にALBにアタッチされてしまうのが原因だろうな。ということで、インスタンスが起動してからALBにアタッチするまでに待ち時間を入れる方法がないか調べてみました。
Auto Scalingグループの待機時間設定
それっぽい設定として、Auto Scalingグループの「デフォルトのクールダウン」と「ヘルスチェックの猶予期間」というのがありますが、これらは目的のものとは違いました。まずはこの2つの設定の意味について。
デフォルトのクールダウン
インスタンスを起動、追加している最中に、さらにインスタンスが追加されてしまうことがないようにするための待ち時間。デフォルトは5分。
ヘルスチェックの猶予期間
インスタンスを起動、追加している最中に、Unhealthyと判定されて起動したばかりのインスタンスが削除されしまうことがなようにすための待ち時間。デフォルトは5分。
ということで期待したものと違いましたね。正解としては「ライフサイクルフック」を追加することで、インスタンス起動後に一定時間待機させることができました。
ライフサイクルフックでALBへのアタッチを待機
コンソールのAuto Scalingグループの「ライフサイクルフック」タブを開き、「ライフサイクルフックの作成」をクリックします。次のような設定で作成します。
- ライフサイクルフックタイプ
- インスタンスの作成
- ハートビートのタイムアウト
- 120(待機時間秒数)
- デフォルトの結果
- CONTINUE
この設定を入れると、スケールアウトで新しいEC2インスタンスが起動した後、2分間待機してからALBにアタッチされるようになります。