キャッシュされる場所
CloudFront がオリジン(S3 など)から受け取ったキャッシュ情報を元に、最終的なTTL(キャッシュ有効期限)をどう決定するかを整理したものですが、キャッシュされる場所も3つあります。
- User(ブラウザ)でキャッシュする
- CloudFront Edge Location でキャッシュする(ユーザーの近くのアクセスポイント)
- CloudFront Regional Edge Cacheでキャッシュする(AWS Region内にあるキャッシュポイント)
TTLの決定ロジック
- オリジンからのヘッダーが最優先
まずはオリジン(S3など)が返す HTTP ヘッダーを確認します。
- Cache-Control: s-maxage
- CDN(CloudFront)向けのキャッシュ時間を秒単位で指定。
- Edge Location と Regional Edge Cache に適用されます(ブラウザには適用されない)。
- Cache-Control: max-age
- ブラウザとCDNの両方に適用されます。
- s-maxage が無ければこちらを使用します。
- Expires
キャッシュ有効期限を日時で指定。
Cache-Control が無い場合のみ採用されます。
- ヘッダーが無ければ CloudFront の Default TTL
この時点で一旦「暫定TTL」が決まります。
- 最後に 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公式:「コンテンツをキャッシュに保持する期間 (有効期限) を管理する」