Route53 独自ドメイン設定~障害時SORRYページへ (ハンズオン)

##目的
ドメインを取得してRoute53で管理し、フェイルオーバーを設定して障害に備える
##準備編
####AWS
EC2インスタンスを2台実行中の状態にする
RDSの起動も確認
ロードバランサーのIPアドレスでEC2サイトが問題なく閲覧できる状態

####ドメイン取得編
[　[Freenom](https://www.freenom.com/ja/index.html)　] というサービスを使用
利用したいドメイン名(ここではaws-demo)を検索
青いタグで無料と書かれたドメインを選択(ここではaws-demo.ga)
今すぐ入手を選択し、緑ボタンのチェックアウトを選択
ドメインを使用する期間を選択(※12ヶ月まで無料)
決済画面(0ドル)を経由してドメインを購入
ヘッダーのServices< My Domeinsを選択
今回作成したドメインの右部分にあるManage Domainのボタンを選択
ドメインの情報を確認できるのでヘッダーのManagement Tools< Nameserversを選択
custom nameserverを選択するとNameserverの入力欄が5つほど表示されます

以上で準備完了

##取得したドメインをRoute53で管理
Route53管理画面< ホストゾーン< ホストゾーンの作成

・ドメイン名にaws-demo.gaを入力
・説明は空白
・タイプはパブリックホストゾーン
・ホストゾーンの作成を選択

[レコードタイプ](https://qiita.com/tr76aquarius/items/2e550180944335985c37#%E3%83%AC%E3%82%B3%E3%83%BC%E3%83%89)がNSとSOAの2種類作成されます
・NS → ドメインを管理するサーバー名が書かれているもの
・SOA → ドメインの管理情報が書かれているもの

NS(4台全部)をFreenomに書き写していきます。
写し終えたらChange Nameserverを選択

##取得したドメインでアクセス
Route53< ホストゾーン< aws-demo.gaでレコードの作成を選択
ルーティングポリシーはシンプルルーティングを選択
シンプルなレコードを定義を選択するとレコードの中身を設定できる

レコード名(今回はblog)
値/トラフィックのルーティング先をALBとCLBへのエイリアス
<details><summary>**(補足)**</summary><div>
・ALBとドメインを割り当てる際は、ALBとCLBへのエイリアスを選択
・シンプルにIPアドレスとドメインを紐付ける際は、レコードタイプに応じたIPアドレスまたは別の値
・S3の静的ウェブサイトにはS3ウェブサイトエンドポイントへのエイリアスを選択
　(S3のバケット名はドメインと同じ名前で作成)
　※他にも種類があります

---
</div></details>
・リージョンは東京
・検索候補にLBのドメインが表示されるので選択
・シンプルなレコードを定義を選択し、レコードを作成

これでURLにblog.aws-demo.gaと直接入力しても正常にアクセスできるようになる

**※注意**
DNSのタイミングによってはblog.から始まるドメインでアクセスできない可能性がある

```console
# ローカル環境で実行（EC2ではない）
# ドメインのNSを問い合わせることができる
dig aws-demo.ga NS +short
```
→ 理由は、NSがまだ書き変わっていないからでしばらく時間を置いて、再度上のコマンドを入力して確認

##[フェイルオーバールーティング](https://qiita.com/tr76aquarius/items/2e550180944335985c37#%E3%83%95%E3%82%A7%E3%82%A4%E3%83%AB%E3%82%AA%E3%83%BC%E3%83%90%E3%83%BC%E3%83%AB%E3%83%BC%E3%83%86%E3%82%A3%E3%83%B3%E3%82%B0)の設定
S3< バケットを作成を選択

・バケット名(blog.aws-demo.ga)
>バケット名はドメイン名と合わせる必要があるため、ここではblog.aws-demo.gaという名前でなければいけない。→ Route53のレコード設定ができなくなる

・リージョンは東京
・ブロックパブリックアクセスのバケット設定で、パブリックアクセスを全てブロックにあるチェックを外し、オブジェクトがパブリックになることを承認するボックスにチェックを入れる

あとはデフォルトのままでバケットを作成を選択

blog.aws-demo.gaというバケットが作成されたので、選択しここからSORRYページ用のHTMLファイルと画像ファイルをアップロードさせる。

アップロードが完了後
S3< blog.aws-demo.ga< タブメニュー< プロパティ< 静的ウェブサイトホスティングを編集

静的ウェブサイトホスティングを有効にする
インデックスドキュメント(index.html)とエラードキュメント(error.html)を入力し変更の保存を選択

続いて、先ほどのタブメニュー< アクセス許可< バケットポリシー< 編集
[公式に載せてあるバケットポリシー](https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/WebsiteAccessPermissionsReqd.html#bucket-policy-static-site)をコピペして貼り付ける

<details><summary>**バケットポリシー**</summary><div>

```
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "PublicReadGetObject",
            "Effect": "Allow",
            "Principal": "*",
            "Action": [
                "s3:GetObject"
            ],
            "Resource": [
                "arn:aws:s3:::Bucket-Name/*"
            ]
        }
    ]
}
```
</div></details>

↑Bucket-Nameの部分をblog.aws-demo.gaに置き換え、変更を保存すると完了

##SORRYページをセカンダリとして表示する設定
Route53< ホストゾーン< aws-demo.ga

・作成してあるタイプAのルーティングポリシーを編集ボタンで、シンプルルーティングからフェイルオーバールーティングに変更
・フェイルオーバーレコードタイプをプライマリ
・レコードIDをLB-Pと入力して作成

次にセカンダリ用のレコードを作成していく

・レコードを作成を選択
・ルーティングポリシーをフェイルオーバーを選択
・レコード名はプライマリと同じ(blog)
・TTLとはDNSサービスを何秒間保持する設定(今回は60秒)
・フェイルオーバーレコードを定義
・値/トラフィックのルーティング先にS3ウェブサイトポイントへのエイリアスを指定
・リージョンを東京
・検索候補に先ほど設定したS3のバケット名が表示される
　　→ (ここで出てこない場合、ドメインとバケット名が不一致になっている可能性があるのでS3バケット名を見直す)
・フェイルオーバーレコードタイプをセカンダリに指定
レコードIDをLB-Sと入力しフェイルオーバーレコードを定義し、レコードを作成を選択し設定完了

##フェイルオーバールーティングのテスト
EC2サーバーを２台とも停止させる(サービスに障害が発生したことを想定) 

その後、停止完了してすぐは503エラーの画面が返ってきますが、TTLの設定を60秒と設定していたので、60秒後SORRYページに切り替わります。

##参考・注意点
この記事はAWS初学者を導く体系的な動画学習サービス
「AWS CloudTech」の課題カリキュラムで作成しました。
https://aws-cloud-tech.com

このハンズオンでは料金が約10〜11円/時間かかります。