【Route 53】S3バケットの静的なウェブサイトにドメインを使用してみた

# 背景・目的
以前、[Amazon Route53 でドメインを登録してみた](https://qiita.com/zumax/items/154243d4cb0eaa255032)では、ドメインを登録しましたが
今回は、S3バケットの静的ウェブサイトにドメインを使用してみます。

# 実践
[Amazon S3 バケットの静的なウェブサイトにドメインを使用する](https://docs.aws.amazon.com/ja_jp/Route53/latest/DeveloperGuide/getting-started-s3.html)を基に試します。

## ステップ 1: ドメインを作成する
[Amazon Route53 でドメインを登録してみた](https://qiita.com/zumax/items/154243d4cb0eaa255032#%E5%AE%9F%E8%B7%B5)で作成したドメインを使用します。

## ステップ 2: ルートドメイン用の S3 バケットを作成する
1. S3に移動します
1. バケットを作成します

## ステップ 3 (オプション): サブドメイン用に別の S3 バケットを作成する
サブドメイン用にステップ2と同じ手順で、S3バケットを作成します。

## ステップ 4: ウェブサイトホスティング用にルートドメインのバケットを設定する
1. ステップ2で作成したバケットを選択します
1. 「プロパティ」タブをクリックします
1. 静的ウェブサイトホスティングで「編集」をクリックします
1. 静的ウェブサイトホスティングを「有効にする」を選択します
1. 下記を入力し、「変更の保存」をクリックします
    - ホスティングタイプ：「静的ウェブサイトをホストする」
    - インデックスドキュメント：index.htmlとしました
    - エラードキュメント：error.htmlとしました
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/4d2915d5-be30-1ca1-b7f3-45c5a52abd36.png)
1. エンドポイントをメモしておきます。（あとで使用します）

## ステップ 5 (オプション): ウェブサイトのリダイレクト用にサブドメインバケットを設定する
ステップ 3 (オプション): サブドメイン用に別の S3 バケットを作成するで作成したバケットに対して設定します。

1. ステップ3で作成したバケットを選択します
1. 「プロパティ」タブをクリックします
1. 静的ウェブサイトホスティングで「編集」をクリックします
1. 静的ウェブサイトホスティングを「有効にする」を選択します
1. ホスティングタイプを「オブジェクトのリクエストをリダイレクトする」を選択します
1. 下記を入力し、「変更の保存」をクリックします
    - ホスト名：ステップ2で作成したバケットに遷移するドメイン
    - プロトコル：http

## ステップ 6: インデックスをアップロードしウェブサイトのコンテンツを作成する
1. 下記のHTMLコードをindex.htmlとしアップロードします
    ```
    <html>
    <head>
    <title>Amazon Route 53 Getting Started</title>	
    </head>
    
    <body>
    
    <h1>Routing Internet Traffic to an Amazon S3 Bucket for Your Website</h1>
    
    <p>For more information, see 
    <a href="https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/getting-started.html">Getting Started with Amazon Route 53</a> 
    in the <emphasis>Amazon Route 53 Developer Guide</emphasis>.</p>
    
    </body>
    
    </html>
    ```
1. errorページも作成しアップロードします
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/a2dfe252-acba-1290-0be6-f63082ec2d57.png)

## ステップ 7: S3 のパブリックアクセスのブロック設定を編集する
::: note alert
パブリックアクセスのブロック設定を外します。これによりインターネットの誰でもバケットにアクセスできますので、
ご自身の責任で実施してください。
:::

1. S3に移動します
1. ステップ2で作成したバケットを選択します
1. 「アクセス許可」タブをクリックします
1. ブロックパブリックアクセス (バケット設定)で「編集」をクリックします
1. パブリックアクセスをすべて ブロックをオフにし「変更の保存」をクリックします
1. ポップアップが表示されるので、「確認」をクリックします
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/79cae5f9-c4da-09ff-334a-6140030a6de4.png)

## ステップ 8: バケットポリシーをアタッチする
1. 「アクセス許可」タブをクリックします
1. バケットポリシーの「編集」をクリックします
1. 下記のバケットポリシーを貼り付けます。※your-domain-nameは適宜変更してください
    ```
    {
       "Version":"2012-10-17",
       "Statement":[{
          "Sid":"AddPerm",
          "Effect":"Allow",
          "Principal":"*",
          "Action":[
             "s3:GetObject"
          ],
          "Resource":[
             "arn:aws:s3:::your-domain-name/*"
          ]
        }]
    }
    ```

## ステップ 9: ドメインエンドポイントをテストする
1. エンドポイントをテストします
1. 表示されました
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/fdce60c8-0cba-406f-06e8-885fcbc131c4.png)


## ステップ 10: ドメインの DNS トラフィックをウェブサイトバケットにルーティングする
1. Route　53に移動します
1. ナビゲーションペインで「ホストゾーン」をクリックします
1. ドメインをクリックします
1. レコードを作成をクリックします
1. ウィザードに切り替えるをクリックします
1. シンプルルーティングを選択し、「次へ」をクリックします
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/f9de1f26-cfd5-ac9f-7841-cd2fbeb4a6e0.png)
1. 「シンプルなレコードを定義」をクリックします
1. ポップアップが表示されるので、下記を入力し、「シンプルなレコードを定義」をクリックします
    - レコード名：入力しない
    - レコードタイプ：A-IPv4アドレスと一部のリソースにトラフィックをルーティングします
    - 値/トラフィックのルーティング：
        - S3ウェブサイトエンドポイントへのエイリアス
        - リージョン：作成したリージョン
        - バケット名：作成したバケット名を選択します。※ リストに表示されないときは、[S3ウェブサイトエンドポイント](https://docs.aws.amazon.com/ja_jp/general/latest/gr/s3.html#s3_website_region_endpoints)を指定する
        - ターゲットのヘルスを評価：オフ
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/b5c120ff-25b1-a7a0-4fb7-44180d78d9f2.png)
1. レコードを作成をクリックします

### （オプション）サブドメインのエイリアスレコードを作成する
1. レコードを作成をクリックします
1. シンプルルーティングを選択し、「次へ」をクリックします
1. 「シンプルなレコードを定義」をクリックします
1. 作成したバケット名を設定し、レコードを作成をクリックします


## ステップ 11: ウェブサイトをテストする
### 通常
ウェブサイトが正常に動作しているか確認します

1. 作成したレコード名でアクセスします。表示されました
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/793a882e-9224-ab60-21b9-d9be69a40265.png)

1. エラーも表示されます
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/ab4fa042-c64b-18d3-7890-2e8710c049e8.png)


### リダイレクト
1. 作成したレコード名でアクセスします。リダイレクトされました
1. エラーページを指定してもリダイレクトされます

# 考察
今回、S3バケットの静的なウェブサイトにドメインを使用しました。S3バケットをWebホスティングとして、それほど使用したことがなかったので、最初はイメージが持てませんでしたが、最終的には理解できたと思います。
次回は、CloudFrontで試してみようと思います。

# 参考
https://docs.aws.amazon.com/ja_jp/Route53/latest/DeveloperGuide/getting-started-s3.html