Route53を使って、色々なルーティングを試してみた。

#はじめに
Route53はAWSのDNS(Domain Name System)サービスです。
DNSとはドメイン（例：google.co.jp）とIPアドレス（例：172.217.161.35）を紐づけてくれるシステムのことです。

Route53には様々なルーティングポリシーがあります（以下表参照）。

|ルーティングポリシーの種類|簡単な説明|
|:--|:--|
|シンプルルーティング|単一のリソースに対してルーティングを行う|
|加重ルーティング|複数のリソースに対して、指定した比率でルーティングを行う|
|位置情報ルーティング|ユーザーの位置に基づいて、リージョンを選択してルーティングを行う|
|レイテンシールーティング|一番応答時間が短いリージョンのルーティングを行う。|
|複数値回答ルーティング|複数のリソースに対して、ランダムにルーティングを行う（最大8つのレコードを使用することができる）|
|フェイルオーバールーティング|プライマリとセカンダリにルーティングを分けて、プライマリのヘルスチェックに失敗すると、セカンダリにルーティングを行う。|

本記事では、上記の中でも、『シンプルルーティング』『加重ルーティング』『フェイルオーバールーティング』を設定していきます。


#前提
- **本記事で扱うこと**
本記事では、Route53の設定とS3の設定（フェイルオーバールーティングの時）のみ扱い、簡単な手順を記載していきます。
VPC, EC2等の設定やドメインの取得については記載をしません。

- **使用するドメインについて**
今回は、『test-aws123.tk』というドメインをfreenomというサービスで無料で作成していきます。
【URL】https://www.freenom.com

- **EC2インスタンスについて**
今回、EC2インスタンスにはapacheをインストールしており、簡単なページを表示できるようにしています。



#ホストゾーンの作成

まずはRoute53に使用するドメインを登録していきます。
Route53のページにいき、『ホストゾーンを作成』をクリックします。
freenomで取得したドメインを入力します。
タイプはパブリックゾーンを指定し、『ホストゾーンを作成』をクリックします。
![スクリーンショット 2021-02-09 17.27.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/799854/2758644a-c208-9f29-c05e-bf87169e99ac.png)

これで、Route53のホストゾーンを作成することができました。
それでは、『シンプルルーティング』、『多重ルーティング』、『フェイルオーバールーティング』について、それぞれ設定をしていきます。

#シンプルルーティング

###目指す構成
以下の構成を目指していきます。

![スクリーンショット 2021-02-09 18.18.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/799854/c2d403a6-5de8-e683-9090-dbecf7c1ab83.png)

Route53に対して、紐づけは一つ（ALB）のみです。

###手順

- レコードを作成していきます。
![スクリーンショット 2021-02-09 17.30.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/799854/5ce040c6-5dc4-3673-4fc6-ff5b628dcda1.png)

- レコードタイプは『A』で、Test-LBというロードバランサーに紐づけていきます。
![スクリーンショット 2021-02-09 17.45.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/799854/bee3ad5c-03ef-ab65-ef57-9237b52eccfe.png)

これで、設定完了です。
試しにブラウザにhttp://test-aws123.tk を打つと、設定したページを表示させることができます。

#加重ルーティング
###目指す構成
以下の構成を目指していきます。
![スクリーンショット 2021-02-10 15.39.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/799854/e36a686c-5750-12f5-11ca-6b875f7e26cb.png)

2つのVPCがありますが、これらのどちらのページを表示するかは、各リソースの重量の比率で変わってきます。
今回は2つのリソースとも重量を100に設定していきます（重量は0〜255まで設定が可能です）。

###手順
- ルーティングポリシーを加重ルーティングに設定して、まずはALBの方をルーティングとして設定していきます。
レコードタイプは『A』で設定していきます。
また、今回は重量は『100』、レコードIDは『Test-record1』と設定しました。
![スクリーンショット 2021-02-10 16.40.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/799854/51d548cc-59d4-c0c3-11fb-b01ebbdf0b56.png)

- 次にEC2の方も同様に設定していきます。
レコードタイプは『A』で設定していきます。
また、今回は重量は『100』、レコードIDは『Test-record2』と設定しました。
![スクリーンショット 2021-02-10 16.41.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/799854/a5d7af16-82bf-fc65-721a-f01d533baadc.png)

