この記事は
- AWSでいい感じにSorry Pageを表示するためのメモです
やりたかったこと
- AWS上のWebサービスのメンテ中にアクセスがあった時にSorry Pageを出したかったです
- ただし、下記の細かな要件を満たせるものとします
細かな要件
- メンテしている拠点からのアクセスの場合は通す
- メンテ終わってサイトオープンする前に正常動作確認をしたいため
-
/api/*
というパスにアクセスがあった場合はjson形式でメンテ中の通知をしたい- スマホアプリからアクセスするエンドポイントのため
- API以外へのパスにアクセスがあった場合はhtml形式でメンテ中の通知をしたい
Web | スマホアプリ | |
---|---|---|
その他拠点 | HTMLのSorryPage | JSONのSorryレスポンス |
メンテ拠点 | 平常通り | 平常通り |
基本的な方法
- 基本的にはALBのルールを設定して制御します
-
ロードバランサ>(選択)>リスナー>ルールの表示/編集
から設定できます
詳細
- こんな感じで設定を実施します
平常時の設定
- 平常時は1番上に必ずマッチする条件でWebAPのターゲットグループに繋ぎます
- なので基本的には2番目以下のメンテ系の条件に行くことはありません
条件種別 | 条件値 | アクション | アクション値 | 備考 |
---|---|---|---|---|
パス | * | 転送 | WebApのターゲットグループ | ・サイトオープン中に利用 |
ソースIP | メンテ拠点のIP | 転送 | WebApのターゲットグループ | ・サイトクローズ中にメンテ拠点から利用 |
パス | /api/* | 固定レスポンス | コード: 503 Content-Type: text/json レスポンス本文: スマホ向けのJSON |
・スマホ向けのSorryレスポンス |
パス | * | 固定レスポンス | コード: 503 Content-Type: text/html レスポンス本文: Web向けhtml |
・Webブラウザ向けのSorryPage |
メンテ時の設定
- メンテ時は平常時に1番上にあった平常運転の条件を1番下に移動しています
- 1番目でソースIPがメンテ拠点の場合の条件を定義して、平常運転と同じようにWebAPに繋いでいます
- 2番目でスマホからアクセスするパスの条件を定義し、JSONでSorryレスポンスを返却しています
- 3番目でそれ以外のアクセスの条件を定義し、WebでのSorryPageを返却しています
条件種別 | 条件値 | アクション | アクション値 | 備考 |
---|---|---|---|---|
ソースIP | メンテ拠点のIP | 転送 | WebApのターゲットグループ | ・サイトクローズ中にメンテ拠点から利用 |
パス | /api/* | 固定レスポンス | コード: 503 Content-Type: text/json レスポンス本文: スマホ向けのJSON |
・スマホ向けのSorryレスポンス |
パス | * | 固定レスポンス | コード: 503 Content-Type: text/html レスポンス本文: Web向けhtml |
・Webブラウザ向けのSorryPage |
パス | * | 転送 | WebApのターゲットグループ | ・サイトオープン中に利用 |
運用
- こう定義しておくことで、平常運転の条件を1番上に持ってくるか、1番下に持ってくるかでメンテ中に切り替えることができます
その他
- 条件の設定にはデフォルトの条件が入っていますが、この運用の場合その条件を使うことはありません
終わりに
- これで色々都合のいいメンテ状態に簡単に切り替えられますね