【AWS S3】静的WEBサイトホスティング 

##目標
S3の静的WEBサイトホスティング機能（※）を利用して、静的WEBページをAWS上に配備する。

※静的WEBサイトホスティング機能
AWSネットワーク上に存在する高耐久・大容量・安価なストレージであるS3を利用して、
静的WEBページ（内部処理なしの単純な表示を行うHTMLページ）を公開する機能

##メリット
WEBページを公開するのはEC2上でも可能ですが、静的なWEBページの場合、
本機能を利用した方が以下の点において優れています。

**優れた耐久性とコストパフォーマンス**
S3はリージョン内の複数AZ内にデータが保存されているため、耐久性が高いです。
また、EC2に比べコストがリーズナブルです。


##デメリット
**動的なWEBアプリケーションはホスティング不可**
Rails等で作られた動的なWEBアプリケーションはホスティング不可となります。
上記をAWS上に配備したい場合、EC2を利用するか、
Lambda等と組み合わせてサーバレスアーキテクトを構築する事が必要となります。

##参考AWSドキュメント
**静的ウェブサイトの設定**
https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/dev/HostingWebsiteOnS3Setup.html#step2-create-bucket-config-as-website

##作業の流れ
| 項番 | タイトル |
|:----:|:-------------|
| 1 | S3バケットの作成 |
| 2 | 静的WEBサイトホスティングの有効化|
| 3 | WEBページのアップロード|
| 4 | バケットポリシー設定|
| 5 | WEBページアクセス確認|

##手順
###1. S3バケットの作成
①**AWS マネジメントコンソールにサインインし、Amazon S3 コンソール (https://console.aws.amazon.com/s3/) を開きます。**

②**「バケットを作成する」をクリック**
![tempsnip.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647616/e6b86f6c-44fc-93c4-5b16-f7e033bf22de.png)
③**バケット名（※）を入力する**
（※）バケット名は全世界で一意である必要があることに注意します、「次へ」をクリックした際にその旨を示す警告メッセージがでたら名前を修正してください。
![tempsnip.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647616/06e8d45b-4c30-5c9d-9bb6-1a7bcd9b17c6.png)

④**オプションの設定**
基本的には設定不要です。
「次へ」を押下してください。
![tempsnip.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647616/80d777db-959c-284c-f8d9-a7c4b172cbc1.png)

④**パブリックアクセスブロックを解除**
**「パブリックアクセスをすべてブロック」のチェックを外します。**

S3ではデフォルトで全てのパブリックアクセスを禁止するように設定されています。
今回はインターネット経由でのアクセスが必要なためこれを解除します。
![tempsnip.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647616/67d45c8b-32a4-ae8f-aaae-40829e7e0e18.png)

⑤**設定内容確認後、「バケットの作成」をクリック**
![tempsnip.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647616/237ed0a9-3e07-ecb7-f678-4e4a648f16e7.png)

⑥**バケット一覧に作成したバケットが追加されていることを確認**
![tempsnip.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647616/196636f8-0357-dfa7-15d6-39647e9478a2.png)

###2. 静的WEBサイトホスティングの有効化
①**新規作成したS3バケットの詳細ページから「プロパティ」タブへ移動し、「Static website hosting」をクリック**
![tempsnip.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647616/b1d84a0f-9ec9-bd35-c7e0-4d162a37af31.png)

②**インデックスドキュメントを設定し、 静的WEBサイトホスティングを有効化する**
「このバケットを使用してウェブサイトをホストする」にチェックを入れ、インデックスドキュメント（※）にインデックスファイル名を入力してください。

※インデックスドキュメントとは、URLにファイル名を省略した場合にデフォルトでレスポンスされるWEBページのことです。通常は「index.html」というファイル名となります。
詳細はhttps://docs.aws.amazon.com/ja_jp/AmazonS3/latest/dev/IndexDocumentSupport.html

![tempsnip.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647616/6b8b86b9-f3dd-d86d-d992-88d368792407.png)

②**ホスティングが有効になっていることを確認**
![tempsnip.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647616/1f0c0ba7-c1c7-cac3-7a27-a011c7d70008.png)

###3. WEBページのアップロード
①**インデックスページを作成**
ローカルマシン上でインデックスページとして利用する「index.html」を作成します。
内容は任意ですが、サンプルHTMLを以下に記載します。


```html
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
    <title>My Website Home Page</title>
</head>
<body>
  <h1>Welcome to my website</h1>
  <p>Now hosted on Amazon S3!</p>
</body>
</html>
```



②**概要タブ内の「アップロード」をクリック**![tempsnip.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647616/0a00072d-85ae-109d-0e68-ad2f5c49dbc3.png)

![tempsnip.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647616/34e9829f-7686-4e8b-0f34-cb8be54cb29b.png)

③**ファイルの選択**
「ファイルの追加」から「index.html」を選択、もしくはドラッグアンドドロップ
![tempsnip.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647616/bf603f48-bf97-118d-5277-4a897cb526e4.png)
ファイルが追加されたことを確認したら次へ
![tempsnip.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647616/d8286dad-6677-a492-d2c4-1b2da3d5c9ad.png)

④**アクセス許可を設定する**
基本的には設定不要です、次へをクリックします。
![tempsnip.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647616/a870c707-2499-ad4c-f8f1-b635d7338702.png)

④**プロパティを設定する**
基本的には設定不要です、次へをクリックします。
![tempsnip.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647616/a1a26164-689e-239e-2e36-7308da7745cd.png)

⑤**アップロード実行**
設定内容確認後「アップロード」をクリック
![tempsnip.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647616/0f510ed0-ec40-b12e-0911-d4d77dd0a713.png)

⑥正常にファイルがアップロードされたか確認![tempsnip.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647616/9f54b5c2-69f3-0d3e-5e6d-d62f47c721cf.png)

※注意・参考
現在の設定ではまだアップロードしたWEBページへのアクセスは拒否されてしまいます。
実際にアクセス可能とするには、前述の手順でのパブリックアクセス拒否解除に加え、
更に後述するバケットポリシーというS3バケットに付与するアクセス制限ルールにおいてパブリックアクセスを許可する必要があります。
<img width="817" alt="キャプチャ.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647616/ac3929a7-0c51-92ad-a014-111496f757e1.png">

###4. バケットポリシー設定
①**作成したS3バケットの詳細ページの「アクセス権限」タブへ移動し、「バケットポリシー」をクリック**
![tempsnip.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647616/4b6518fc-843a-12cd-cda1-9dbe4772441e.png)

②**バケットポリシーの記載**
バケットポリシー(S3バケットに付与するアクセス制限ルール)はJSONという記載方式によって記載されます。
以下のコードをルールに記載することで、作成したS3バケットへのパブリックアクセスを許可します。
「バケットポリシーエディター」に以下のコードを記載し「保存」をクリックしてください。

**※注意
Resourcesのarn名に関しては、
「作成したS3バケット名」という文字列を実際に作成したS3バケット名に置換してください**

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

![tempsnip.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647616/5ed9cec7-931c-8480-51a5-6888630ecb8e.png)

③**バケットポリシー設定確認**
バケットポリシーがパブリック設定になったことを確認します。
![tempsnip.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647616/b7496562-a606-386d-9131-aba35a49dc99.png)

###5. WEBページアクセス確認
①**オブジェクトURLへアクセス**
アップロードした「index.html」の詳細ページへ移動しオブジェクトURLをクリック
![tempsnip.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647616/73555cbb-9d51-205c-3580-fcd6b7ed6e5d.png)

正常にWEBページが表示されればOKです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647616/61c18d4f-8e70-d772-1fcb-15d1710a5ed5.png)