今回のゴール
今回はロードバランサーのターゲットが全てUnhealthyと判定された時にS3に配置したsorry.htmlを表示するようにします。
S3単体ではhttpsを処理できませんので、CloudFront経由でS3にアクセスするようにします。
冗長化されたWEBサイトの構築はこちらを参照ください
下準備
SSL証明書の作成
SSL証明書を作成します。
詳細は下記のリンクを参照ください。
※CloudFrontで選択できる証明書はバージニア北部(us-east-1)で登録されたものだけが設定可能ですので、 リージョンをバージニア北部(us-east-1)に変更して登録してください。
設定
S3の作成
Sorryページを配置するS3バケットを作成します。
httpで直接アクセスするときはバケット名はドメイン名にする必要がありますが、今回はCloudFront経由でのみアクセスするのでバケット名は何でもいいです。
静的WEBサイトホスティングの設定やパブリックアクセスを許可する必要はありません。
次にsorry.htmlを作成したバケットにアップロードします。
作成されたバケットを選択して「アップロード」をクリックします。
「ファイルを追加」ボタンをクリックしてsorry.htmlファイルを選択してアップロードします。
CloudFrontの作成
CloudFrontサービスより、[Distributions]を選択して、「Create Distribution」をクリックします。
「Get Started」をクリック。
【Create Distribution】
[Origin Domain Name]:作成したS3バケットを選択
[Restrict Bucket Access]:Yes(CloudFront経由でのみ閲覧可能)
[Origin Access Identity]:Create a New Identity
[Comment]:任意
[Grant Read Permissions on Bucket]:Yes, Update Bucket Polic
【Default Cache Behavior Settings】
[Viewer Protocol Policy]:Redirect HTTP to HTTPS
【Distribution Settings】
[Alternate Domain Names(CNAMEs)]:ドメイン名
[SSL Certificate]:Custom SSL Certificateを選択して証明書を選択
CloudFrontの設定
ドメイン以下のディレクトリにアクセスしたときにもsorry.htmlが表示されるように設定します。
作成されたDistributionを選択して、[Distribution Settings]を選択します。
[Error Pages]タブを開き、「Create Custom Error Response」をクリックします。
[HTTP Error Code]:403:Forbidden
[Error Cating Minimum TTL]:600
[Customize Error Response]:Yes
[Response Page Path]:/sorry.html
[HTTP Response Code]:503:Service Unavailable
Route53の設定
正常サイトのヘルスチェックの作成
Route53サービスの[ヘルスチェック]から「ヘルスチェックの作成」をクリックします。
【ヘルスチェックの環境設定】
[名前]:任意
[エンドポイントの設定]:ドメイン名
[プロトコル]:https
[ドメイン名]:ロードバランサーのDNS名
[パス]:ヘルスチェックする対象のファイル
【ヘルスチェックが失敗した場合に通知を受け取る】
[アラームの作成]:はい
[通知先の設定]:今回は、既存のSNSトピックを選択して、トピックを指定しました。
暫くするとヘルスチェックのステータスが正常になったことが確認できました。
正常サイトのAレコードの編集
正常サイトのAレコードにフェイルオーバー機能を追加します。
Route53サービスの[ホストゾーン]よりドメインを選択して対象のAレコードを編集します。
[ルーティングポリシー]:ファイルオーバー
[ファイルオーバーレコードタイプ]:プライマリ
[ヘルスチェック]:先ほど作成したヘルスチェックを選択
[ターゲットヘルスを評価]:はい
[レコードID]:任意
SorryページのAレコード登録
障害時にアクセスするSorry.htmlがあるS3のAレコードを登録します。
Route53サービスの[ホストゾーン]で「レコードを作成」をクリックします。
[ルーティングポリシー]:フェイルオーバー
[レコード名]:www
[エイリアス]:有効
[トラフィックのルーティング先]:CloudFrontディストリビューションへのエイリアスを選択してディストリビューションを選択
[フェイルオーバーレコードタイプ]:セカンダリ
[レコードID]:任意
確認
ロードバランサーのターゲットグループ配下の全てのEC2インスタンスのhttpdサービスを停止します。
暫くすると、S3にあるsorry.httpsが表示されます。
次に、ロードバランサーのターゲットグループ配下の1台のEC2インスタンスのhttpdサービスを開始します。
暫くすると、EC2インスタンスのindex.htmlが表示されました。