LoginSignup
67
54

More than 5 years have passed since last update.

S3+CloudFrontで静的サイトを配信する

Last updated at Posted at 2018-06-04

S3を静的サイトとして配信したい

AWSで簡単なペラページとかをサクッと公開したいときとかの手順です。

公式の通りにやればいいんですが、HTTP Onlyらしいです。

静的ウェブサイトホスティング用に S3 バケットを設定する方法

なので、S3のウェブサイトホスティングは使わずにS3+CloudFrontで設定してみます。

S3作成

バケットを作成

設定はデフォルトで大丈夫です。
index.htmlでも入れておきましょう。

CloudFront作成

Distribute作成

Distributionを作成します。

Origin Settings

OriginにS3を設定

Origin DOmain Nameに先程作成したバケットを指定します。
ボックスにフォーカスするとリストで出てきますのでそのまま選んで大丈夫です。
<BucketName>.s3.amazonaws.comとなります。
Origin IDは自動で入力されるのでそのままで。

Restrict Bucket Accessを設定

Yesを選択することで、CloudFrontからのアクセスを許可できます。

Origin Access Identity

Create a New Identityで専用のIAMが作られます。
なお、ひとつ作ればそれを使い回すことも可能です。

Comment

access-identity-s3-accessとしました。

Grant Read Permissions on Bucket

Yesにすると、S3のバケットポリシーに自動で書き込まれます。

ということで、Origin Settingsはこんな感じになりました。

Screen Shot 2018-11-01 at 20.09.17.png

Default Cache Behavior Settings

Viewer Protocol Policy

Redirect HTTP to HTTPSを選択すればHTTPSにリダイレクトするようになります。

Screen Shot 2018-11-01 at 20.13.44.png

Compress Objects Automatically

Compress Objects AutomaticallyをYesにすることで、gzip圧縮をかけられます。

Screen Shot 2018-06-03 at 23.15.54.png

Distribution Settings

Default Root Object

Default Root Objectindex.htmlを指定するとドメインのみのアクセスでindex.htmlが表示されるようになります。

Screen Shot 2018-06-03 at 22.30.34.png

保存

保存して15分ぐらい待つとデプロイが完了して、CloudFrontのドメインにアクセス可能になります。

その他

404ページ

存在しないページを表示するとS3のエラーレスポンスがXMLで表示されてしまいます。

Screen Shot 2018-11-01 at 21.01.58.png

こちらはCloudFrontのError Pages設定で変更可能です。
エラーレスポンスが403となってますので、404に書き換えてあげます。

Screen Shot 2018-11-01 at 21.04.18.png

なお、S3から403じゃなくて404で返してほしい場合はS3のバケットポリシーにs3:ListBucketのActionを追加すれば404になります。

SPA

SPAをルーティングで動かすにはちょっとした設定が必要です。

Screen Shot 2018-11-13 at 18.36.06.png

/fooでアクセスした場合、ファイルがないため403が返されますが、そこをindex.htmlを返すように変えてあげればオッケーです。

CORS

CORSを有効にするには、S3とCloudFrontの設定が必要となります。

S3

アクセス権限 -> CORSの設定に下記を適応します。

<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
    <AllowedOrigin>*</AllowedOrigin>
    <AllowedMethod>GET</AllowedMethod>
</CORSRule>
</CORSConfiguration>
CloudFront

Behaivorの設定でWhitelist Headersに下記を設定します。

Screen Shot 2018-11-13 at 18.40.50.png

67
54
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
67
54