AWSのS3を用いて静的なサイトを立ち上げてみる ２

# はじめに
前回はRoute 53でドメイン登録からACMに登録し、証明書の発行まで行いました。
前回の記事はこちら

https://qiita.com/sakura11054/items/0b5e8603d6d4f92ac746

今回はS3でバケット作成からCloudFrontの設定までを行います。

## S3
S3とはAmazonが提供するストレージサービスで、安価で使用できます。単なるストレージサービスではなく、今回のようにHPの作成等、AWSの様々なサービスとつなげることができます。
詳細はこちら
[Amazon S3 とは](https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/Welcome.html)

### バケットの作成
早速、HTMLファイル等を保存するバケットを作成していきます。
まずは下記画面より、バケットを作成を押下します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273072/b3498236-e6c8-86a7-b7e7-ad74cba61abb.png)

バケットタイプは汎用のまま作成します。
バケット名はRoute 53のドメイン名と一致させます。
今回は後程、`www`のサブドメインを作成するため、`www."Route 53のドメイン名"`をバケット名へ入力します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273072/1165aec3-00ea-bc6c-3a2c-373086950645.png)

完了後、汎用バケットに作成したバケットがあるため、作成したバケット名を押下し、次の画面へ遷移します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273072/c386ad3f-dc87-571e-c7c9-5f70934e3b08.png)

### プロパティの編集

プロパティを押下し、最下部にある静的ウェブサイトホスティングを編集します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273072/911fd858-9e67-8445-553e-f391f695e00a.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273072/e4e5edcf-f163-f3e8-9f66-f712e14f171f.png)

静的ウェブサイトホスティングを有効にし、静的ウェブサイトをホストするにチェックを入れます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273072/611ddbcf-9a62-9399-0c9e-a11f262e1dbc.png)

続いて、インデックスドキュメントを入力します。
ここにはアクセス先となるHTMLのファイル名を入力します。
今回はindex.htmlを入力します。
入力後、変更を保存を押下します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273072/71c5e7fa-38fd-2c15-dd52-0b857952d58c.png)

### アクセス許可の設定

アクセス許可の設定へ進みます。
まずは、ブロックパブリックアクセス (バケット設定)を編集します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273072/d23c5be9-14e0-b93d-efcd-bfa19d04513e.png)

パブリックアクセスをすべてブロックのチェックを外し、変更を保存します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273072/51037b84-61ab-cf88-85e4-4d37382af535.png)

続いてバケットポリシーを設定します。編集を押下後、下記の内容を書き込みます。
詳細はこちらです。
[ウェブサイトアクセスのアクセス許可の設定](https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/WebsiteAccessPermissionsReqd.html)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273072/d5b44593-9446-ecc7-ee23-26427c3bf966.png)

``` JSON
{
	"Version": "2012-10-17",
	"Statement": [
	    {
	        "Sid": "PublicReadGetObject",
            "Effect": "Allow",
            "Principal": "*",
            "Action": [
                "s3:GetObject"
            ],
            "Resource": [
                "arn:aws:s3:::Bucket-Name/*"
            ]
	    }
	]
}
```

### ファイルのアップロード

いよいよオブジェクトにファイルをアップロードします。
今回はあくまでテストですので、下記の"Hello World"を出力するものをアップロードします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273072/2e53a1df-83bc-c5c8-b1a7-32d7aab28478.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273072/6e86e3eb-583a-f4bb-f1d8-41d58c3dc2e0.png)
``` html:index.html
<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
</head>
<body>
  Hello, World!
</body>
</html>
```

完了後、再び静的ウェブサイトホスティングの部分を開きます。
バケットウェブサイトエンドポイントにURLが表示されていますのでこちらを押下し、"Hello World"が表示されるか確認します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273072/596f0186-f2ab-f991-83f4-591fe55a998e.png)

"Hello World"が表示されていたので成功です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273072/7585c473-4d87-1fb3-0e43-23a34a7bd356.png)

## CloudFront
続いてCloudFrontの設定を行います。
簡単に言えばすごいキャッシュサーバーです。
ここに先ほど作成したS3のバケットとRoute 53のドメインを紐づけていきます。

### ディストリビューションの作成

まずは、ディストリビューションの作成を行います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273072/bf23ff99-bbea-f43f-eccc-4d0c382afd49.png)

オリジンドメインを入力します。
ここに先ほど作成したS3のバケットが表示されるので選択します。
入力後、Webサイトのエンドポイントを使用するか聞かれるのでWebサイトのエンドポイントを使用を押下します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273072/fc44fc19-1d9e-0d65-644b-e86d91ea59f4.png)

入力が完了すると名前の部分も自動的に入力されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273072/4d5b2f3c-067e-c87a-2e7b-c53d14ac33de.png)

続いてビューワーの箇所でRedirect HTTP to HTTPSを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273072/35ecfd79-e63c-dc15-4082-13abbb99bd30.png)

続いて、キャッシュポリシーを選択します。
S3のオリジンドメインを入力したためか、自動で入力されていました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273072/b761c39f-fdeb-3815-281c-4a3618c417d8.png)

続いてWAFの設定を行います。
今回作成したものを公開する予定は全くないですが念のための設定です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273072/e20dce63-4769-5958-6394-80f4c52f0831.png)

続いて代替ドメイン名(CNAME)を設定します。
ここにはWebなどからアクセスするためのURLを入力します。
今回はサブドメインでのアクセスができるよう、S3のバケット名と同じ`www."Route 53のドメイン名"`を入力します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273072/f6790e97-7e4d-88f7-331a-72e9ed82dbef.png)

続いて、証明書の設定をします。
前回、証明書が完成していれば、ここに表示されるため、それを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273072/a6d5ece3-017b-a5b9-832f-8d06597353ad.png)

最後に、S3のどのファイルにアクセスするのか、デフォルトルートオブジェクトに入力します。
今回はindex.htmlを入力します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273072/871358c2-7f2b-5a7a-43f6-f31b669e7ac5.png)

完了後、下記の画面になれば成功です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273072/7b4d703b-d4a1-06fb-7965-da0e1bd9b813.png)

### Route 53と紐づけ

続いて、Route 53と先ほど作成したCloudFrontを紐づけていきます。
今回はサブドメインの作成から行います。
Route 53>ホストゾーン>作成したドメインよりレコードを作成を押下します。
レコード名に`www`を入力します。
レコードタイプはAレコードのままで大丈夫です。
エイリアスをオンにします。
トラフィックのルーティング先をCloudFrontディストリビューションへのエイリアスを選択します。
選択後、その下の入力欄に作成したCloudFrontのディストリビューションが表示されるのでそれを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273072/af06e4d1-12c4-a7d0-f162-dbd94828af59.png)

レコードを作成を押下し、完了です。

### 結果確認

設定完了後、すぐに確認できるわけではなかったです。
10分後くらいに作成したURLを入力すると無事にhttps形式かつサブドメインでアクセスできていることが確認できました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273072/8c2d3775-2283-67a4-1dee-2c5fec009267.png)

# おわりに

今回は2回にわたり、AWSのサービスを使って静的なサイトを構築しました。
ところどころ躓きましたがほぼ画面操作のみで作成できました。
まだまだ、AWSの理解は浅いのでこれからも触りながら理解していきます！
次回触るときはLambdaからめてなにかつくりたいなぁ...