~~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
・レスポンス本文:以下のように記載
メンテナンスページ
【〇〇システム】
### 作成したルールの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}}