S3をオリジンとしたCloudFrontを作成しました。
しかし、ディストリビューションのルート URLにアクセスするとエラーを返し、
index.htmlと打たないとアクセスできません。。。
そこで、デフォルトルートオブジェクトを設定し、ルート URLにアクセスするだけでindex.htmlが表示されるようにします
デフォルトルートオブジェクトとは?
公式ドキュメントによると、
ユーザーがディストリビューション内のオブジェクトではなくディストリビューションのルート URL をリクエストした場合に特定のオブジェクト (デフォルトのルートオブジェクト) を返すように CloudFront を設定できます。
デフォルトのルートオブジェクトを指定すると、ディストリビューションのコンテンツが公開されなくなります。
要するに、
デフォルトルートオブジェクト = ルート URL アクセス時に表示したいもの
ということです。
ディストリビューションのドメインや代替ドメインにアクセスすると、
デフォルトルートオブジェクトが表示されるということです。
また、
「デフォルトのルートオブジェクトを指定すると、ディストリビューションのコンテンツが公開されなくなります。」
とあります。
ルートURLにアクセスしたとき、以下のエラー画面が表示されなくなるということだと思います
サブディレクトリを含むURLにアクセスすると適用されない??
こちらも公式ドキュメントによると、
デフォルトルートオブジェクトを定義しても、ディストリビューションのサブディレクトリに対するエンドユーザーリクエストはデフォルトルートオブジェクトを返しません。例えば、
index.html
がデフォルトルートオブジェクトであり、CloudFront が CloudFront ディストリビューション下のinstall
ディレクトリに対するエンドユーザーリクエストを受け取ったと仮定します。
https://d111111abcdef8.cloudfront.net/install/
index.html
のコピーがinstall
ディレクトリ内にあっても、CloudFront はデフォルトルートオブジェクトを返しません。
デフォルトルートオブジェクトにindex.htmlを設定している場合は、
https://<CloudFrontのドメイン>/ ⇒ index.htmlが表示される
https://<CloudFrontのドメイン>/about/ ⇒ index.htmlは表示されない
ということになります。
サブディレクトリに対しても、
index.html を表示させるには CloudFront Functions を利用します
設定してみる
では、Terraformで設定していきます。
↓のように、aws_CloudFront_distribution に default_root_object を指定するのみです。
1 2 3 4 5 6 7 8 |
resource "aws_CloudFront_distribution" "main" { ... default_root_object = "index.html" ... } |
plan , apply していきます
1 2 |
$ terraform plan $ terraform apply -auto-approve |
ダウンタイムはなかったと思います。。。
動作確認
applyが終わったら、
CloudFrontのルートURLにアクセスしてみてindex.htmlが表示されればOKです!!
筆者の場合は、↓のように表示できました!!!
参考文献
コメント