AWS ApplicationLoadBalancerリスナールールで特定 IP 以外をメンテナンスページ表示
概要
AWS で運用している Web サービスでメンテナンスが必要となり、ALB でメンテ切り替えをした際の対応をまとめました。
手順
ALB Listener 一覧からルール変更をします。
※ 今回 2 ポートのみ解放しており、80 は 443 に転送してるので、443 のみ対応しました。

その後、
- 送信元 IP = 社内 IP (ex.
11.22.33.44/32
) → default の TargetGroup へ転送 で「保存」 - 社内 IP 以外の送信元 IP 全て (
0.0.0.0/0
) →503
text/html
メンテ文言をレスポンス で 「保存」

以上で 社内 IP は、通常通りアクセス可、それ以外はメンテナンスページを表示させることができました。
まとめてルールを追加して保存が出来ず、1 つずつルール追加で保存になります。
レスポンスできる Content-Type って何があるの?
Content-Type に application/json
等も返せるので、 API サーバのメンテ時にはこちらを利用して文言を渡しました。

ちょっとした注意
最大文字数が 1024 文字でした ♪

CSS を レスポンス本文
に追加すると文字数 1024 を超えてしまいそうなので、S3 にアップロードし公開し、そちらを参照するようにしたりしました。
AWS ApplicationLoadBalancerリスナールールで特定 IP 以外をメンテナンスページ表示
https://kenzo0107.github.io/2019/09/29/2019-09-30-aws-applicationloadbalancer-ip/