4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AWS CloudFront キャッシュポリシーのチューニングベストプラクティス【パフォーマンス&コスト最適化】

Posted at

AWS CloudFront キャッシュポリシーのチューニングベストプラクティス【パフォーマンス&コスト最適化】

はじめに

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課金も最適化できる

参考リンク

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?