はじめに
AWS CloudFrontは、グローバルCDNとしてWebサイトやAPIの高速化に寄与するサービスです。
中でも「キャッシュポリシー」は、CloudFrontの挙動とオリジンへの負荷、さらにはAWS WAFなどの課金にも直接影響する重要な構成要素です。
本記事では、CloudFrontのキャッシュポリシーをパフォーマンス・コスト・運用性の観点からチューニングするためのベストプラクティスを紹介します。
キャッシュポリシーとは?
CloudFrontが
- 何をキーとしてキャッシュするか
- どれくらいの期間キャッシュするか
- クエリ/Cookie/ヘッダーをどう扱うか
などを定義する設定です。
基本構成と項目説明
設定項目 | 役割 | よくある設定値 |
---|---|---|
TTL (Time to Live) | キャッシュの生存期間 | default=86400, min=60, max=31536000 |
クエリ文字列 | キャッシュキーに含めるクエリ | None / All / Include List |
Cookie | キャッシュキーに含めるCookie | None / Include List |
HTTPヘッダー | キャッシュキーに含めるヘッダー | None / Include List |
圧縮 | Gzip/Brotli圧縮対応 | Enabled |
チューニングベストプラクティス
🔧 1. 静的コンテンツは極力キャッシュする
対象:JS, CSS, 画像, Webフォント など
- キャッシュポリシー:
CachingOptimized
(または同等のカスタム) - TTL:86400秒以上推奨
- Cookie/クエリ/ヘッダー:含めない(None)
Behavior: /static/*
→ 高速表示 + オリジン負荷削減 + WAFリクエスト数も削減
🔧 2. 動的APIエンドポイントはキャッシュしない
対象:POST API, 認証系、パーソナライズ要素あり
- キャッシュポリシー:
CachingDisabled
- TTL:0
- Cookie/クエリ/ヘッダー:必要最小限
Behavior: /api/*
→ 毎回オリジンへリクエスト、キャッシュ非活用
🔧 3. 言語別・地域別ページの分離(国際対応)
対象:Accept-Language
, CloudFront-Viewer-Country
ヘッダー
- キャッシュキーに必要なヘッダーを含める
- カスタムキャッシュポリシーを利用
例:日本語/英語ページを分離してキャッシュ
🔧 4. ファイル名にハッシュを埋め込み、キャッシュ長期化
対象:JS/CSSなど頻繁に更新される静的ファイル
- ファイル名例:
app.83cc0fe.js
-
max-age=31536000, immutable
などと組み合わせてキャッシュ破棄不要に
キャッシュポリシー適用例(Terraform)
resource "aws_cloudfront_cache_policy" "optimized" {
name = "MyOptimizedPolicy"
default_ttl = 86400
max_ttl = 31536000
min_ttl = 60
parameters_in_cache_key_and_forwarded_to_origin {
cookies_config {
cookie_behavior = "none"
}
headers_config {
header_behavior = "none"
}
query_strings_config {
query_string_behavior = "none"
}
enable_accept_encoding_brotli = true
enable_accept_encoding_gzip = true
}
}
モニタリングと改善
- CloudFrontの
CacheHitRate
(CloudWatch)を監視 - S3アクセスログ+Athenaでキャッシュミスのパターンを解析
- キャッシュキーを複雑にしすぎない(分散しすぎ注意)
まとめ
- キャッシュポリシーはCloudFrontの性能とコストに直結する
- 静的コンテンツは積極的にキャッシュ、有効期限は長めに
- 動的APIはキャッシュしない
- キャッシュキーに含める要素は最小限が原則
- CloudFront + WAF連携時はキャッシュによりWAF課金も最適化できる
参考リンク
Views: 2