LoginSignup
3
1

More than 5 years have passed since last update.

S3のスタティックサイトにSSLを当てる(Cloudfront必須)

Last updated at Posted at 2017-05-30

やりたいこと

s3に入れたスタティックなサイト(静的サイト)にSSLを当てたい!と思った。
httpsでもhttpでもウェブサイトを見せてくれという。

httpsを転送したいとかではない。なお転送したい場合は、今回のCloudfrontで転送の設定すれば良いだけなのでほぼ同じ道をたどればOK

[重要] S3単体では不可能 ※20170530時点

色々調べたんですが、出来なさそう。設定がない。SSLの設定をする項目がない。
どうやっても出来ないのでCloudfrontを使う必要あります。
(てか出来るなら誰か教えてください。。。)

S3にバケットを作ってスタティックサイトを設置する

ざっと書くと
1. awsにログインして、S3へ。
2. ドメイン名( www.hogehoge.com )というバケットを作る
3. Static website hostingという項目から「このバケットを使用してウェブサイトをホストする」をONにする
4. データを入れる

Cloudfrontを準備する

こっからが本番でーす。

  1. awsにログインして、Cloudfrontへ
  2. Create Destribution を押す
  3. Webを選択
  4. Origin Settings の Origin Domain Name にある入力フォームを選択するとS3のバケットが、アシストされて表示されるのでそのS3バケットを選択する(この時点で勝手にOriginIDも設定されて便利)
  5. だいぶスクロールして、Distribution Settings の SSL Certificate へ
  6. 特にドメイン名とかどうでもよければそのままで。独自ドメインにしたければCustom SSL Certificateを(ここではkeyとか設定面倒なのでそのままで)
  7. Default Root Object に index.html などを入れる(※重要 これ忘れるとドメイン直のアクセスが死ぬ)
  8. 保存

Route53に設定する

  1. Route53へ
  2. DNSを当てたいドメインを選択
  3. DNSレコード www.hogehoge.com に Typeを A で選択
  4. AliasをYESに
  5. Alias TargetにCloudfrontが選べるはずなので選択する
  6. 保存

サブディレクトリのindex.htmlへ行けるように

すごくよくぶつかるからここにインクルード。
Cloudfrontは通常設定すると、ドメインルートのみindex.htmlとかに転送してくれるがサブディレクトリは駄目。

  • aaaaa.com
    • => aaaaa.com/index.html
  • aaaaa.com/directory
    • => [403]

さて、困ったってことですが、Cloudfrontを当てるS3バケット先をアシストされたバケット名ではなく、ウェブアクセス用のバケットを手動で当て直す必要があります(なんでこんな面倒なのか)。

  • [これは×] aaaaa.com.s3.amazonaws.com
  • [これが○] aaaaa.com.s3-website-ap-northeast-1.amazonaws.com

websiteなんちゃらがついてる方であればサブディレクトリもいわゆるWEBサイトっぽい挙動をしてくれる。

余談

最後のRoute53で、Alias TargetにS3のバケットを直接選択することもできる。というかそれが通常の使い方。
https,httpの両方をカバーしたい、ないしはhttpsのアクセスをhttpに飛ばしたいなどは上記のCloudfrontを使おうぜという話。

※スクリーンショットが無いのは、面倒だったのと、どうせすぐインターフェースかわるのでいっかなーという甘え。甘え。

余談2

Cloudfrontはキャッシュしてくれるサービスでもある(というかこっちが本来の姿)ので、キャッシュします。
FTPなどでファイル更新したあとはキャッシュを消す作業をしないと、即時反映しません。

キャッシュの殺し方

Cloudfrontのキャッシュは、Invalidationsから殺害できます。
ちょっと奇妙な感じなんだけど、キャッシュを消すためにInvalidationをCreateします(直感的ではないなぁ)。

  1. awsにログインして、Cloudfrontへ
  2. 作ってあるCloudfrontを選択して、Destribution Settings を押す
  3. Invalidationsのタブを選択
  4. Create Invalidation 押す
  5. 消すキャッシュを特に限定することは無い場合は、そのままInvalidateボタンを押す
  6. 完了

これでキャッシュは消え去ります。

3
1
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
3
1