こんにちは、SCSKの加古です。
現在担当している案件で、プライベートゾーン環境上のWebサーバが停止した際に、AWSでSorryページを表示する対応の要望があり、「ALBで実現する方式」と「S3 静的Webサーバ方式」で実現する2方式を検討しました。
今回は、構成要素が少ない「ALBで実現する方式」についての設定方法について、ご案内いたします。
プライベートゾーンでのSorryページの設定方法は、幾つか情報がありましたが、初めて設定される方には分かりにくく必要な情報が見当たりませんでしたので、その点を踏まえて今回作成します。
設定要件
- Webサーバは冗長化するため、2台構成
- 2台のWebサーバは、ALBのターゲットグループに登録
- サブネットは、ブライベートサブネットに配置
- SorryページのHTMLは、Sorryページ用のALBのルール上にHTMLコードを記載
- フェイルオーバの判断は、AWS Route 53の「DNSフェイルオーバー」の機能で実現
ALBロードバランサー設定方法 ①
以下、2つのロードバランサーを作成する。
- 業務システム用 : alb-<システム名>
- Sorryページ用 : alb-<システム名>-sorry
ロードバランサーは「Applicaton Load Balancer」を選択する。
今回、「プライベートゾーン」で使用するため、「Internal」を選択、その他の入力事項は迷うことはないと思います。
2台登録した画面は以下の感じです。
ALBロードバランサー – ターゲットグループの設定方法
業務システム用、Sorry page用のターゲットグループを作成します。
以下、2台登録した画面イメージです。
< 業務システム用のターゲットグループ >
Webサーバ 2台を対象に含めます。
< Sorry Page用のターゲットグループ >
ターゲットのWebサーバは登録は不要です。
ALBロードバランサー – ルールの設定方法 ➁
ロードバランサーに、それぞれの「ルール」を設定します。
<業務システム用のルール>
赤枠に、業務システム用で作成したターゲットグループを選択して下さい。
<Sorry Page用のルール>
ターゲットグループに、Webサーバ用のEC2インスタンスを設定しなかったため、「固定レスポンスを返す」を選択し、以下画面のような設定値を登録してください。
- レスポンスコード : 200 <正常コード>
- Content-Type : text/html
- レスポンス本文 : Sorry pageに表示したい本文をhtmlで記載します。以下のサンプルコードを記載します。
<html> <head> <meta content="text/html; charset=UTF-8" http-equiv="Content-Type" /> <title>システムメンテナンスのお知らせ</title> </head> <body> <div style="width: 640px; margin: 50px auto"> <div style="border: 1px solid #ccc; padding: 30px; margin-top: 30px"> <h2 style="color: #f00">システムメンテナンスのお知らせ</h2> <p> いつもご利用いただき、ありがとうございます。<br /> このたびサービス向上のため、システムメンテナンスを実施いたします。<br /> お客さまには大変ご迷惑をおかけいたしますが、何卒ご了承いただけますようよろしくお願い申し上げます。 </p> <p>ご不便をおかけいたしますがよろしくお願い申し上げます。</p> </div> </div> </body> </html>
CloudWatchの設定 <ALBの死活監視>
ALBに登録したWebサーバの死活監視を行い、異常時はRoute 53のヘルスチェックに通知させる必要があるため、設定します。
CloudWatchメトリック登録を以下、画面のように設定を行います。
メトリックは、HealthyHostCount を登録して下さい。
アラームを実行するデータポイントは、1/1に設定して下さい。
Route 53設定の設定<ヘルスチェック>
ALBの稼働状態を検知させる設定を行います。
当登録は、Route 53 ホストゾーン設定 - レコード設定で使用します。
登録後、しばらくするとステータスが「正常」になります。
正常にならない場合は、Cloudwatchメトリックの設定内容をご確認下さい。
以下、画面にある「ヘルスチェッカー」-「ステータス」に失敗した原因が出力されます。
Route 53設定の設定<ホストゾーン>
最後にホストゾーンを登録します。
プライベートゾーンのドメインのため、システム名など任意のドメイン名を登録可能です。
今回、プライベートゾーンの登録となります。
以下、登録した内容となります。
ドメイン名 : kako-alb-test1
業務システム用のAレコードとSorry Page用のAレコードを登録します。
<業務システム用のAレコード>
- レコード名 : プライベートサブネットで使用するドメイン名「URL」となります。
- レコードタイプ : A-IPv4
- トラフックのルーティング先 : ALB、プライマリーに設定するALBのターゲットグループは、業務システム用を選択して下さい。
- ヘルスチェック : 先程設定した「ヘルスチェック」を選択してください。
Sorry page用のAレコード
- レコード名 : 業務システム用のAレコードと同じにして下さい。
- トラフックのルーティング先 : ALB、ALBのターゲットグループは、Sorry Page用を選択して下さい。
- ヘルスチェック : 使用しません
登録すると、以下の2つのレコードが追加されます。
Webブラウザーでの確認方法
URLは、Aレコードで設定した値となります。今回の設定では、「http://web1.kako-alb-test」となります。
ブラウザーのURL欄に、「http://登録したAレコード名」を入力します。
2台のWebサーバまたは、httpプロセスを停止することで、数十秒で「Sorry Page」に切り替わります。
また、httpプロセスまたは、1台のWebサーバを起動後、数十秒で業務システムのページに切り替わります。
以上で終わりです。
皆様の環境でも同様の結果が得られましたでしょうか? 少しでも皆様のお役に立てたら幸いです。
最後までお読みいただきありがとうございました。