CloudFrontでのルートアクセス(https://example.com/)のキャッシュ設定方法

CloudFrontでのルートアクセス(https://example.com/)のキャッシュ設定はどのようにすればいいですか? Default Root Object の設定有無で挙動が異なるためご注意ください。
2020.11.15

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

コンニチハ、千葉です。

困っていたこと

CloudFrontでのルート(https://example.com/)アクセスに関するキャッシュの設定はどのようにすればいいですか?

解決策

Default Root Object の設定有無により挙動が変わるためご注意ください。

CloudFrontにてDefault Root Objectを設定していない場合

CloudFrontにてDefault Root Object を設定なしでの設定です。 /をキャッシュし、それ以外をキャッシュしない設定を想定して検証します。 以下の設定で、/のみをキャッシュできます。

Behaviors(優先度順)

  • Path Pattern /、Managed-CachingOptimized
  • Path Pattern Defualt(*)、Managed-CachingDisabled

動作検証してみます。

$ curl -I http://example.cloudfront.net/
X-Cache: Hit from cloudfront

/へのアクセスがキャッシュできていることを確認できました。

CloudFrontにてDefault Root Objectを設定している場合

次にDefault Root Object に index.html を指定した場合を検証します。 / のアクセスは実質 /index.html になります。 そのため、CloudFrontのBhehaviors設定 にて /index.htmlを追加しキャッシュ設定する必要があります。

以下、動作は以下となります。index.htmlを Default Root Object として検証しております。

Behaviors(優先度順)

  • Path Pattern /index.html Managed-CachingOptimized
  • Path Pattern Defualt(*)、Managed-CachingDisabled
$ curl -I http://example.cloudfront.net/
X-Cache: Hit from cloudfront

キャッシュされていることを確認できました。逆に以下の設定を試します。

Behaviors(優先度順)

  • Path Pattern /、Managed-CachingOptimized
  • Path Pattern Defualt(*)、Managed-CachingDisabled
$ curl -I http://example.cloudfront.net/
X-Cache: Miss from cloudfront

/がキャッシュされていません。Default Root Objectを設定した場合は、Default Root Object に対して Path Pattern を設定する必要があります。

以上、千葉がお送りしました。