独自ドメインを設定する / 障害時はSORRYページへ通信を流す

# 内容
この記事はAWS初学者を導く体系的な動画学習サービス
「AWS CloudTech」の課題カリキュラムで作成しました。
https://aws-cloud-tech.com
前回の「スケーラビリティのあるブログサービスを構築する」のレッスンに引き続き、今回はRoute53とS3の機能を使い、独自ドメインを設定と障害時にSORRYページへ通信を流すという設定を行なっていきたいと思います。
##### 前回の記事

https://qiita.com/zakinicof/items/70ddd59378867294bb98

現状は、クライアントのブラウザのURL欄にロードバランサーのドメイン名を入力すると、ロードバランサーまでアクセスでき、ブログが表示される状態です。
今回は、まずFreenomというサービスを利用して無料のドメインを取得します。
取得したドメインでアクセスできるようにRoute53に設定変更を加えていきます。
Route53は外部のサービスで取得したドメインも設定ができます。
その後、フェイルオーバールーティングの設定を行います。
S3にHTMLファイルをアップロードして、S3の静的ウェブサイトホスティング機能でSorryサイトを作成します。
プライマリの通信に問題が発生した場合は、セカンダリに通信を流す設定を行います。
![スクリーンショット 2021-06-23 12.21.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/790886/e05f07e1-f0f3-e673-fb9e-d8535c70883e.png)


# 実施手順
##### 前回の記事の構成がされていることを前提で進めていきます。

## 準備

1. EC2インスタンスが2台立ち上がっていることを確認
1. RDSを削除した場合は、スナップショットから復元しておく。
1. 復元したデータベースのステータスが`利用可能`になるまで待つ。
1. ロードバランサーのIPアドレスでブログが閲覧できることを確認しておく。

## ドメインの取得とRoute53の設定

##### 今回は無料でドメインを取得できる`Freenom`というサービスを利用します。
Freenom https://www.freenom.com/ja/index.html

1. Freenomにアクセスし、`新しい無料ドメインを探します`と表示されている検索窓から希望するドメイン名を検索する。
1. 検索結果が表示されるので、一覧の中から`今すぐ入手!`を選択
1. `今すぐ入手!`が`選択`となったら`チェックアウト`を選択
1. `Period`で使用する期間を選択（12ヶ月までは無料）
1. `Continue`を選択
1. ログインしていない場合はGoogleのアカウントなどと紐づけておく。
1. ログイン後、右上のタブから名前を選択、`view cart`を選択すると、カートの中身が表示されるので、利用規約確認のチェックボックスにチェックをいれ、`Complete Order`を選択
1. 画面が切り替わるので、上部の`Services`タブから`My Domains`を選択
1. 入手したドメインの`Manage Domain`を選択
1. `Management Tools`タブから`Nameservers`を選択
1. `Use custom nameservers (enter below)`のラジオボタンをチェック
1. ネームサーバーの記入箇所が出てくるので開いたままにしておく。

##### 現状だと、Freenomの方でDNSレコードの設定などの作業が必要になるので、ドメインの管理サーバーをRoute53のネームサーバーに書き換えます。
1. Route53の画面を開き、`ホストゾーンの作成`を選択
1. ドメイン名：先ほど入手したドメイン名を入力
1. `ホストゾーンの作成`を選択
1. レコードの`値/トラフィックのルーティング先`の4つの値を1つずつ先ほどのFreenomのネームサーバーの記入箇所にコピーする。
1. `Change Nameservers`を選択

##### 上記の作業は、「取得したドメインは、Route53で管理します。」とFreenomに教えてあげているイメージになります。

## 取得したドメインとロードバランサーを紐づける

1. Route53のホストゾーンから作成したドメイン名を選択し、`レコードを作成`を選択
1. ルーティングポリシーは`シンプルルーティング`を選択して次へ進む。
1. `シンプルなレコードを定義`を選択
1. レコード名：`blog`と入力
1. 値/トラフィックのルーティング先：`Application Load BalancerとClassic Load Balancerへのエイリアス`を選択
1. リージョンは東京を選択
1. `シンプルなレコードを定義`を選択
1. `レコードを作成`を選択
1. 取得したドメイン名をブラウザのURL欄に貼り付けて、ブログにアクセスできることを確認する。

## S3バケットの作成

##### S3の静的ウェブサイトホスティング機能でSorryサイトを作成します。
##### S3バケットの名前をドメインの名前と同じにする必要があるので注意しましょう。

1. S3の画面に移動し、`バケットを作成`を選択
1. バケット名には`ドメイン名`を入力
1. `パブリックアクセスをすべてブロック`のチェックを外す。
1. `現在の設定により、このバケットとバケット内のオブジェクトが公開される可能性があることを承認します。`にチェックをつける。
1. `バケットを作成`を選択

## Sorryページの設定

1. 作成したバケットを選択
1. `アップロード`を選択
1. `ファイルを追加`と`フォルダを追加`を選択して表示させたいファイルやフォルダを選択
1. `アップロード`を選択
1. `閉じる`を選択
1. `プロパティ`タブを選択
1. 下にスクロールすると`静的ウェブサイトホスティング`の項目があるので`編集`を選択
1. `静的ウェブサイトホスティング`：`有効にする`にチェックをつける。
1. `インデックスドキュメント`を入力（HTMLファイルの名前）
1. `エラードキュメント`を入力（error.htmlでOK）
1. `変更の保存`を選択
1. `アクセス許可`タブを選択
1. バケットポリシーの項目の`編集`を選択
1. AWS公式サイトのバケットポリシーのサンプルコードをコピーしてペースト（https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/WebsiteAccessPermissionsReqd.html）
1. サンプルコードで`Bucket-Name`となっている箇所をバケット名に変更する。
1. `変更の保存`を選択
1. `プロパティ`タブの`静的ウェブサイトホスティング`から`バケットウェブサイトエンドポイント`を選択し、Sorryページが表示されることを確認する。

## フェイルオーバールーティングの設定

##### プライマリの通信に異常があった場合にセカンダリとしてSorryページが表示されるように設定します。

1. Route53を開き、レコード名がドメイン名のものを選択し、`レコードを編集`を選択
1. `ルーティングポリシー`：`フェイルオーバー`に変更
1. `フェイルオーバーレコードタイプ`：`プライマリ`を選択
1. `レコードID`を入力（例. LB-P)
1. `保存`を選択

##### 続いてセカンダリ用のRoute53のDNSレコードを作成します。

1. `レコードを作成`を選択
1. `フェイルオーバー`を選択して次へ
1. `レコード名`はプライマリと合わせる。
1. `TTL (秒)`はテストなので`60`としておく。
1. `フェイルオーバーレコードを定義`を選択
1. 値/トラフィックのルーティング先：`S3 ウェブサイトエンドポイントへのエイリアス`を選択
1. リージョンは東京を選択
1. S3バケットの項目は先ほど作成したバケットを選択
1. フェイルオーバーレコードタイプ：`セカンダリ`を選択
1. `レコードID`を入力（例. LB-S)
1. `フェイルオーバーレコードを定義`を選択
1. `レコードを作成`を選択

## 設定した機能を確認

1. 一度取得したドメイン名でアクセスして問題なく閲覧できることを確認
1. サービスに障害が発生したと仮定して、EC2インスタンスを2台とも停止させる。
1. インスタンス停止後に再度アクセスしてSorryページが表示されることを確認する。
1. EC2インスタンスを2台とも起動させる。
1. インスタンス起動後に再度アクセスして通常のページが閲覧できることを確認できればOK