tl;dr
- やはりまだACMの証明書はバージニア北部にリージョン設定しておかないとCloudFrontに設定できない
- S3のバケット名はドメイン名完全一致じゃないとだめ
- S3の
Static website hosting
を設定したときに出てくるエンドポイントをCloudFrontのOrigin Domain Name
に設定しないとStatic website hosting
の設定を素通りする、何も効かない
やってたこと
- S3 + CloudFront + Route53 で静的ホスティングサイトを作成する
- アップするものはReact(create-react-app)で作成したSPAのbuildファイル
- CIで自動的に〜とかちょっとすっ飛ばしたかったので手動でS3のバケットに挙げる
ハマったこと
やはりまだACMの証明書はバージニア北部にリージョン設定しておかないとCloudFrontに設定できない
お名前.comでドメイン取得したので、互いにサイトを行ったり来たりで取得した。
最初は四苦八苦あって証明書は取れたもののCloudFrontで設定ができない。
いろいろ調べてみると米国東部 (バージニア北部)us-east-1
にリージョンを設定して証明書を取得しないといけないそう。ここでメインドメイン(example.com)の証明書を取得できていないことにも気づいたので、ワイルドカードを使ったドメイン(*.example.com)と一緒にドメインを追加して証明書を取得。
あとはCloudFrontとRoute53の設定をして完了。
S3のバケット名はドメイン名完全一致じゃないとだめ
まあこれは色んなサイトにも書いてあるし公式も説明してる感じなので調べてみてください
まあそんなこんなでルートにアクセスしたらビルド内容の表示ができました。
S3のStatic website hosting
を設定したときに出てくるエンドポイントをCloudFrontのOrigin Domain Name
に設定しないとStatic website hosting
の設定を素通りする、何も効かない
こいつが一番わからなかった。
前提として、SPAなので用意したバケット直下のindex.htmlを全てのアクセスに関してレスポンスしたい。
その設定がS3のStatic website hosting
でできるそう。
でもいくら設定してもできなかった。
なんでかなと思ってCloudFrontとかいろいろ確認してみてやっと理解。
CloudFrontのOrigin Domain Name
に設定していたものが、example.com.s3.amazonaws.com
だった。S3のStatic website hosting
設定画面に表示されているエンドポイントはexample.com.s3-hoge-ap-northeast-1.amazonaws.com
のようにリージョン名がついているものだった。
S3のエンドポイントをCloudFront側に設定して完了。
これで一旦Static website hosting
の設定は反映されるように。
最後に
ただここからまだredirect設定(ドメインのあとのパスは残しつつレスポンスはバケット直下のindex.htmlみたいなやつ)をしないといけなくて、そこがちょっとうまく行かず。一旦ここまでをメモとして残しておく。