ブラウザにhttp://test-aws123.tk を打ってみると、どちらかのページが表示されます。
今回は重量が同じ値であるため、ページの表示は半々です。

###補足
試しにブラウザをリロードしまくりましたが、なぜがページが変わらない現象がおきました。
原因はTTLが長すぎた（デフォルトの300秒に設定）ということがわかりました。
TTLを短くした結果、リロードでページを変更することができました。

※**「TTLって何だっけ」という未来の自分に対して**
TTLとはキャッシュサーバーにデータを保存しておく期間のようなものです（Time To Liveの略）。

名前解決をする際、クライアント（ブラウザ）はまずキャッシュサーバーに問い合わせます。
キャッシュサーバーはルートサーバー等各種サーバーに問い合わせて、リスポンスを返します。

この時、キャッシュサーバーが一々各種サーバーに問い合わせると時間がかかってしまうため、キャッシュサーバーに情報を一時的に残しておきます。
このキャッシュサーバーに残しておく時間をTTLと言います。

#フェイルオーバールーティング
最後にフェイルオーバールーティングを設定していきます。
###目指す構成
以下の構成を目指していきます。
![スクリーンショット 2021-02-10 15.52.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/799854/4484a36b-7e51-1d60-9775-4483a0e69062.png)

ALBをプライマリに設定し、この通信が失敗した時にセカンダリであるS3のページを表示していきます。

###手順
- S3のバケットを作成します。この時、バケット名はRoute53のドメイン名（今回は『test-aws123.tk』）に設定します。
![スクリーンショット 2021-02-10 17.03.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/799854/c04f1b9a-b85b-dcc3-9482-89386d2c9b2f.png)

その後、パブリックアクセスを許可します（『パブリックアクセスをすべてブロック』のチェックを外す）。
![スクリーンショット 2021-02-10 17.03.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/799854/e97e90d5-37c5-365f-cc6f-ba6de063a68c.png)

バケットを作成したら、次にファイルをアップロードしていきます。
バケットのページに移動し、画像をアップロードします（ドラッグ&ドロップでいけます）。
![スクリーンショット 2021-02-10 17.05.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/799854/273e8c1c-36bd-f166-37de-834e95d6c618.png)

アップロードをし終わったら、プロパティを設定します。
![スクリーンショット 2021-02-10 17.07.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/799854/d8cdcc65-623b-db84-6d61-a494d6004e1f.png)

静的webサイトホスティングを有効にします。
![スクリーンショット 2021-02-10 17.07.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/799854/10756874-96a3-257b-8b41-d13d219fefd2.png)

インデックスドキュメントに、アップロードしたファイル名を入力します。
エラードキュメントについては、仮で記載していきます（入力しないと前に進めないので、とりあえず入力します）。
![スクリーンショット 2021-02-10 17.08.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/799854/29ee751e-60ac-7929-c7af-1c7ed11fb745.png)

設定が終わったら、最後にアクセス許可をしていきます。
![スクリーンショット 2021-02-10 17.09.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/799854/cefe9672-4206-a800-756d-b5d85877e17c.png)

バケットポリシーの部分を以下のように編集していきます。
※以下のURLを参照
https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/user-guide/static-website-hosting.html

```
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "PublicReadGetObject",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::test-aws123.tk/*"
        }
    ]
}
```

S3の設定は以上になります。

- Route53で、フェイルオーバールーティングを設定していきます。
プライマリをALBに、セカンダリをS3に設定します。

**【プライマリの設定】**
![スクリーンショット 2021-02-10 17.13.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/799854/58a513db-8bd9-f749-7a57-88c16b244389.png)
**【セカンダリの設定】**
![スクリーンショット 2021-02-10 17.13.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/799854/a0036b63-36a7-cb94-351f-649bfb9db024.png)

試しに、EC2インスタンスを停止しhttp://test-aws123.tk とブラウザに入力したところ、問題なくS3のページを表示させることができました。

#終わりに
以上『シンプルルーティング』『加重ルーティング』『フェイルオーバールーティング』の設定をしていきました。
実際に自分で手を動かすと、色々な発見があって勉強になります。

この記事はAWS初学者を導く体系的な動画学習サービス「AWS CloudTech」の課題カリキュラムで作成しました。
AWSについて、基本からしっかり学びたい方にはオススメです！
https://aws-cloud-tech.com