キャッシュされる場所

CloudFront がオリジン(S3 など)から受け取ったキャッシュ情報を元に、最終的なTTL(キャッシュ有効期限)をどう決定するかを整理したものですが、キャッシュされる場所も3つあります。

  1. User(ブラウザ)でキャッシュする
  2. CloudFront Edge Location でキャッシュする(ユーザーの近くのアクセスポイント)
  3. CloudFront Regional Edge Cacheでキャッシュする(AWS Region内にあるキャッシュポイント)

キャッシュされる場所

TTLの決定ロジック

  1. オリジンからのヘッダーが最優先
    まずはオリジン(S3など)が返す HTTP ヘッダーを確認します。
  • Cache-Control: s-maxage
    • CDN(CloudFront)向けのキャッシュ時間を秒単位で指定。
    • Edge Location と Regional Edge Cache に適用されます(ブラウザには適用されない)。
  • Cache-Control: max-age
    • ブラウザとCDNの両方に適用されます。
    • s-maxage が無ければこちらを使用します。
  • Expires
    キャッシュ有効期限を日時で指定。
    Cache-Control が無い場合のみ採用されます。
  1. ヘッダーが無ければ CloudFront の Default TTL

この時点で一旦「暫定TTL」が決まります。

  1. 最後に Minimum TTL / Maximum TTL で調整
  • ここで、 Minimum TTL(下限)と Maximum TTL(上限)が適用されます。
    • Max TTL: 暫定TTLがこれより長ければ短縮。
    • Min TTL: 暫定TTLがこれより短ければ延長。
      💡 最終的なTTLは必ずこの範囲に収まります。

TTLとCacheControlの優先順位

  • 表の「①②③」は、それぞれブラウザ・Edge Location・Regional Edge Cacheへの適用有無を示します。この結果で暫定のTTL値が決まります。
優先順位 種別 項目名 デフォルト値 優先度(TTL決定の順位) User
(ブラウザ)
Edge Location Regional Edge Cache
1 Origin Cache-Control: s-maxage なし(任意設定) CDN向けキャッシュ時間を指定
2 Origin Cache-Control: max-age なし(任意設定) s-maxageがなければ使用
3 Origin Expires なし(任意設定) Cache-Controlヘッダーが無い場合のみ使用
※日時指定
4 CloudFront Default TTL 86400秒(24時間)(必須) オリジンヘッダーが無い場合の代替TTL

TTLに適用するフィルター

  • 暫定のTTL値に対して下記のフィルターを適用します。
種別 項目名 デフォルト値 フィルター User
(ブラウザ)
Edge Location Regional Edge Cache
CloudFront Maximum TTL 31536000秒(365日)(必須) TTLの上限フィルター、TTL決定後に適用
CloudFront Minimum TTL 0秒(必須) TTLの下限フィルター、TTL決定後に適用

※デフォルト値は、デフォルトのCachingOptimizedマネージドキャッシュポリシーの値です、他のマネージドポリシーを選択するか、カスタムポリシーで変更可能です。
※User(ブラウザ)のキャッシュにはCloudFrontのMaximumTTLとMinimumTTLの値は適用されません。

まとめ

  • TTLの設定はCloudFrontとOriginの両方で可能。優先順位を押さえておけば、キャッシュの挙動を自在にコントロールできます。

参考文献

 AWS公式:「コンテンツをキャッシュに保持する期間 (有効期限) を管理する