【AWS】S3 のバケットに HTML ファイルをアップロードしてブラウザから表示する


# 目標

本記事の目標は S3 のバケットに HTML ファイルをアップロードしてそれをブラウザから表示してみることです。
図で表すと以下のようになります。

![png.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/259125/1c264d92-8775-d4fd-0a28-64504b4f4465.png)


【参考】
・[静的ウェブサイトホスティング用に S3 バケットを設定する方法](https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/user-guide/static-website-hosting.html)
・[Amazon S3による静的Webサイトホスティング](https://www.slideshare.net/horiyasu/amazon-s3web-27138902)

# 手順

1. バケットの作成
2. バケットの設定
3. コンテンツのアップロード
4. ブラウザからアクセス

# 1. バケットの作成

画像の赤枠を修正したりクリックしていくだけです。
基本すべてデフォルト設定で作成して、あとから設定を編集していきます。

![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/259125/6ca940da-1132-db4b-c12a-f30ff6216abd.png)
※ 今回はバケット名を「test-bucket-suguru」に設定しました。適宜変更してください。
![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/259125/a063d01b-9729-4f57-4254-25df369ece67.png)
![3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/259125/0873dae0-1880-557a-a0ab-7d0a88bed0a1.png)
![4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/259125/1a77774d-c35b-783e-4933-3172c239bb31.png)

バケットの作成は以上です。

# 2. バケットの設定

以下の 3 つの設定をします。

- パブリックアクセスの設定
- パケットポリシーの設定
- 静的ウェブホスティングの有効化

## 2-1. パブリックアクセスの設定

「アクセス許可」から設定します。

![5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/259125/fd91eda4-29bf-0cd5-e582-e97c9c88817f.png)
![6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/259125/3a424508-d68b-235b-92bc-90a89b5cf6aa.png)

パブリックアクセスの設定は以上です。

## 2-2. パケットポリシーの設定

「アクセス許可」から設定します。

![6-5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/259125/44be8fe7-8516-5d99-184d-71112704019d.png)
![7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/259125/c916dc47-3d64-68c3-6117-318f99298028.png)

設定内容は[公式](https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/user-guide/static-website-hosting.html)を参考にしてください。
公式を見ると以下のように設定するとのことでした。

```json
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "PublicReadGetObject",
            "Effect": "Allow",
            "Principal": "*",
            "Action": [
                "s3:GetObject"
            ],
            "Resource": [
                "arn:aws:s3:::<バケット名>/*"
            ]
        }
    ]
}
```

パケットポリシーの設定は以上です。

## 2-3. 静的ウェブホスティングの有効化

「プロパティ」から設定します。

![8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/259125/110e889f-e70d-2a7d-3d45-65bcc48be9f1.png)
![9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/259125/7666b02c-2931-2d2d-ee55-8721ea887306.png)
![10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/259125/0a809df1-72d2-8d1a-f19e-ccec24e4e942.png)
![11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/259125/a5aeceac-e3c4-87e3-9b6f-099dc2388e3b.png)

デフォルトページを index.html、エラーページを error.html と設定しました。
これらのファイルを次の手順でアップロードします。

静的ウェブホスティングの有効化は以上になります。

# 3. コンテンツのアップロード

デフォルトページを index.html、エラーページを error.html と設定したのでそれらのファイルをアップロードします。

## 3-1. ファイルの用意

アップロードするファイルを用意します。
今回は検証なので内容はなんでもいいです。

HTML から画像ファイルが参照されることも確認したかったので、index.html には image01.png という画像ファイルを参照するようにしました。

```html:index.html
<p>index desu</p>
<img src="image01.png">
```

```html:error.html
<p>error desu</p>
```

・image01.png ↓
![image01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/259125/56480a0f-d7cd-24b0-f0a5-eba67250d015.png)

## 3-2. アップロード

用意した以下の 3 つのファイルをアップロードします。

- index.html
- error.html
- image01.png 

![12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/259125/3ecaf4c3-2139-4a9e-1eb1-7e3c19a30775.png)
![13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/259125/e9d8418f-0902-8047-33bc-2a41fc0bdc71.png)
![14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/259125/4054d6c9-4c77-2c55-e4ed-eb028b7551a9.png)
![15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/259125/cec22904-c95c-5cbd-397c-093b4baf6df4.png)

コンテンツのアップロードは以上になります。

# 4. ブラウザからアクセス

## 4-1. エンドポイントの確認

![16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/259125/476bea4f-66d3-d360-29bd-6fb684695df7.png)
![17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/259125/fe3d02e1-87ac-1572-d06a-0b5d8ab333b9.png)

赤枠がエンドポイントの URL になります。

## 4-2. ブラウザからアクセス

確認したエンドポイントの URL をコピーしてブラウザからアクセスします。

デフォルトを index.html と設定したので、アクセスすると index.html が表示されます。
![18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/259125/814f26c2-dade-a21a-a055-5a47827f1b59.png)
デフォルトページの URL の末尾に  `/error.html` をつけてアクセスするとエラーページが表示されます。 
![19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/259125/39c2d1ac-acf5-ace1-fc6d-5d20eea0e436.png)

# 5. バケットの削除

最後にバケットの中身を空にして、さらにバケットそのものを削除しましょう。
今の状態だとアクセスが大量にきてしまうと無料枠を突破してしまう可能性があります。

# まとめ

目標であった S3 のバケットに HTML ファイルをアップロードしてそれをブラウザから表示してみることが達成できました。

![png.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/259125/0dfc5994-25fd-786a-61d1-3d78de20647b.png)