Route53を使ってACM+CloudFront+S3で構築した SorryページへDNSフェイルオーバーを設定する。

今回はACM+CloudFront+S3で構築したSorryページにRoute53を使ってDNSフェイルオーバーを設定する手順を説明します。

##前提条件
- Windows10を使用。
- PCはDELLを使用。
- プライマリは東京リージョンで構成。
- セカンダリは大阪リージョンで構成。
- 証明書はバージニア北部で作成すること。
- アベイラビリティゾーンは1aと1cを使用。

##料金
今回は複数のAWSサービスを使用する為、様々な要素によって料金が発生します。
ハンズオンが終了しましたら即時に削除を推奨します。
料金が発生するタイミングについては以下の通りです。

- Route53でのドメイン購入時に料金が発生
- Route53でルーティング設定時に料金が発生
- ELBへのアクセス時に料金が発生
- ACMでの証明書発行によって料金が発生
- EC2インスタンスのアクセス及びステータスが実行中の場合は料金が発生
- VPC作成時に料金が発生
- CloudFrontへのアクセス時に料金が発生

##事前準備
- AWSアカウントを所持していること。
- ACM、Route53、EC2、VPCにアクセス権限（書き込み・読み取り）を付与していること。
- EC2インスタンスを1aと1cのアベイラビリティゾーンに作成していること。
- ELB（ALB）でターゲットグループを既存のEC2インスタンスに指定していること。
- VPCを作成していること。
- パブリックサブネットを1aと1cのアベイラビリティゾーンに作成していること。
- IGWをサブネットにアタッチしていること。
- Route53若しくは他のドメイン購入サイトで自分専用のドメインを取得していること。
- ドメイン取得後、パブリックホストホストゾーンを作成していること。

##完成後のシステム構成図

- プライマリ用のALBからCloudFrontとS3で構成されたSorryページへフェイルオーバーする。
- ALBはRoute53のドメインからインターネットゲートウェイを介してアクセス
- さらに1aと1cのアベイラビリティゾーンに配置したEC2インスタンスをターゲットグループに指定します。

![構成図.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1408197/66aed041-b7e4-ecbe-ed9e-7ab59d32b9fd.png)

