ALB のデフォルトルールで固定レスポンスを設定しても Sorry ページが表示されない原因と対処法を教えてください
困っていること
ALB 配下のターゲットが Unhealthy になった場合に、固定レスポンスで Sorry ページを表示したいと考えています。
そこで、CloudWatch アラームをトリガーに Lambda 関数を実行し、ALB のデフォルトルールの優先度を上げて、固定レスポンスを先に評価させようとテストしました。
しかし、期待した Sorry ページは表示されず、502 Bad Gateway などのエラーが表示されました。原因と対処法を教えてください。
原因
ALB のデフォルトルールは常に最後に評価される仕様であり、優先度を変更できないためです。
- ALB のリスナールールは、優先度の数値が小さいものから順に評価されます。
- デフォルトルールは、通常のリスナールールとは異なり、すべての通常ルールに一致しなかったリクエストに対して最後に評価されます。
そのため、例えば以下のようなルール構成の場合、/* のルールが先に一致するため、デフォルトルールの fixed-response 503 は実行されません。
- Priority 1 : /api/* → ターゲットグループへ転送 (forward)
- Priority 2 : /* → ターゲットグループへ転送 (forward)
- Default : 固定レスポンス 503 (fixed-response 503)
アクションは、リスナールールの条件が満たされたときにロードバランサーがリクエストを処理する方法を決定します。各ルールには、一致するリクエストの処理方法を指定するアクションが少なくとも 1 つ必要です。ルールのアクションごとにタイプと設定情報があります。
ルールは優先順位の低~高順によって評価されます。デフォルトのルールが最後に評価されます。デフォルト以外のルールは、優先順位をいつでも変更できます。デフォルトのルールの優先度は変更できません。
対処法 (代替案)
デフォルトルールではなく、通常のリスナールールとして Sorry ページ用の固定レスポンス (fixed-response) ルールを作成し、そのルールが forward ルールより先に評価されるよう優先度を設定することをご検討ください。
実装手順については、以下の弊社ブログをご参照ください。





