【CloudFront】デフォルトルートオブジェクトを設定する

Terraform

 

S3をオリジンとしたCloudFrontを作成しました。

しかし、ディストリビューションのルート URLにアクセスするとエラーを返し、
index.htmlと打たないとアクセスできません。。。

 

そこで、デフォルトルートオブジェクトを設定し、ルート URLにアクセスするだけでindex.htmlが表示されるようにします

Terraformを使って設定していきます

・バージョン

 

デフォルトルートオブジェクトとは?

 

公式ドキュメントによると、

ユーザーがディストリビューション内のオブジェクトではなくディストリビューションのルート URL をリクエストした場合に特定のオブジェクト (デフォルトのルートオブジェクト) を返すように CloudFront を設定できます。
デフォルトのルートオブジェクトを指定すると、ディストリビューションのコンテンツが公開されなくなります。

 

要するに、

デフォルトルートオブジェクト = ルート URL アクセス時に表示したいもの

ということです。

ルートURLとは、、、
FQDN(CloudFrontだと、ディストリビューションのドメイン名)のこと。<FQDN>/about
など、サブディレクトリ(/about の部分)が含まれるものとは異なる。

 

ディストリビューションのドメインや代替ドメインにアクセスすると、

デフォルトルートオブジェクトが表示されるということです。

 

 

また、

デフォルトのルートオブジェクトを指定すると、ディストリビューションのコンテンツが公開されなくなります。

とあります。

 

ルート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 を指定するのみです。

 

plan , apply していきます

 

ダウンタイムはなかったと思います。。。

 

動作確認

 

applyが終わったら、

CloudFrontのルートURLにアクセスしてみてindex.htmlが表示されればOKです!!

 

筆者の場合は、↓のように表示できました!!!

 

参考文献

 

デフォルトのルートオブジェクトを指定する - Amazon CloudFront
CloudFront を構成して、特定のオブジェクト (デフォルトはルートオブジェクト) を返し、ディストリビューションのコンテンツを公開しないようにします。
Terraform Registry

コメント

タイトルとURLをコピーしました