##構築手順の目次
- [ACMで証明書を発行](#acmで証明書を発行)
- [Route53にてCNAMEレコードを作成](#route53にてcnameレコードを作成)
- [プライマリ用のALBを作成](#プライマリ用のalbを作成)
- [セカンダリ用のS3バケットを作成](#セカンダリ用のs3バケットを作成)
- [Sorryページを作成](#sorryページを作成)
- [SorryページのHTMLファイルをS3バケットにアップロード](#sorryページのhtmlファイルをs3バケットにアップロード)
- [CloudFrontを作成](#cloudfrontを作成)
- [Route53でルーティング先を設定](#route53でルーティング先を設定)
- [プライマリの設定](#プライマリの設定)
- [セカンダリの設定](#セカンダリの設定)
- [DNSフェイルオーバーの動作確認](#dnsフェイルオーバーの動作確認)

##ACMで証明書を発行
[構築手順の目次へ](#構築手順の目次)

１、検索バーに「ACM」と入力し、Certificate Managerをクリックする。
![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1408197/e4c03b5e-6fef-edb4-3b91-12efe94d2590.png)

２、リージョンがバージニア北部であることを確認し、証明書のリクエストをクリック。
![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1408197/364f255c-eb6e-b986-2cd6-fcfb351dc9a0.png)

３、パブリック証明書のリクエストを選択し、「証明書のリクエスト」をクリックする。
![3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1408197/434fa146-91d8-6b64-6f80-1b25f235bb11.png)

４、任意のドメイン名を入力し「次へ」をクリック。
![4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1408197/def66250-5323-0382-447d-83a80dd84cb9.png)

５、DNSの認証を選択し「次へ」をクリック。
![5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1408197/80728438-b5e1-b081-9d7e-0824b911efdd.png)

６、任意のタグを入力し、「確認」をクリック。
![6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1408197/62d2eeee-83fb-6657-bdfd-fc6bdf50bcb1.png)

７、入力内容を確認し「確定とリクエスト」をクリック。
![7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1408197/af78f351-0aa2-0cfe-835c-f525d28b427f.png)

８、検証状態が「検証保留中」であることを確認する。
![8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1408197/aa94360b-b226-a5b6-06f4-fab02c926535.png)

９、数分後再度確認し、検証状態が「成功」したことを確認する。
![9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1408197/4ff288de-29e2-923b-cb94-48d909ddd6bd.png)

##Route53にてCNAMEレコードを作成
[構築手順の目次へ](#構築手順の目次)

１、発行した証明書の▼をクリックし「Route53でのレコードの作成」をクリック。
⇒これにより、証明書の認証情報が入力されたCNAMEレコードが自動的に生成される。
![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1408197/cf8b172f-c9c2-5916-3cfa-0743dd9a7c32.png)

２、Route53のコンソールへ移動し、CNAMEレコードが作成されたことを確認する。
![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1408197/4fcb2977-e27a-8bb1-3105-859c233e6615.png)

##プライマリ用のALBを作成
[構築手順の目次へ](#構築手順の目次)

１、EC2内のロードバランサーのタブに移動し、「ロードバランサーの作成」をクリックする。
![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1408197/f9f1d376-ebcd-0886-c868-89902e3f5fb0.png)

２、ロードバランサーの種類はApplication Load Balancerを選ぶ。
![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1408197/eb32534d-5e0c-2e6c-4e3d-96c718884bb4.png)

３、任意のロードバランサー名を入力。スキームを「インターネット向け」を選択し、IPアドレスタイプを「ipc4」を選択する。
![3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1408197/861d81c1-9d68-7034-4ca8-e2f996c8a198.png)

４、リスナーの設定はプロトコルを「HTTPS(セキュアHHTP)」を選択する。
![4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1408197/58731fdd-007b-6069-bba7-14036b2c4167.png)

５、事前に作成したVPCとAZごと作成したパブリックサブネットをそれぞれ選択後、右下の「次の手順：セキュリティ設定の構成」をクリックする。
![5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1408197/bc19212a-e6c1-aa21-232f-55ed78ba2a31.png)

６、証明書タイプは「ACMから証明書を選択する(推奨)」を選択し、証明書の名前は先ほど発行した証明書を指定する。
![6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1408197/24505cac-e25b-4fe4-b384-1f9493d619fb.png)

７、セキュリティポリシーはデフォルトを選択し、右下の「次の手順：セキュリティグループの設定」をクリックする。
![7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1408197/0af83130-4fe6-11d7-4e2f-e7f37fa742a7.png)

８、「新しいセキュリティグループを作成する」を選択し、「HTTPS」「HTTP」「SSH」を追加する。
さらに、IPアドレスの許可設定はそれぞれ0.0.0.0/0を指定すること。
![8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1408197/e3dd4a89-90fa-ef78-5b07-5be8cc1b38e4.png)

９、事前に準備したターゲットグループを選択し、「次の手順：ターゲットの登録」をクリックする。
![9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1408197/0bba3545-82ee-7475-e79c-d50b3fc2c4c4.png)

１０、ターゲット先が目的のEC2インスタンスに指定されていることを確認し、「次の手順：確認」をクリックする。
![10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1408197/2bbdd2fa-b004-2b22-da13-20c5877e3097.png)

１１、設定内容を確認のうえ、問題が無ければ「作成」をクリックする。
![11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1408197/88532838-7fdd-b2d4-2f52-71056857b15c.png)

１２、ロードバランサーが正常に作成されたことを確認し、「閉じる」をクリックする。
![12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1408197/36324e4d-8475-ee12-bae1-a4ce81113e94.png)

##セカンダリ用のS3バケットを作成
[構築手順の目次へ](#構築手順の目次)

１、S3コンソールに移動し、バケットの作成をクリックする。
![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1408197/17efe25b-4f6a-40b0-dec1-83ee65e2aa41.png)

２、バケット名に事前に取得したドメイン名を入力し、大阪リージョンを選択する。
![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1408197/20af2e6d-78ce-ebd7-d8b4-f1e92dff5e25.png)

３、パブリックアクセスのチェックを外し、赤色の警告で表示されているチェックボックスにチェックを入れたらバージョニングを有効にする。
![3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1408197/ea0a91fb-642f-a407-71c6-a69fc1e56326.png)

４、サーバー側の暗号化を有効にし、暗号化キータイプを「Amazon S3キー（SSE-S3）」を選択後、「バケットを作成」をクリックする。
![4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1408197/1038bf29-15d5-95b1-4c82-b600637ebe5d.png)

５、S3バケットが正常に作成されたことを確認する。
![5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1408197/41ed6c0c-7224-fcaa-3706-588486c94e25.png)

６、作成したS3バケットをクリックする。
![6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1408197/93734a84-316a-804d-50c7-1619df5e394d.png)

７、アクセス許可のタブをクリックする。
![7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1408197/7a0ddd01-429b-3829-1d9f-929b768dbcc6.png)

８、アクセスコントロールリスト（ACL）を編集する。
![8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1408197/78f56a76-11be-81cf-a4e0-e90010544185.png)

９、全項目にチェックを入れ、赤色の警告で表示されているチェックボックスにチェックを入れたら「変更の保存」をクリックする。
![差し替え１.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1408197/7df911a9-9faf-4c01-e2e4-a948932d6865.png)


##Sorryページを作成
[構築手順の目次へ](#構築手順の目次)

１、任意のテキストファイルで以下コマンドをコピーしてHTMLファイルを作成する。

```Sorry_page.html
<!DOCTYPE html>
<html>
<head>
	<title>サーバがダウンしております！</title>
	<meta charset="UTF-8">
</head>
<body>
	<h1>サーバがダウンしております！</h1>
		<ul>
			<li>現在サーバがダウンしております。ご迷惑をおかけいたしますが、今しばらくお待ちくださいませ。</li>
		</ul>
</body>
</html>
```

##SorryページのHTMLファイルをS3バケットにアップロード
[構築手順の目次へ](#構築手順の目次)

１、バケット内の「オブジェクト」のタブから「アップロード」をクリックする。
![アップロード１.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1408197/dbab9d54-0d70-c742-1dca-3dfee7e54c4c.png)

２、「ファイルの追加」をクリックし、先程作成したSorryページのHTMLファイルを選択する。
![アップロード２.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1408197/d1d7cf07-f2a3-0acd-8181-e81eb7395c1b.png)

３、HTMLファイルが選択されていることを確認したら「アップロード」をクリックする。
![アップロード3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1408197/a13979aa-8f36-1dd4-f06e-83f7eff0bc2f.png)

４、正常にアップロードされたことを確認したら「閉じる」をクリックする。
![アップロード4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1408197/a85224ce-df71-538e-99e0-cd0343ec72ec.png)

５、オブジェクトのタブから先程アップロードしたオブジェクトをクリックする。
![アップロード5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1408197/a6bcfbf5-e423-f4d4-0793-d0f73d701a0f.png)

６、アクセス許可のタブからアクセスコントロールリスト（ACL）を編集する。
![アップロード6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1408197/f83dc919-40b6-e26c-8b7b-4f1f16f022ed.png)

７、全項目にチェックを入れ、赤色の警告で表示されているチェックボックスにチェックを入れたら「変更の保存」をクリックする。
![差し替え２.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1408197/5fd955f0-87a8-ac71-10ab-ff0036f0dee6.png)

８、正常にアクセス設定が変更されたら、オブジェクトURLをクリックする。
![アップロード8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1408197/f04adbb0-7000-396b-bbf0-4d522e9ab664.png)

９、Sorryページが表示されたことを確認する。
![アップロード９.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1408197/6f5cb8a7-fcae-a288-b24d-157970bdee22.png)

##CloudFrontを作成
[構築手順の目次へ](#構築手順の目次)

１、CloudFrontのコンソールに移動し「Create distribution」をクリックする。
![Cloudfront１.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1408197/baf6198c-d31f-fb19-b55d-8b3281febca3.png)

２、Origin domainで先ほど作成したS3バケットを選択する
![Cloudfront２.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1408197/519a5ec6-aee3-1693-e298-f9555108aee4.png)

３、S3 bucket accessの「Yes use OAI(bucket can restrict access to only CloudFront)」を選択し、
Origin access identityの「Create new OAI」をクリックする。
![Cloudfront３.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1408197/5b3c7872-685b-b992-8540-381abe78f8ca.png)

４、任意のOAI名を入力し「Create」をクリックする。
![Cloudfront４.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1408197/25aa0571-9d70-3342-cc98-c14f336c702a.png)

５、Origin access identityで先ほど作成したOAIを選択したら、Bucket policyの「yes, update the bucket policy」を選択する。
![Cloudfront５.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1408197/eb03f06e-5832-de40-a5ec-2293511a1a98.png)

６、「Alternate domain name(CNAME)-optional」に事前に取得したドメインを入力後、
「Custom SSL certificate-optional」に先ほどACMで発行した証明書を選択する。
![Cloudfront６.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1408197/0480b2ae-ad39-3d9e-39f0-0c7dadd71801.png)

７、Defoult root object-optionalに「Sorry_Page.html」を入力したら「Create distribution」をクリックする。
![Cloudfront７.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1408197/cb3b15a2-e49e-1fba-0072-e39c5531f018.png)

８、CloudFrontディストリビューションが正常に作成されたことを確認する。
![Cloudfront８.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1408197/f0e7196e-9611-5263-30c9-5d79fa2a5d05.png)

９、作成したCloudFrontディストリビューションのDomain nameをコピーする。
![Cloudfront９.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1408197/2214c17d-a944-ac90-f2b5-226d649ec665.png)

１０、任意のブラウザを開き、https://<作成したCloudFrontディストリビューションのDomain name>でアクセスし、sorryページが表示されていることを確認する。
![Cloudfront10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1408197/4fdc6281-c6f2-0fda-e7af-9e66580f2013.png)

##Route53でルーティング先を設定
[構築手順の目次へ](#構築手順の目次)

###プライマリの設定
[構築手順の目次へ](#構築手順の目次)

１、Route53で事前に作成したホストゾーンのコンソール画面で「レコードを作成」をクリックする。
![3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1408197/62d16283-ea2e-5822-fc7d-7ccdc111d9be.png)

２、任意のレコード名を入力し、レコードタイプは「A-IPv4アドレスと一部のAWSリソースにトラフィックをルーティングします」を選択する。
![4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1408197/f07ca551-cbf3-1634-5e62-51e73024749c.png)

３、ルーティングポリシーは「フェイルオーバールーティング」を選択し、フェイルオーバーレコードタイプは「プライマリ」を選択する。
![プライマリ修正.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1408197/0ad987b5-3270-4c67-1618-5c97e429ca2b.png)

４、トラフィックのルーティング先は「Application Load BlancerとClassic Load Balancerへのエイリアス」を選択する。
![6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1408197/16088cde-0058-c5ac-8aec-735eea533901.png)

５、先ほど作成したALBのリージョンとDNS名を選択し、「レコードの作成」をクリックする。
![7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1408197/38ffaf53-e88d-7a55-5140-64dbe83188c2.png)

６、プライマリのレコードが正常に作成されたことを確認する。
![差し替え３.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1408197/5b3c6446-41fc-e921-589b-f759e5b065ad.png)

###セカンダリの設定
[構築手順の目次へ](#構築手順の目次)

１、Route53で事前に作成したホストゾーンのコンソール画面で「レコードを作成」をクリックする。
![3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1408197/62d16283-ea2e-5822-fc7d-7ccdc111d9be.png)

２、任意のレコード名を入力し、レコードタイプは「A-IPv4アドレスと一部のAWSリソースにトラフィックをルーティングします」を選択する。
![4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1408197/f07ca551-cbf3-1634-5e62-51e73024749c.png)

３、ルーティングポリシーは「フェイルオーバールーティング」を選択し、フェイルオーバーレコードタイプは「セカンダリ」を選択する。
![ルーティング１.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1408197/068c1f09-07c1-7879-9474-386209dd1a77.png)

４、トラフィックのルーティング先は「CloudFrontディストリビューションへのエイリアス」を選択する。
![ルーティング2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1408197/16d5a5b5-34f0-bfc7-c96e-46317a63435a.png)

５、先ほど作成したCloudFrontディストリビューションを選択したら「レコードを作成」をクリックする。
![ルーティング4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1408197/e2ddefa2-e96b-cced-7637-2cbf9f78d17f.png)

６、セカンダリのレコードが正常に作成されたことを確認する。
![差し替え３.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1408197/42458e78-1276-8e8a-5dbe-1d3ba22eee43.png)

##DNSフェイルオーバーの動作確認
[構築手順の目次へ](#構築手順の目次)

１、任意のブラウザを開き、https://<事前に取得したドメイン名>でアクセスし、プライマリ側のWEBページが表示されたことを確認する。
![8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1408197/9bab7ee4-e301-cb9b-a1ee-216b08ba2835.png)

２、EC2のコンソールに移動し、プライマリ側で指定しているALBのターゲットグループのEC2インスタンスを停止する。
![動作確認.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1408197/3d63c52b-607c-19d6-63d5-ded1c0ac2964.png)

３、EC2インスタンスを停止したら数分後に画面を更新し、セカンダリ側のWEBページ(Sorryページ)が表示されたことを確認する。
![動作確認２.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1408197/3306b40e-15e6-f55e-5630-473b45618c95.png)

４、プライマリ側で指定しているALBのターゲットグループのEC2インスタンスを起動する。
![動作確認３.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1408197/357b233f-1400-4175-1cc5-c4acce7a8161.png)

５、EC2インスタンスを起動したら数分後に画面を更新し、プライマリ側のWEBページが表示されたことを確認する。
![8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1408197/9bab7ee4-e301-cb9b-a1ee-216b08ba2835.png)

##終わりに
今回は大阪リージョンでHTTPS通信化したCloudFrontとS3でSorryページを構築して、Route53でDNSフェイルオーバーする手順を解説しました。
ゼロからの構築になると、事前準備が多すぎるので今回は以下内容については割愛させていただきました。
（VPC、EC2インスタンス、ターゲットグループ、ドメイン取得、パブリックホストゾーンの作成）
少しでもお役に立てれば幸いです。