やりたいこと
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を準備する
こっからが本番でーす。
- awsにログインして、Cloudfrontへ
- Create Destribution を押す
- Webを選択
- Origin Settings の Origin Domain Name にある入力フォームを選択するとS3のバケットが、アシストされて表示されるのでそのS3バケットを選択する(この時点で勝手にOriginIDも設定されて便利)
- だいぶスクロールして、Distribution Settings の SSL Certificate へ
- 特にドメイン名とかどうでもよければそのままで。独自ドメインにしたければCustom SSL Certificateを(ここではkeyとか設定面倒なのでそのままで)
- Default Root Object に index.html などを入れる(※重要 これ忘れるとドメイン直のアクセスが死ぬ)
- 保存
Route53に設定する
- Route53へ
- DNSを当てたいドメインを選択
- DNSレコード www.hogehoge.com に Typeを A で選択
- AliasをYESに
- Alias TargetにCloudfrontが選べるはずなので選択する
- 保存
サブディレクトリの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します(直感的ではないなぁ)。
- awsにログインして、Cloudfrontへ
- 作ってあるCloudfrontを選択して、Destribution Settings を押す
- Invalidationsのタブを選択
- Create Invalidation 押す
- 消すキャッシュを特に限定することは無い場合は、そのままInvalidateボタンを押す
- 完了
これでキャッシュは消え去ります。