継続は力なり

タイトル通り定期的な更新を心掛けるブログです。

ALB で Sorry ページを実装する方法と運用上の考慮点

タダです。

Web サイトを運用するケースでメンテナンスやサーバーの障害が発生した時に Sorry ページを返したいという要件って一般的にあると思います。

今回、構成上 ALB と EC2 がいる状況でEC2 で障害が発生した場合に Sorry ページを返すことを検証する機会がありましたので記事にまとめていきます。

ALB の固定ページとして Sorry ページを表示させる

ALB のアップデートでロードバランサーからHTTP エラーレスポンスコードとカスタムエラーメッセージを返すことができるようになりました。

aws.amazon.com

具体的には、リスナーのルールで制御を行います。ルールにHTTP エラーレスポンスコードとカスタムエラーページを設定します。

今回は、HTTPエラーレスポンスコードとして「503」を返し、カスタムエラーページとして「Sorry Page Test」と返す設定を行いました。

f:id:sadayoshi_tada:20190228073446p:plain

設定後に、ブラウザからアクセスしてみます。想定通りのページが表示されました。

f:id:sadayoshi_tada:20190228073622p:plain

運用上の考慮点

ALB のルールでは、優先度に応じて挙動が変わります。

そのため、運用する際は Sorry ページを返すルールと、通常のコンテンツを返すルールの優先順位をコントロールする必要があります。

例えば、EC2 に障害が発生し、ターゲットグループのヘルスチェックが通らない状況になった場合にSorry ページを返したい、といったケースを考えます。

ルールとしては以下の画像のようにセットします。

f:id:sadayoshi_tada:20190228075546p:plain

障害が発生した時は、Sorry ページを表示するルールを、通常のコンテンツを返すルールより優先順位を上にします。

f:id:sadayoshi_tada:20190228074520p:plain

実現方法

GUI で行う場合の手順としては、次のように行います。

まず、上部のボタンの中で「Recorder Rules」を押します。

f:id:sadayoshi_tada:20190228080455p:plain

次に、優先度を変更したいルールの横にチェックボックスがあるためチェックを入れて、優先度を下げるボタンを押します。

f:id:sadayoshi_tada:20190228080529p:plain

最後に、「Save」ボタンを押して終了です。操作としては簡単ですね。

f:id:sadayoshi_tada:20190228081915p:plain

また、AWS CLIでは、set-rule-priorities というコマンドで優先度を変更可能です。

docs.aws.amazon.com

EC2 に障害が発生後、Sorry ページを表示するルールを優先するように変更する際のコマンド例としては以下のコマンド打ちます。

aws elbv2 set-rule-priorities --rule-priorities RuleArn=arn:aws:elasticloadbalancing:ap-northeast-1:xxxxxxx:listener-rule/app/alb-dev/f9d65ec6f12ec5fc/33d54c2104b7c8d6/1b6bbb9c8560b2d9,Priority=1

ちなみに、上記の引数であるRuleArnGUI からですと以下のように調べることが可能です。

f:id:sadayoshi_tada:20190228100010p:plain

今回紹介したのは、HTTP のルールだけでしたが、HTTPS のルールもあればそのルールも変更する必要があります。

まとめ

Sorry ページをALB 単体で表示できるアップデートは便利だと思います。

運用にあたっては優先度を変更するオペレーションがあると思うので、手動で変更するフローかAPI 経由で自動化するフローかを検討すると思いますが本番化する前のテストして想定の挙動かは確認するのが良いでしょう。

参考

docs.aws.amazon.com