−目次
ソーリーページの切替え
ApplicationLoadBalancer(以下ALB)の[リスナー]-[ルール]で、固定ページを表示できる。
これを用いてメンテナンスや障害中にソーリーページをALBの機能だけで実現可能となっている。
このページでは、固定ページの設定方法とLambdaを用いた切替え方法を記載する。
いつものイメージ図
■構成図
■仕組み図
前提
■通常ページ
ターゲットグループ(転送先)に紐づいたEC2インスタンスで、Webサーバを立てている
■ソーリーページ
ALBの[リスナー]-[ルール]で、固定ページを設定する。
ALBでルールを設定する。
ロードバランサの[リスナー]タブから[ルールの表示/編集]をクリックする。
以下2つのルールを作成する。
Lambda関数では、ルールの優先度を変更することでページを切替えている。
デフォルトページは優先度が最下となっているため、2つのルールを作成することとなる。
以下に通常/ソーリーページの参考設定を記載する。
①通常ページのルール
■IF
・パス:*
■THEN
・転送先:ターゲットグループ
②ソーリーページのルール
■IF
・パス:*
■THEN
・固定ページを返す
・レスポンスコード:503
・Content-Type:text/html
・レスポンス本文:以下のように記載
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<html> < head > <title>メンテナンスページ< /title > < /head > <h1 style= "text-align:center" >【〇〇システム】< /h1 > <div style= "text-align:center; font-size:24;" > <p>ただいまメンテナンス中です。< /p > < /div > <div style= "text-align:center; font-size:24; color:red;" > <p>メンテナンス時間:毎日 20:00~08:00< /p > < /div > < /br > <div style= "text-align:center; font-size:24;" > <p>メンテナンス終了までしばらくお待ちください。< /p > < /div > < /html > |
作成したルールのARNを控えます。
Lambda関数の作成
以下2つのLambda関数を作成します。
・ソーリーページから通常ページに切替え:通常ページの優先度を1へ、ソーリーページの優先度を2へ
・通常ページからソーリーページに切替え:ソーリーページの優先度を1へ、通常ページの優先度を2へ
Codeは下記の記事まんまです。
https://dev.classmethod.jp/articles/alb-fixed-response/
ソーリーページから通常ページに切替え
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
import json import boto3 def lambda_handler(event, context): client = boto3.client( 'elbv2' ) #ソーリーページから通常ページに切替え responce = client.set_rule_priorities( RulePriorities=[ { 'RuleArn' : 'ターゲットグループを指定したリスナールールのARN' , 'Priority' : 2 }, { 'RuleArn' : '固定ページを指定したリスナールールのARN' , 'Priority' : 1 }, ] ) |
通常ページからソーリーページに切替え
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
import json import boto3 def lambda_handler(event, context): client = boto3.client( 'elbv2' ) #通常ページからソーリーページに切替え responce = client.set_rule_priorities( RulePriorities=[ { 'RuleArn' : '固定ページを指定したリスナールールのARN' , 'Priority' : 2 }, { 'RuleArn' : 'ターゲットグループを指定したリスナールールのARN' , 'Priority' : 1 }, ] ) |
実行結果
ALB固定レスポンスで、ソーリーページを表示した状態です。
htmlで書けるものなら色や文字サイズ等も可能でした。