AWS S3 静的ウェブホスティング・カスタムドメインを使用した静的ウェブホスティングをやってみた

# 初めに

以下のチュートリアル・設定方法に従ってやってみました。カスタムドメインの場合に気を付けることは、**ドメイン名とバケット名は一致していなければならない**点です。良い勉強になりました。

https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/HostingWebsiteOnS3Setup.html

https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/website-hosting-custom-domain-walkthrough.html

# バケットウェブサイトエンドポイントを使用した静的ウェブホスティング

バケットを作成します。

![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/5f2215d9-d792-e09c-3c39-63feb4af3a23.png)

「プロパティ」タブをクリックし、「静的ウェブサイトホスティング」の「編集」をクリックします。その後、以下の画面のように設定します。

![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/196351cd-b23e-aa81-fd28-fd624fb611eb.png)

「アクセス許可」タブをクリックし、「ブロックパブリックアクセス (バケット設定)」の「編集」をクリックし、以下のようにチェックを外します。

![3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/2f1d42ad-2606-e174-0542-3a21e79e40f8.png)

この時点ではバケット名の横に「オブジェクトは公開することができます」と表示されます。

![4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/7aef62b6-6354-6d0e-a017-fc58d1bd5e91.png)

続いてバケットポリシーを設定します。「アクセス許可」タブをクリックし、「バケットポリシー」の「編集」をクリックし、以下のように設定します。

![5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/890c646d-85ea-35fc-008c-410988e028a9.png)

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

この時点ではバケット名の横に「公開」と表示されます。

![6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/0507407a-c573-beae-98dd-2a919a70f593.png)

最後に以下のリンクにアクセスすると、index.html の内容が表示されます。

![7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/bb842676-23a2-aef2-5bd6-f2c96b644a42.png)

表示例

![9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/5684961d-dba2-e7c2-3f14-6c3a56f88328.png)

# カスタムドメインを使用した静的ウェブホスティング

冒頭にも書きましたが、**ドメイン名とバケット名は一致していなければなりません**。

## サブドメイン用のバケットを作成する

サブドメイン用のバケットを作成します。（ルートドメイン用のバケットは上記で作成したバケットを用います）

サブドメインはオブジェクトを格納しません。空のバケットを作成し、静的ウェブホスティングの設定するだけになります。ただし静的ウェブホスティングの設定は、リダイレクトの設定になります。

![10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/86c0fd26-ce92-e2f1-13dd-6030b73e0939.png)

サブドメインバケットの静的ウェブホスティングを設定します。

![11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/b5e0f8ea-94ec-4a8e-5909-c3ae08925d5e.png)

ログ用のバケットを作成します。（オプションです。必要がなければこの手順は飛ばしても問題ありません。）

![12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/4e42c725-1ba5-c311-d385-ddf707a96924.png)

ログファイル格納用にフォルダを作成します。

![13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/8e0eb226-9211-4969-1e03-47be5539e173.png)


「プロパティ」タグをクリックし、「サーバーアクセスログ記録」の「編集」をクリックします。以下のように設定します。ターゲットバケットは「S3の参照」から選択できます。

![14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/25be413f-deaa-7ab0-9cba-2ce0ba0deba0.png)

## Route53 でカスタムドメインの設定をする

Route53 でドメインを取得します。「ドメインの登録」をクリックします。

![24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/eb26dbf0-7ed7-b25c-42be-afacdd3cd2a9.png)

バケット名の「.com」を取った部分を左側の入力欄に入力し、右側には「.com」を選択します。「チェック」をクリックし、利用可能であれば、「カートに入れる」をクリックします。住所などはデフォルトのまま、注文を確定します。

![25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/ab7d765d-98c8-850e-48ac-c5c7571af06a.png)

ホストゾーンから今作成したドメインをクリックします。

![27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/517fd883-d3cf-d44c-4795-82a04d2a57ea.png)

「レコードを作成」をクリックします。

![16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/b4953ea8-0439-03bd-f14b-7e5a33729358.png)

以下の画面が表示される場合には、「ウィザードに切り替える」をクリックします。

![17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/618537ff-bcd1-4c36-e886-49072320b108.png)

「シンプルルーティング」をクリックします。

![18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/4a81e2fc-f7b6-5e06-a86c-19624c1abebb.png)

「シンプルなレコードを定義」をクリックします。

![19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/3b769bc1-0216-077a-a25a-8411dd006c93.png)

以下のように設定し、「シンプルなレコードを定義」をクリックします。

![20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/81fae4fd-f44e-d73d-a2d6-301fc6ddfb5e.png)

続いてサブドメイン用のレコードを作成します。「シンプルなレコードを定義」をクリックします。

![21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/1d06692e-56b9-d115-9486-cebab3dfd695.png)

先ほどと同様の設定に加え、レコード名の入力欄に「www」を入力します。後は先ほどと同様に進めます。

![22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/2045b4c6-821b-6dd2-6d9f-c949bc9cf8f1.png)

ドメインにアクセスし、正常にホスティングされるか確認します。

![26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/78417c8b-0b23-c494-6a35-7d1ae0b09c64.png)

# 疑問点

サーバーアクセスログの書き込み間隔はどれくらいなのでしょうか。

サーバーアクセスログのドキュメントには書き込みが 2 時間おきと書いてあります。

> Amazon S3 は 2 時間おきにログバケットにウェブサイトアクセスログを書き込みます。

このドキュメントは以下の「ステップ 5: ウェブサイトトラフィックのログ記録を設定する」に記載があります。

https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/website-hosting-custom-domain-walkthrough.html

一方、以下のドキュメントの「ベストエフォート型のサーバーログ配信」を読むと、明確に書き込み間隔の記載はありません。数時間以内としか書かれていません。

https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/ServerLogs.html

> サーバーアクセスログレコードの配信は、ベストエフォートで行われます。ログ記録用に適切にバケットを設定した場合、そのバケットへのほとんどのリクエストについてログレコードが配信されます。ほとんどのログレコードは、記録された時間から数時間以内に配信されますが、配信間隔は短くなる場合もあります。

> サーバーログの完全性や適時性は保証されません。リクエストのログレコードが、リクエストが実際に処理されてからかなり後に配信されたり、配信すらされないこともあり得ます。サーバーログの目的は、バケットに対するトラフィックの特性を理解することです。ログレコードが失われることはまれですが、すべてのリクエストが完全に報告されるとは限りません。

# 参考記事

https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/HostingWebsiteOnS3Setup.html

https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/website-hosting-custom-domain-walkthrough.html