~~NOCACHE~~ ## ソーリーページの切替え ApplicationLoadBalancer(以下ALB)の[リスナー]-[ルール]で、固定ページを表示できる。 これを用いてメンテナンスや障害中にソーリーページをALBの機能だけで実現可能となっている。 このページでは、固定ページの設定方法とLambdaを用いた切替え方法を記載する。 いつものイメージ図 ■構成図 {{:Aws:ApplicationLoadBalancer:pasted:20210415-120256.png?300x0 nolink}} ■仕組み図 {{:Aws:ApplicationLoadBalancer:pasted:20210415-120233.png?nolink}} ## 前提 ■通常ページ ターゲットグループ(転送先)に紐づいたEC2インスタンスで、Webサーバを立てている ■ソーリーページ ALBの[リスナー]-[ルール]で、固定ページを設定する。 ## ALBでルールを設定する。 ### ロードバランサの[リスナー]タブから[ルールの表示/編集]をクリックする。 {{:Aws:ApplicationLoadBalancer:pasted:20210408-160226.png?direct 400x0}} ### 以下2つのルールを作成する。 Lambda関数では、ルールの優先度を変更することでページを切替えている。 デフォルトページは優先度が最下となっているため、2つのルールを作成することとなる。 {{:Aws:ApplicationLoadBalancer:pasted:20210408-160754.png?direct 400x0}} 以下に通常/ソーリーページの参考設定を記載する。 #### ①通常ページのルール ■IF ・パス:* ■THEN ・転送先:ターゲットグループ #### ②ソーリーページのルール ■IF ・パス:* ■THEN ・固定ページを返す ・レスポンスコード:503 ・Content-Type:text/html ・レスポンス本文:以下のように記載 メンテナンスページ

【〇〇システム】

ただいまメンテナンス中です。

メンテナンス時間:毎日 20:00~08:00


メンテナンス終了までしばらくお待ちください。

### 作成したルールのARNを控えます。 後工程のLambda関数で設定するので、ルールのARNをメモします。 {{:Aws:ApplicationLoadBalancer:pasted:20210408-162651.png?direct 400x0}} ## Lambda関数の作成 以下2つのLambda関数を作成します。 ・ソーリーページから通常ページに切替え:通常ページの優先度を1へ、ソーリーページの優先度を2へ ・通常ページからソーリーページに切替え:ソーリーページの優先度を1へ、通常ページの優先度を2へ Codeは下記の記事まんまです。 https://dev.classmethod.jp/articles/alb-fixed-response/ ### ソーリーページから通常ページに切替え 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 }, ] ) ### 通常ページからソーリーページに切替え 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で書けるものなら色や文字サイズ等も可能でした。 {{:Aws:ApplicationLoadBalancer:pasted:20210408-165431.png?nolink 600x0}} {{tag>AWS ALB Lambda}}