CloudFrontのデフォルトルートオブジェクトとS3の静的ウェブサイトホスティングのインデックスドキュメントの動作の違い

2017.11.21

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

ご機嫌いかがでしょうか、豊崎です。

CloudFrontのデフォルトルートオブジェクトと、S3の静的ウェブサイトホスティングのインデックスドキュメントの動作の違いについて触れる機会がありましたので、書いていきたいと思います。

ここでの前提

コンテンツ配置用S3のディレクトリ構成は以下とします。

/ 
├ index.html
└ demo/
   └ index.html

デフォルトルートオブジェクト

CloudFrontの機能でデフォルトルートオブジェクトというものがあります。 エンドユーザがディストリビューションのルートURLを指定した場合に特定のオブジェクトを返すようにする機能です。

ここではオリジンをS3オリジンとして説明をしていきます。

デフォルトルートオブジェクトの挙動

設定箇所としては以下です。 ここでは「Default Root Object:index.html」として設定をしました。

以下のようにリクエストを投げると「index.html」を返してきます。

#エンドユーザのリクエスト
http://xxxx.cloudfront.net/

#レスポンス
http://xxxx.cloudfront.net/index.html

index.htmlがルート直下にあり、ディストリビューションのルートを指定した場合のみ、「index.html」を参照させることで要件が満たされる場合は上記設定を行えばOKです。 以下のようにサブディレクトリを指定した場合、サブディレクトリ配下の「index.html」を返さないため、注意が必要です。

#エンドユーザのリクエスト
http://xxxx.cloudfront.net/demo/

#レスポンス
http://xxxx.cloudfront.net/demo/

http://docs.aws.amazon.com/ja_jp/AmazonCloudFront/latest/DeveloperGuide/DefaultRootObject.html

S3の静的ウェブサイトホスティング

一方S3静的ウェブサイトホスティングの場合は、インデックスドキュメントのサポートがされるため、 サブディレクトリを指定した場合にもサブディレクトリ配下の「index.html」を返します。 http://docs.aws.amazon.com/ja_jp/AmazonS3/latest/dev/IndexDocumentSupport.html

#エンドユーザのリクエスト
http://xxxx.cloudfront.net/

#レスポンス
http://xxxx.cloudfront.net/index.html

#エンドユーザのリクエスト
http://xxxx.cloudfront.net/demo/

#レスポンス
http://xxxx.cloudfront.net/demo/index.html

というレスポンスが返ります。

上記の挙動が必要で、CloudFrontと組み合わせたい場合は、Origin Domain Nameに 静的ウェブサイトホスティングとして公開したS3のエンドポイントから「http://」を除いた部分を入力します。

さいごに

CloudFrontのデフォルトルートオブジェクトと、S3の静的ウェブサイトホスティングのインデックスドキュメントの動作の違いについて書いてみました。CloudFrontとS3は両方とも奥が深いです。 誰かのお役に立てば幸いです。