CDN
世界中のエッジロケーションにコンテンツをキャッシュし、低レイテンシで配信するネットワーク
インフラパフォーマンス
CDN とは
CDN (Content Delivery Network) は、世界中のエッジロケーション (PoP) にコンテンツをキャッシュし、ユーザーに最も近いサーバーから低レイテンシで配信するネットワークである。AWS では CloudFront が CDN サービス。Akamai が 1998 年に商用 CDN を開始し、現在は CloudFront、Cloudflare、Fastly が主要プレイヤーだ。
CDN なし vs CDN あり
CDN なし:
東京のユーザー → 米国のオリジンサーバー (200ms)
CDN あり:
東京のユーザー → 東京のエッジロケーション (10ms) ← キャッシュ済み
CloudFront の構成
ユーザー → CloudFront (エッジ) → オリジン (S3 / ALB / API Gateway)
↑ キャッシュヒット → オリジンにアクセスしない
CloudFront は 600 以上のエッジロケーションを持ち、リクエストを最も近いエッジにルーティングする。
キャッシュ戦略
| コンテンツ | キャッシュ TTL | 理由 |
|---|---|---|
| 静的ファイル (JS, CSS, 画像) | 1 年 | ファイル名にハッシュを含める (app.a1b2c3.js) |
| HTML | 短い (数分) or なし | 最新コンテンツを表示 |
| API レスポンス | 数秒〜数分 | データの鮮度による |
キャッシュヒット率の改善
キャッシュヒット率が低いと CDN の効果が薄れる。改善のポイント:
- クエリ文字列の正規化: 不要なクエリパラメータをキャッシュキーから除外する
- Cookie の除外: 静的ファイルのリクエストに Cookie を含めない
- Accept-Encoding の統一: gzip / Brotli の圧縮形式でキャッシュを分けすぎない
- キャッシュポリシーの適切な設定: CloudFront のマネージドキャッシュポリシーを活用する
S3 + CloudFront (静的サイトホスティング)
S3 (オリジン、非公開) → CloudFront (CDN、HTTPS) → ユーザー
S3 を直接公開せず、OAC (Origin Access Control) で CloudFront 経由でのみアクセスさせる。HTTPS、カスタムドメイン、キャッシュが自動的に適用される。
CDN の効果
- レイテンシ削減: ユーザーに最も近いエッジから配信
- オリジン負荷軽減: キャッシュヒットによりオリジンへのリクエストが減少
- DDoS 緩和: エッジで攻撃トラフィックを吸収 (AWS Shield Standard が自動適用)
- TLS 終端: エッジで TLS を処理し、オリジンの負荷を軽減
- 自動圧縮: gzip / Brotli でレスポンスサイズを削減
Lambda@Edge と CloudFront Functions
エッジでコードを実行し、リクエスト/レスポンスを動的に処理できる。
| 機能 | Lambda@Edge | CloudFront Functions |
|---|---|---|
| 実行場所 | リージョナルエッジ | エッジロケーション |
| 実行時間 | 最大 30 秒 | 最大 1 ミリ秒 |
| メモリ | 最大 10 GB | 2 MB |
| 用途 | A/B テスト、認証、リダイレクト | ヘッダー操作、URL 書き換え |
よくある落とし穴
| 問題 | 対策 |
|---|---|
| キャッシュが効かない | Cache-Control ヘッダーを確認 |
| 更新が反映されない | ファイル名にハッシュを含める |
| CORS エラー | CloudFront のレスポンスヘッダーポリシーで設定 |
| カスタムエラーページが表示されない | CloudFront のカスタムエラーレスポンスを設定 |
現場での応用を知るには関連書籍も役立つ。