目次

Amazon CloudFront 完全ガイド 2026

初心者から実務者向けの包括的解説

Amazon CloudFront は、600+ のグローバルエッジロケーションを使ったコンテンツ配信ネットワーク(CDN) です。2005 年に AWS が提供開始して以来、S3・ALB・API Gateway などのオリジンからコンテンツを低レイテンシーで配信し、セキュリティ・キャッシング・ファンクションレス処理を統合的に提供します。本ドキュメントは、CloudFront の概念・使い方・エコシステム・最新動向を体系的に解説する包括的ガイドです。

ドキュメントの目的

本ガイドは以下を対象としています。

  • 初心者向け: CloudFront とは何か、なぜ必要かを学びたい方
  • 開発者向け: S3・ALB をオリジンとして配信・キャッシュ設定をしたい方
  • SRE / インフラ向け: Lambda@Edge・WAF・Shield で本格的なグローバル配信基盤を構築したい方
  • 意思決定者向け: CloudFront vs Cloudflare vs Fastly の比較・投資判断

2026 年の CloudFront エコシステム

  • CloudFront KeyValueStore GA:エッジでの高速キーバリューアクセス(リージョンエッジキャッシュとの中間層を活用)
  • AI 配信最適化:Machine Learning による自動 TTL・圧縮・ルーティング推奨
  • Anycast Static IPs:CloudFront のスタティック IP 範囲を顧客が指定(IP ホワイトリスト対応)
  • GenAI アセット対応:生成 AI アセット(テキスト・画像)の効率的キャッシング戦略
  • CloudFront Functions GA 強化:JS のサブセット言語で 1ms 以下のエッジ処理(着地・すべてのエッジロケーション対応)
  • Lambda@Edge 拡張:Python・Go・Rust サポート検討中(現在 Node.js / Python)
  • Metrics 強化:CloudWatch との深い統合、エッジでのリアルタイムメトリクス収集

定義

Amazon CloudFront 公式による定義:

“Fast, highly secure and programmable content delivery network (CDN) that securely delivers data, videos, applications, and APIs to customers globally with low latency and high transfer speeds.”

複数のグローバルエッジロケーションを活用し、コンテンツをキャッシュ・配信・保護・プログラム制御します。


目次

  1. 概要
  2. CloudFront が解決する課題
  3. 主な特徴
  4. アーキテクチャ
  5. Distribution(ディストリビューション)
  6. Edge Location と地理的構造
  7. オリジン(Origin)設定
  8. ビヘイビア(Behavior)
  9. キャッシング戦略
  10. SSL/TLS とセキュリティ
  11. CloudFront Functions
  12. Lambda@Edge
  13. 主要ユースケース
  14. オリジン保護
  15. ロギング・モニタリング
  16. 動画配信(HLS / DASH)
  17. CloudFront KeyValueStore
  18. 他の類似ツールとの比較
  19. クライアント・エコシステム
  20. ベストプラクティス
  21. トラブルシューティング
  22. 2025-2026 最新動向
  23. 学習リソース
  24. 実装例・活用シーン
  25. 導入ロードマップ
  26. 実装チェックリスト
  27. まとめ
  28. 参考文献

概要

初心者向けメモ: CloudFront は「コンテンツを取ってくるサービス」ではなく、「世界中のエッジロケーションに キャッシュを配置 して、ユーザーに最寄りの場所からコンテンツを 素早く返す」ネットワークサービスです。オリジン(S3、ALB 等)が持つコンテンツを CloudFront が一度取得して、エッジロケーションに保存し、同じリクエストが来たら ネットワーク遅延なく即座にレスポンス します。

CloudFront は、S3・ALB・API Gateway・EC2・MediaPackage などのオリジンから 静的・動的コンテンツ をグローバルユーザーに低レイテンシーで配信するネットワークサービスです。単なるキャッシュではなく、WAF・Shield・Lambda@Edge・CloudFront Functions による エッジでのセキュリティ・カスタム処理 も統合します。

CloudFront の位置づけ

【図1】CloudFront の配置場所:

graph LR
    User["ユーザー<br/>(全世界)"]
    
    subgraph CDN["CloudFront<br/>(グローバル)"]
        Edge["Edge Location<br/>(600+)<br/>北米・欧州・アジア等"]
        RegionalEdge["Regional Edge Cache<br/>(13+)<br/>大規模キャッシュ"]
    end
    
    subgraph Origins["オリジン"]
        S3["S3 Bucket"]
        ALB["ALB"]
        API["API Gateway"]
        Custom["Custom HTTP"]
    end
    
    User -->|DNS Route 53| Edge
    Edge -->|キャッシュミス| RegionalEdge
    RegionalEdge -->|キャッシュミス| Origins
    Edge -->|キャッシュヒット| User

CloudFront が解決する課題

1. グローバルレイテンシーの問題

  • 課題:米国リージョンの ALB から東京ユーザーが直接アクセスすると 100ms+ の遅延
  • 解決:CloudFront の東京 Edge Location からキャッシュ済みコンテンツを 10-20ms で返す

2. オリジンへのボットクロール・スパム対策

  • 課題:S3 バケットをパブリック公開すると、Web スパイダー・不正アクセスが殺到
  • 解決:OAC(Origin Access Control)で S3 をプライベート保持、CloudFront を通してのみアクセス許可

3. オリジンの過負荷

  • 課題:毎回オリジンにアクセスするとサーバー負荷が増加、スケーリングコスト増加
  • 解決:CloudFront でキャッシュ、同じコンテンツ 1000 回リクエストされても オリジンは 1 回だけアクセス

4. DDoS 攻撃への耐性不足

  • 課題:オリジン直接アクセスだと大規模 DDoS に耐えられない
  • 解決:CloudFront + Shield Standard(無料)がレイヤー 3/4 DDoS を自動防御、WAF がレイヤー 7 を防御

5. エッジでのカスタム処理(認証・ルーティング)

  • 課題:認証やリダイレクトをオリジンで処理すると、全世界ユーザーが遠いサーバーに待機
  • 解決:Lambda@Edge・CloudFront Functions でエッジ実行、ユーザーの最寄りで即座に処理完了

主な特徴

特徴 説明
グローバル 600+ Edge Location 全世界に配置、エニーキャスト DNS で最寄りエッジに自動ルーティング
Regional Edge Cache(13+) エッジとオリジン間の中間キャッシュレイヤー
複数オリジン対応 S3、ALB、API Gateway、EC2、MediaPackage、カスタム HTTP
キャッシュ制御 TTL・キャッシュキー・Cache Policy で柔軟に設定
Signed URL / Signed Cookie 有期限・署名付きリンク、有料動画・プレミアムコンテンツ配信
Lambda@Edge(多言語) Node.js・Python でエッジ関数実装、複雑なカスタム処理
CloudFront Functions JS サブセット、< 1ms のエッジ処理(軽量)
WAF 統合 SQL インジェクション・XSS・ボット対策をエッジで実行
Shield Standard(無料) DDoS 自動防御、Enhanced(有償)で 24/7 サポート
リアルタイムログ Kinesis Data Streams へ 1 秒未満遅延で配信
HTTP/2・HTTP/3 最新プロトコル、多重化・ヘッダー圧縮で高速化
Gzip・Brotli 圧縮 テキスト自動圧縮、転送量削減

アーキテクチャ

初心者向けメモ: CloudFront はシンプルな「オリジン → CloudFront → ユーザー」の 3 層構造です。ユーザーがアクセスすると、DNS が最寄りの Edge Location を返し、Edge がキャッシュをチェック。キャッシュヒットなら即返答。キャッシュミスなら Regional Edge Cache → オリジン の順でフェッチします。

【図2】CloudFront リクエストフロー:

graph LR
    User["👤 ユーザー<br/>(東京)"]
    DNS["Route 53<br/>DNS"]
    Edge["Edge Location<br/>(東京 POP)"]
    RegCache["Regional Edge Cache<br/>"]
    Origin["オリジン<br/>(us-east-1)"]
    
    User -->|1. DNS クエリ| DNS
    DNS -->|2. 最寄り Edge<br/>返答| Edge
    Edge -->|3. キャッシュ<br/>チェック| Edge
    Edge -->|ヒット| User
    Edge -->|ミス| RegCache
    RegCache -->|4. Regional Cache<br/>チェック| RegCache
    RegCache -->|ヒット| Edge
    RegCache -->|ミス| Origin
    Origin -->|5. レスポンス<br/>受信| RegCache
    RegCache -->|キャッシュ保存| Edge
    Edge -->|6. ユーザーに<br/>返答| User

Distribution(ディストリビューション)

Distribution は CloudFront の 最上位の設定単位 です。1 つの Distribution で複数のオリジン・複数のビヘイビア(URL パターン)を定義します。

Distribution の構成要素

CloudFront Distribution(ディストリビューション)
├── Domain Name: xxx.cloudfront.net または カスタムドメイン
├── Origins(オリジン)
│   ├── S3 オリジン(OAC 付き)
│   ├── ALB オリジン
│   └── API Gateway オリジン
├── Behaviors(ビヘイビア)
│   ├── /api/* → ALB(キャッシュなし)
│   ├── /static/* → S3(長期キャッシュ)
│   └── /* → デフォルト
├── Cache Policies(キャッシュポリシー)
├── Origin Request Policies(オリジンリクエストポリシー)
├── Response Headers Policies(レスポンスヘッダーポリシー)
└── Settings
    ├── SSL/TLS(ACM 証明書)
    ├── WAF(AWS WAF)
    ├── Logging(標準ログ / リアルタイムログ)
    ├── Geo Restriction(地域制限)
    └── CORS

初心者向けメモ: Distribution は「配信プロジェクト」だと考えてください。1 つの Distribution の中で、複数のオリジン(S3、ALB 等)を指定し、URL パターンごとにどのオリジンを使うか・キャッシュをどうするかを決めます。


Edge Location と地理的構造

【図3】CloudFront のキャッシュ階層:

graph TD
    subgraph EdgeLocations["Edge Locations(600+)"]
        TYO["東京<br/>oss1-tyo61"]
        NYC["ニューヨーク<br/>oss1-jfk89"]
        LON["ロンドン<br/>oss1-lhr5"]
    end
    
    subgraph RegionalEdgeCache["Regional Edge Cache(13+)"]
        APE["Asia Pacific<br/>Tokyo Region"]
        NAM["North America<br/>Virginia Region"]
        EUR["Europe<br/>Frankfurt Region"]
    end
    
    Origin["オリジン<br/>(S3/ALB/API)"]
    
    TYO -->|レイテンシー: < 50ms| User1["東京ユーザー"]
    NYC -->|レイテンシー: < 50ms| User2["ニューヨークユーザー"]
    LON -->|レイテンシー: < 50ms| User3["ロンドンユーザー"]
    
    TYO -->|キャッシュミス| APE
    NYC -->|キャッシュミス| NAM
    LON -->|キャッシュミス| EUR
    
    APE -->|キャッシュミス| Origin
    NAM -->|キャッシュミス| Origin
    EUR -->|キャッシュミス| Origin

Edge Location の分類

タイプ 用途
Edge Location 600+ エンドユーザーに最も近い、小~中規模キャッシュ
Regional Edge Cache 13+ Edge Location より大規模、複数 Edge の統計的キャッシュ
オリジン 可変 S3・ALB・API Gateway 等

キャッシュヒット率の流れ:

  1. ユーザー → Edge Location(ヒット率 60-80% が目標)
  2. Edge Miss → Regional Edge Cache(ヒット率 70-90%)
  3. Regional Miss → オリジン(フェッチ・保存)

オリジン(Origin)設定

CloudFront は複数のタイプのオリジンをサポートします。

5.1 S3 オリジン + OAC(Origin Access Control)

ユーザー
    ↓(HTTPS)
CloudFront Distribution
    ↓(OAC 署名付きリクエスト)
S3 バケット(BucketPolicy で CF のみ許可)
(バケット public access = ブロック)

OAC(Origin Access Control)が推奨(旧 OAI は非推奨)

S3 オリジン設定の流れ

  1. CloudFront で「S3 オリジン」を追加
  2. OAC を新規作成(CloudFront が自動生成)
  3. S3 バケットポリシーを CloudFront OAC に限定
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "cloudfront.amazonaws.com"
      },
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::my-bucket/*",
      "Condition": {
        "StringEquals": {
          "AWS:SourceArn": "arn:aws:cloudfront::123456789012:distribution/E1234ABCD"
        }
      }
    }
  ]
}

初心者向けメモ: OAC はセキュリティ強化版。S3 バケットをパブリック公開せず、CloudFront のみが S3 にアクセスでき、一般ユーザーは CloudFront 経由でしかアクセスできません。

5.2 ALB / NLB オリジン

  • CloudFront → ALB(プライベートサブネット)
  • ↓(カスタムヘッダー検証で CF 経由確認)
  • EC2 インスタンス

設定:

  • ALB をプライベートサブネットに配置
  • ALB セキュリティグループを CloudFront IP 範囲のみ許可
  • カスタムヘッダー(例:X-CloudFront-Secret: secret-key)でオリジン保護

5.3 API Gateway オリジン

  • CloudFront → API Gateway
  • ↓(REST API / HTTP API)
  • Lambda / バックエンド

用途:

  • REST API のレスポンスキャッシング(GET リクエスト)
  • API Gateway スケーリングコスト削減

5.4 MediaPackage オリジン

  • CloudFront → AWS Elemental MediaPackage
  • HLS / DASH ライブストリーム

用途:

  • ライブ動画配信(HLS・DASH)
  • DVR・タイムシフト再生対応

5.5 カスタム HTTP オリジン

  • CloudFront → 任意の HTTP エンドポイント
  • オンプレミス / 他クラウド / SaaS

用途:

  • 既存オンプレミス Web サーバー
  • 他クラウドサービス(GCP・Azure)

ビヘイビア(Behavior)

Behavior は URL パターンごとのルール です。1 つの Distribution 内で複数の Behavior を定義し、リクエストパスに応じて異なるオリジン・キャッシュ設定を適用します。

Behavior の構成

Distribution
├── Behavior 1: /api/* → ALB, キャッシュなし
├── Behavior 2: /static/* → S3, 1 年キャッシュ
├── Behavior 3: /images/* → S3, 1 ヶ月キャッシュ
└── Behavior 4: /* (Default) → ALB, 1 日キャッシュ

Behavior の定義

設定項目 説明
Path Pattern URL パターン(例:/api/*, /static/*, *
Origin オリジン(S3、ALB 等)を選択
Cache Policy キャッシュ TTL・キャッシュキー定義
Origin Request Policy オリジンに送信するヘッダー・クエリ文字列・Cookie を定義
Response Headers Policy レスポンスヘッダーの追加・変更
Compress 自動圧縮(Gzip・Brotli)有効化
Viewer Protocol Policy HTTP・HTTPS ポリシー
Function Associations CloudFront Functions / Lambda@Edge の紐付け

初心者向けメモ: Behavior は「ルーター」だと思ってください。ユーザーのリクエストが来ると、CloudFront はパターンマッチして適切な Behavior を選択し、そこに定義されたオリジン・キャッシュ設定を適用します。

Behavior のマッチング順序

CloudFront は 最初にマッチした Behavior を使用します。

  • 優先度 1: /api/v1/* (Pattern: /api/v1/*)
  • 優先度 2: /api/* (Pattern: /api/*)
  • 優先度 3: /* (Pattern: *, Default Behavior)

リクエスト /api/v1/users は優先度 1 にマッチします。


キャッシング戦略

キャッシング戦略が CloudFront の 最大の価値 です。キャッシュ戦略が不適切だと、キャッシュヒット率が低下し、オリジン負荷が増加します。

9.1 TTL(Time To Live)

  • CloudFront が取得したコンテンツが何秒間キャッシュに残るか
TTL 値 用途
0 秒 キャッシュなし(毎回オリジンへ)、動的コンテンツ
1 分 準動的コンテンツ(頻繁に変更)
1 時間 一般的なページ
1 日 比較的安定したコンテンツ
1 ヶ月~1 年 静的ファイル(JS・CSS・画像)、不変オブジェクト

キャッシュ検証の優先順:

  1. オリジンが Cache-Control: max-age=N を返す → その値を使用
  2. オリジンが Expires を返す → その値を使用
  3. オリジンが何も返さない → CloudFront の Default TTL を使用

9.2 キャッシュキー

キャッシュキー = キャッシュを一意に識別するキー

デフォルト:
    http://example.com/image.jpg → キー = "example.com/image.jpg"

カスタマイズ可能な要素:
    ├── URL(ホスト + パス)← デフォルト
    ├── Query String(特定パラメーターのみ)
    ├── Cookie(特定 Cookie のみ)
    ├── Headers(User-Agent, Accept-Language 等)
    └── Custom Headers

キャッシュキー設計の例

❌ 悪い例:すべてをキャッシュキーに含める

キャッシュキー = URL + すべてクエリ文字列 + すべてヘッダー

リクエスト 1: /api/users?utm_source=google&utm_campaign=sale
リクエスト 2: /api/users?utm_source=facebook&utm_campaign=sale
    ↓
完全に異なるキャッシュキーのため、キャッシュヒット率 0%

✅ 良い例:重要な要素のみをキャッシュキー対象に

キャッシュキー = URL + { 言語 } クエリ文字列

リクエスト 1: /api/users?lang=ja&utm_source=google
リクエスト 2: /api/users?lang=ja&utm_source=facebook
    ↓
両者とも同じキャッシュキー → キャッシュヒット!

9.3 Cache Policy(キャッシュポリシー)

CloudFront はプリセット Cache Policy を提供:

ポリシー TTL キャッシュキー 用途
Caching Optimized 最大 1 年 URL のみ 静的ファイル(JS・CSS・画像)
Caching Optimized with query strings 最大 1 年 URL + 選択クエリ文字列 商品検索等
Managed-CachingOptimized AWS 推奨 AWS が最適化 新規プロジェクト向け
Caching Disabled なし - API・動的コンテンツ

初心者向けメモ: Cache Policy は「キャッシュのテンプレート」です。毎回手作業で TTL・キャッシュキーを設定するのは面倒なので、AWS が用意したポリシーを選択するだけで OK です。

9.4 Origin Request Policy(オリジンリクエストポリシー)

どのヘッダー・クエリ文字列・Cookie をオリジンに送信するか定義。

CloudFront → オリジン(どの情報を送る?)

Origins Request Policy で定義:
├── Host ヘッダー(常に必須)
├── User-Agent(ユーザーが要求)
├── Accept-Language(多言語対応)
├── Authorization(認証情報)
├── Cookie(セッション管理)
└── Custom Headers(独自情報)

9.5 Invalidation(キャッシュ削除)

  • コンテンツを更新したが、CloudFront の古いキャッシュが残っている
  • Invalidation で強制削除

Invalidation の例:

特定ファイル削除:
    /index.html
    /images/logo.jpg

ディレクトリ削除:
    /static/*
    /api/*

全体削除:
    /*

コスト:

  • 1-1,000 パス/月:無料
  • 1,001 パス以降:パスごとに課金(通常 0.005 USD / パス)

初心者向けメモ: Invalidation は「キャッシュをゴミ箱に捨てる」操作です。無効化したパスは即座に削除され、次のリクエストで新しいコンテンツをオリジンから取得します。


SSL/TLS とセキュリティ

10.1 SSL 証明書の種類

証明書 用途 費用
CloudFront デフォルト証明書 *.cloudfront.net 無料
ACM カスタム証明書 example.com 無料(AWS 内)
サードパーティ証明書 任意ドメイン 有償(推奨不)

ACM 証明書の必須条件: us-east-1 リージョンで発行(CloudFront の全リージョン要件)

10.2 Viewer Protocol Policy(ビューワープロトコルポリシー)

ポリシー 説明
Allow HTTP and HTTPS HTTP・HTTPS 両方を許可
HTTPS only HTTPS のみを許可
Redirect HTTP to HTTPS HTTP → HTTPS にリダイレクト(推奨)

10.3 Origin Protocol Policy(オリジンプロトコルポリシー)

ポリシー 説明
HTTP only オリジンに HTTP でアクセス
HTTPS only オリジンに HTTPS でアクセス(推奨)
Match Viewer ユーザープロトコルに合わせる

10.4 Field-Level Encryption(フィールドレベル暗号化)

CloudFront → オリジン

送信前に特定フィールドを暗号化
├── クレジットカード番号
├── パスポート番号
└── 社会保障番号(SSN)

用途:

  • PII(Personally Identifiable Information)の端末間暗号化
  • オリジンアプリケーションのみが復号化可能

CloudFront Functions

CloudFront Functions は エッジで実行される軽量 JavaScript です。Lambda@Edge より制限が厳しいが、レイテンシー < 1ms で高速実行。

CloudFront Functions の特徴

特性 CloudFront Functions Lambda@Edge
言語 JavaScript(サブセット) Node.js・Python
レイテンシー < 1 ms 通常 Lambda
メモリ 2 MB 最大 3,008 MB
実行タイムアウト 2 ms 5 秒(Viewer)/ 30 秒(Origin)
使用場所 Viewer Request・Response 4 つのフェーズ
コスト 低い(実行時間ベース) 実行数 + 実行時間

CloudFront Functions の例

URL 書き換え

function handler(event) {
  var request = event.request;
  var uri = request.uri;

  if (uri.startsWith('/old-path')) {
    request.uri = uri.replace('/old-path', '/new-path');
  }

  return request;
}

ビューワーリクエストヘッダー追加

function handler(event) {
  var request = event.request;

  request.headers['x-viewer-country'] = {
    value: event.viewer.country
  };

  return request;
}

レスポンスヘッダー操作

function handler(event) {
  var response = event.response;

  response.headers['cache-control'] = {
    value: 'public, max-age=3600'
  };

  response.headers['x-content-type-options'] = {
    value: 'nosniff'
  };

  return response;
}

Lambda@Edge

Lambda@Edge は CloudFront の 4 つのフェーズで実行される Lambda 関数 です。複雑なカスタム処理・認証・動的ルーティングに使用。

Lambda@Edge の実行フェーズ

┌─────────────────────────────────────────┐
│       Viewer Request(1. ユーザー要求)│
│  CloudFront Functions / Lambda@Edge      │
└──────────────┬──────────────────────────┘
               ↓
        CloudFront Cache
        
┌─────────────────────────────────────────┐
│    Origin Request(2. オリジン要求)     │
│  Lambda@Edge でヘッダー追加・署名        │
└──────────────┬──────────────────────────┘
               ↓
           オリジン
           
┌─────────────────────────────────────────┐
│   Origin Response(3. オリジン応答)     │
│  Lambda@Edge でレスポンス処理             │
└──────────────┬──────────────────────────┘
               ↓
        CloudFront Cache
        
┌─────────────────────────────────────────┐
│   Viewer Response(4. ユーザー応答)     │
│  Lambda@Edge でセキュリティヘッダー追加  │
└─────────────────────────────────────────┘

Lambda@Edge ユースケース

ユースケース フェーズ
認証・JWT 検証 Viewer Request Authorization ヘッダーをチェック
IP ホワイトリスト Viewer Request アクセス元 IP を確認
A/B テスト Viewer Request ユーザーを分岐させてテスト
カスタムヘッダー追加 Origin Request オリジン認証用ヘッダー
レスポンス加工 Origin Response HTML 改変・キャッシュ制御
セキュリティヘッダー Viewer Response HSTS・CSP・X-Frame-Options

Lambda@Edge の例:JWT 検証

# Python で Lambda@Edge 関数(Viewer Request フェーズ)
import json
import jwt

def lambda_handler(event, context):
    request = event['Records'][0]['cf']['request']
    headers = request['headers']

    # Authorization ヘッダーをチェック
    if 'authorization' not in headers:
        return {
            'status': '401',
            'statusDescription': 'Unauthorized',
            'body': 'Missing authorization header'
        }

    token = headers['authorization'][0]['value'].replace('Bearer ', '')
    try:
        jwt.decode(token, 'secret', algorithms=['HS256'])
    except:
        return {
            'status': '403',
            'statusDescription': 'Forbidden',
            'body': 'Invalid token'
        }

    # 検証成功、リクエストを通す
    return request

初心者向けメモ: Lambda@Edge は「CloudFront の内部で動作する Lambda 関数」です。ユーザーのリクエストが CloudFront に到達する前に Lambda を実行でき、認証・ルーティング・キャッシュ制御などをエッジで高速処理できます。


主要ユースケース

13.1 静的コンテンツホスティング

S3 バケット(HTML・CSS・JS・画像)
    ↓
CloudFront Distribution
    ↓
世界中のユーザー(低レイテンシー)

設定:

  • オリジン:S3 + OAC
  • キャッシュ:1 年(Caching Optimized)
  • Route 53:CloudFront ディストリビューションに ALIAS

効果: 100ms 超の遅延 → 10-50ms に削減

13.2 API キャッシング

API Gateway / ALB(GET リクエストのレスポンス)
    ↓
CloudFront Distribution(キャッシュ)
    ↓
複数ユーザーが同じ結果を高速取得

設定:

  • オリジン:API Gateway / ALB
  • キャッシュキー:URL + { ユーザーID } クエリ文字列
  • キャッシュ:1 時間(API レスポンス)

効果: オリジン負荷 70-80% 削減

13.3 動画ストリーミング

MediaPackage オリジン(HLS・DASH)
    ↓
CloudFront Distribution
    ↓
全世界ユーザーがライブ/オンデマンド視聴

設定:

  • オリジン:AWS Elemental MediaPackage
  • ビヘイビア:
    • /master.m3u8 (マニフェスト):キャッシュなし
    • /segment.ts (セグメント):1 時間キャッシュ

13.4 ライブ配信(HLS / DASH)

入力ソース(RTMP)
    ↓
MediaLive(トランスコード)
    ↓
MediaPackage(パッケージング)
    ↓
CloudFront(配信)
    ↓
ユーザー(HLS / DASH プレイヤー)

13.5 SaaS アプリケーション加速

SaaS アプリ(API・フロントエンド)
    ↓
CloudFront(キャッシング・圧縮)
    ↓
エンドユーザー(高速アクセス)

効果: レイテンシー削減 → UX 向上 → ユーザー満足度 UP

13.6 ゲーム アセット配信

ゲームサーバー(ゲーム本体・DLC・アップデート)
    ↓
CloudFront(セグメント配信・レジューム対応)
    ↓
プレイヤー(ダウンロード速度向上)

効果: ダウンロード時間 1/10 以下に削減

13.7 IoT デバイス ファームウェア配信

ファームウェア更新サーバー
    ↓
CloudFront(エッジキャッシュ)
    ↓
複数 IoT デバイス(並列ダウンロード)

効果: デバイス更新の一括配信を高速化

13.8 地域制限

特定国へのアクセス許可 / ブロック

用途:
├── 日本のみ:ホワイトリスト JP
├── 中国除外:ブロックリスト CN
└── EU・米国のみ許可

13.9 A/B テスト

  • Lambda@Edge で ユーザーを 2 グループに分岐
  • グループ A → /version-a
  • グループ B → /version-b
  • Cookie / ユーザー ID で一貫性維持
Signed Cookie を発行
    ↓
ユーザーが複数オブジェクトにアクセス
    ↓
CloudFront が Cookie を検証
    ↓
有効なら配信(有料動画・プレミアムコンテンツ)

オリジン保護

14.1 OAC(Origin Access Control)

S3 バケット
├── バケットポリシー:CloudFront のみを許可
└── パブリックアクセス:ブロック

CloudFront が OAC で署名付きリクエスト送信
    ↓
S3 が署名を検証 → OAC の OID なら許可
    ↓
一般ユーザーは S3 直アクセス不可

設定方法:

  1. CloudFront Distribution → Origin → “Create OAC”
  2. S3 バケット → Permissions → Bucket Policy に CloudFront OAC を追加
  3. S3 → Block public access → すべてブロック

14.2 Signed URL

アプリケーションサーバーが署名付き URL を生成
    ↓
URL: https://d123.cloudfront.net/premium-video.mp4?Policy=...&Signature=...&Key-Pair-Id=...
    ↓
ユーザーが時間制限付きリンクでアクセス
    ↓
期限切れ後は アクセス拒否

署名作成(Python):

from cloudfront_signer import CloudFrontSigner
import datetime

signer = CloudFrontSigner(
    key_id='APKAJXYZABC',
    private_key=open('private_key.pem', 'rb').read()
)

url = signer.generate_presigned_url(
    'https://d123.cloudfront.net/premium.mp4',
    date_less_than=datetime.datetime.utcnow() + datetime.timedelta(hours=1)
)

print(url)  # https://d123.cloudfront.net/premium.mp4?Policy=...&Signature=...
Signed Cookie を発行
    ↓
ユーザーブラウザが複数リクエストで Cookie を送信
    ↓
CloudFront が Cookie 署名を検証
    ↓
有効なら複数オブジェクトに自動アクセス許可

用途: 複数オブジェクト(全 Web サイト等)への有期限アクセス

14.4 AWS WAF 統合

CloudFront Distribution → AWS WAF → オリジン

WAF ルール例:
├── SQL インジェクション検出・ブロック
├── XSS 攻撃検出・ブロック
├── ボット検出・制限
├── IP ホワイトリスト / ブロックリスト
└── レート制限(DDoS 対策)

14.5 Shield

Shield タイプ 費用 対策
Standard 無料 レイヤー 3/4 DDoS 自動防御
Advanced $3,000/月 24x7 DDoS Response Team + 高度な保護

CloudFront には Shield Standard が自動適用(追加費用なし)。


ロギング・モニタリング

15.1 標準アクセスログ

配信先:S3 バケット
遅延:数分~1 時間
ログ内容:
    リクエスト日時、クライアント IP、リクエストメソッド、
    キャッシュステータス(Hit/Miss/Error)、バイト数 等

ログ形式(タブ区切り):

2026-04-26 10:30:45 TYO50 100 203.0.113.1 GET d123.cloudfront.net /index.html 200 - ... Hit
2026-04-26 10:30:46 TYO50 150 203.0.113.2 GET d123.cloudfront.net /image.jpg 200 - ... Hit
2026-04-26 10:30:47 TYO50 200 203.0.113.3 GET d123.cloudfront.net /api/data 200 - ... Miss

15.2 リアルタイムログ

  • 配信先:Kinesis Data Streams
  • 遅延:< 1 秒
  • 用途:リアルタイムダッシュボード、アラート、分析

リアルタイムログフォーマット:

{
  "timestamp": 1619433000,
  "c_ip": "203.0.113.1",
  "c_country": "JP",
  "cs_method": "GET",
  "cs_host": "example.cloudfront.net",
  "cs_uri_stem": "/index.html",
  "sc_status": 200,
  "cs_bytes": 1024,
  "sc_bytes": 5120,
  "time_taken": 0.050,
  "x_edge_location": "TYO50",
  "x_edge_request_id": "a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6",
  "x_host_header": "example.com",
  "cs_protocol": "https",
  "cs_bytes_in": 512,
  "cs_bytes_out": 5120,
  "x_edge_response_result_type": "Hit",
  "x_acm_validation_domain": "example.com"
}

15.3 CloudWatch メトリクス

CloudFront は自動的に CloudWatch にメトリクスを送信:

メトリクス 説明
Requests CloudFront への総リクエスト数
BytesDownloaded エッジ → ユーザーへのデータ転送量
BytesUploaded ユーザー → エッジへのデータ転送量
4xxErrorRate 4xx エラー発生率(%)
5xxErrorRate 5xx エラー発生率(%)
OriginLatency オリジンへのレイテンシー(ms)
CacheHitRate キャッシュヒット率(%)

CloudWatch ダッシュボード例:

  • [リアルタイムリクエスト数] [キャッシュヒット率]
  • [5分間のエラー率] [オリジンレイテンシー]

動画配信(HLS / DASH)

16.1 HLS(HTTP Live Streaming)

入力ビデオ(MP4 等)
    ↓
トランスコード(複数ビットレート)
    ↓
セグメント化(.ts ファイル、通常 10 秒)
    ↓
マニフェスト(.m3u8)作成
    ↓
CloudFront で配信
    ↓
プレイヤーが .m3u8 をダウンロード
    ↓
セグメント順序をキューし、ネットワーク速度に応じてビットレート調整

Manifest ファイル例(.m3u8):

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:10
#EXTINF:10.0
segment-001.ts
#EXTINF:10.0
segment-002.ts
#EXTINF:10.0
segment-003.ts
#EXT-X-ENDLIST

16.2 DASH(Dynamic Adaptive Streaming over HTTP)

HLS と同様だが、マニフェストは XML(MPD)形式

<?xml version="1.0" encoding="UTF-8"?>
<MPD xmlns="urn:mpeg:dash:schema:mpd:2011" minBufferTime="PT8S" ...>
  <Period>
    <AdaptationSet>
      <Representation id="video-1" mimeType="video/mp4" bandwidth="500000">
        <BaseURL>video-500k-segment-1.m4s</BaseURL>
      </Representation>
      <Representation id="video-2" mimeType="video/mp4" bandwidth="1000000">
        <BaseURL>video-1m-segment-1.m4s</BaseURL>
      </Representation>
    </AdaptationSet>
  </Period>
</MPD>

16.3 CloudFront + MediaPackage

MediaLive(入力ストリーム取得・トランスコード)
    ↓
MediaPackage(セグメント化・パッケージング)
    ↓
CloudFront Distribution
    ↓
ユーザー(HLS・DASH プレイヤー)

CloudFront キャッシュ設定:

  • マニフェスト(.m3u8 / .mpd):キャッシュなし(TTL=0)
  • ↓ 常に最新情報をオリジンから取得
  • セグメント(.ts / .m4s):長期キャッシュ(TTL=3600 秒)
  • ↓ 各セグメントは不変なので、1 時間キャッシュ

CloudFront KeyValueStore

CloudFront KeyValueStore は エッジで高速にアクセス可能なキーバリューストア です。2024 年に GA となり、エッジでの動的なデータ参照が可能になりました。

KeyValueStore の用途

用途 説明
地域別ルーティング リクエスト IP から地域を特定し、ルーティング先を決定
A/B テスト ユーザー ID をキーに、テストバージョンを取得
フィーチャーフラグ フラグをキーに、機能を有効/無効
レート制限 IP アドレスをキーに、リクエスト数をカウント
コンテンツ推奨 ユーザー ID をキーに、推奨コンテンツを取得

KeyValueStore へのアクセス

CloudFront Functions で KeyValueStore にアクセス:

function handler(event) {
  var request = event.request;
  var clientIP = event.viewer.ip;

  // KeyValueStore から地域情報を取得
  var kvs = event.request.querystring.kvs;
  // 実装注:実際の API は AWS documentation を参照
  
  // 地域別ルーティング
  if (clientIP.startsWith('203.0')) {
    request.uri = '/asia/' + request.uri;
  }

  return request;
}

初心者向けメモ: KeyValueStore は「エッジにある小さなデータベース」です。毎回オリジンに問い合わせる必要がなく、エッジで超高速にデータを取得できます。


他の類似ツールとの比較

比較表:CDN サービス

特性 CloudFront Cloudflare Fastly Akamai Azure Front Door GCP Cloud CDN
グローバル PoP 600+ 300+ 60+ 1,000+ 100+ 150+
エッジ処理 Lambda@Edge, CF Func Workers VCL EdgeKV Rules Cloud Functions
キャッシング TTL カスタマイズ可 自動最適化 VCL で制御 自動 自動 自動
DDoS 対策 Shield(無料・有料) Pro 以上に含む Safeguard Standard Protection Policy Cloud Armor
WAF 統合 AWS WAF Native Native Native Native Cloud Armor
ストリーミング HLS・DASH ネイティブ Fastly Real-time Stream Control Live Streaming Media CDN
マルチクラウド対応 AWS のみ 全クラウド 全クラウド 全クラウド Azure のみ GCP のみ
料金モデル データ転送 + リクエスト 月額 + 帯域幅 月額 + 帯域幅 月額(要相談) 月額(Azure 統合) 月額(GCP 統合)
サポート AWS Support Community・Enterprise Enterprise Enterprise Microsoft Support GCP Support

CloudFront を選ぶ理由

CloudFront が最適:

  • AWS エコシステム(S3・ALB・API Gateway・Lambda)との統合
  • OAC で S3 をセキュアに非公開保持
  • Lambda@Edge による複雑なエッジ処理
  • 無料枠が豊富(1 TB/月 + 10M リクエスト)
  • AWS Organization と統合した請求管理

CloudFront が不向き:

  • マルチクラウド環境(Cloudflare・Fastly が有利)
  • 超高度な VCL カスタマイズが必要(Fastly)
  • エッジ AI・機械学習機能が必要(Cloudflare Workers AI)
  • 月額固定料金がよい場合(Fastly・Akamai)

クライアント・エコシステム

19.1 AWS CLI

# Distribution 一覧
aws cloudfront list-distributions

# Distribution 作成
aws cloudfront create-distribution --distribution-config file://dist.json

# Invalidation 実行
aws cloudfront create-invalidation \
  --distribution-id E1234ABCD \
  --paths /index.html /api/*

# ログ取得
aws s3 cp s3://my-cf-logs/ ./logs --recursive

19.2 AWS SDK(Python / Node.js / Go)

Python boto3:

import boto3

cf = boto3.client('cloudfront')

# Distribution 情報取得
response = cf.get_distribution(Id='E1234ABCD')
print(response['Distribution']['DomainName'])

# キャッシュ無効化
cf.create_invalidation(
    DistributionId='E1234ABCD',
    InvalidationBatch={
        'Paths': {
            'Quantity': 2,
            'Items': ['/index.html', '/api/*']
        },
        'CallerReference': str(time.time())
    }
)

Node.js AWS SDK:

const AWS = require('aws-sdk');
const cf = new AWS.CloudFront();

// Distribution 作成
cf.createDistribution(params, (err, data) => {
  if (err) console.log(err);
  else console.log(data.Distribution.DomainName);
});

19.3 Infrastructure as Code

Terraform

resource "aws_cloudfront_distribution" "web" {
  origin {
    domain_name = aws_s3_bucket.web.bucket_regional_domain_name
    origin_id   = "S3"

    s3_origin_config {
      origin_access_identity = aws_cloudfront_origin_access_identity.oai.cloudfront_access_identity_path
    }
  }

  enabled = true

  default_cache_behavior {
    allowed_methods  = ["GET", "HEAD"]
    cached_methods   = ["GET", "HEAD"]
    target_origin_id = "S3"

    forwarded_values {
      query_string = false
      cookies {
        forward = "none"
      }
    }

    viewer_protocol_policy = "redirect-to-https"
    min_ttl                = 0
    default_ttl            = 3600
    max_ttl                = 86400
  }

  viewer_certificate {
    acm_certificate_arn      = aws_acm_certificate.web.arn
    ssl_support_method       = "sni-only"
    minimum_protocol_version = "TLSv1.2_2021"
  }

  restrictions {
    geo_restriction {
      restriction_type = "none"
    }
  }
}

AWS CDK(Python)

from aws_cdk import (
    aws_cloudfront as cf,
    aws_s3 as s3,
    core
)

class CloudFrontStack(core.Stack):
    def __init__(self, scope: core.Construct, id: str, **kwargs):
        super().__init__(scope, id, **kwargs)

        bucket = s3.Bucket(self, "WebBucket")

        distribution = cf.Distribution(self, "Distribution",
            default_behavior=cf.BehaviorOptions(
                origin=cf.origins.S3Origin(bucket),
                viewer_protocol_policy=cf.ViewerProtocolPolicy.REDIRECT_TO_HTTPS,
                cache_policy=cf.CachePolicy.CACHING_OPTIMIZED
            ),
            enable_ipv6=True
        )

CloudFormation

AWSTemplateFormatVersion: '2010-09-09'

Resources:
  CloudFrontDistribution:
    Type: AWS::CloudFront::Distribution
    Properties:
      DistributionConfig:
        Origins:
          - DomainName: my-bucket.s3.amazonaws.com
            Id: S3Origin
            S3OriginConfig:
              OriginAccessIdentity: origin-access-identity/cloudfront/ABCDEF
        Enabled: true
        DefaultCacheBehavior:
          AllowedMethods: [GET, HEAD]
          CachedMethods: [GET, HEAD]
          TargetOriginId: S3Origin
          ViewerProtocolPolicy: redirect-to-https
          CachePolicyId: 658327ea-f89d-4fab-a63d-7e88639e58f6

19.4 AWS WAF・Shield・Route 53 との統合

# WAF ルール作成
aws wafv2 create-web-acl \
  --name CloudFrontWAF \
  --scope CLOUDFRONT \
  --default-action Block={} \
  --rules '[{"Name":"AWS-AWSManagedRulesSQLiRuleSet",...}]'

# CloudFront に WAF を紐付け
aws cloudfront update-distribution \
  --id E1234ABCD \
  --distribution-config file://dist.json  # WebACLArn を含める

# Route 53 エイリアス
aws route53 change-resource-record-sets \
  --hosted-zone-id Z123ABC \
  --change-batch file://alias.json

ベストプラクティス

20.1 キャッシュ戦略

推奨:

  1. 不変オブジェクト = 長期キャッシュ

    • JS・CSS(ハッシュ含むファイル名):1 年
    • 画像:1 ヶ月~1 年
    • フォント:1 年
  2. 動的コンテンツ = 短期キャッシュまたはなし

    • HTML:1 日~1 時間
    • API レスポンス:5 分~1 時間
    • ユーザー固有データ:キャッシュなし
  3. キャッシュキー最適化

    • 不要なクエリ文字列・Cookie・ヘッダーを除外
    • 言語・地域・デバイスなど区別が必要な要素のみ含める

アンチパターン:

  • すべてのキャッシュ TTL を 0 に設定 → オリジン過負荷
  • クエリ文字列をすべてキャッシュキーに含める → キャッシュヒット率 0%
  • Cache-Control: public を信用してカスタマイズなし → 意図しないキャッシュ

20.2 セキュリティベストプラクティス

推奨:

  1. S3 + OAC で非公開保持

    S3 → Block public access ✓
    S3 → Bucket Policy で CloudFront OAC のみ許可
    
  2. HTTPS のみ

    Viewer Protocol Policy: redirect-to-https
    
  3. ACM 証明書 in us-east-1

    CloudFront が認識できる唯一のリージョン
    
  4. WAF + Shield を有効化

    Shield Standard: 無料(自動)
    Shield Advanced: 大規模 DDoS 対策(有償)
    WAF: SQL インジェクション・XSS ブロック
    
  5. Signed URL / Signed Cookie

    有料コンテンツ・認証必須は署名で保護
    

アンチパターン:

  • S3 をパブリック公開 → セキュリティリスク
  • HTTP を許可 → MITM 攻撃リスク
  • ACM 証明書を us-east-1 以外で作成 → CloudFront 無効

20.3 パフォーマンスベストプラクティス

推奨:

  1. Compression 有効化

    Behavior → Compress ✓ (Gzip・Brotli)
    
  2. HTTP/2・HTTP/3 対応

    CloudFront は自動的に対応(追加設定不要)
    
  3. Regional Edge Cache を活用

    キャッシュヒット率が低い場合、Regional Edge Cache の
    統計的キャッシュ効果を活用(自動)
    
  4. Origin との Keep-Alive

    オリジンプロトコル:HTTPS
    Keep-Alive Timeout:高め(5 秒)
    

20.4 コスト最適化

推奨:

  1. 無料枠の活用

    毎月 1 TB のデータ転送 + 10M リクエスト(12 ヶ月間)
    小規模プロジェクトなら無料で運用可能
    
  2. クエリ文字列・Cookie の最小化

    キャッシュキーに含める要素が少ないほど
    キャッシュヒット率向上 → 転送量削減
    
  3. Invalidation は必要最小限

    1-1,000 パス/月:無料
    1,001 パス以降:課金(0.005 USD / パス)
    
    大量無効化は避け、キャッシュ TTL で対応
    
  4. オリジン負荷削減

    CloudFront キャッシュで 70-80% の負荷削減可能
    → オリジンスケーリングコスト削減
    

トラブルシューティング

21.1 キャッシュヒット率が低い

原因と対策:

原因 対策
クエリ文字列が全部キャッシュキーに含まれている Origin Request Policy で不要なパラメーターを除外
Cookie が全部キャッシュキーに含まれている Cookie を選別、セッション Cookie を除外
TTL が短すぎる Cache Policy で TTL を延長(静的ファイルは 1 年)
User-Agent / Accept-Language をキャッシュキーに含めている 必要な場合のみ含める(多言語の場合)

確認方法:

# CloudWatch メトリクスで CacheHitRate を確認
aws cloudwatch get-metric-statistics \
  --namespace AWS/CloudFront \
  --metric-name CacheHitRate \
  --dimensions Name=DistributionId,Value=E1234ABCD \
  --start-time 2026-04-20T00:00:00Z \
  --end-time 2026-04-26T23:59:59Z \
  --period 3600 \
  --statistics Average

21.2 エラー率が高い(5xx)

原因と対策:

原因 対策
オリジンが落ちている オリジンの Health Check を確認
オリジンのタイムアウト Origin Timeout を延長(デフォルト 30 秒)
Lambda@Edge エラー CloudWatch Logs で Lambda エラーログを確認
WAF ルールが誤検知 WAF ルールを調整・ホワイトリスト追加

CloudWatch Logs 確認:

aws logs tail /aws/lambda/us-east-1.cloudfront-function --follow

21.3 Invalidation が完了しない

原因と対策:

原因 対策
Invalidation の待機中 状態確認:aws cloudfront get-invalidation
大量 Invalidation(1,001+ パス) 複数バッチに分割
ワイルドカード(/*)使用中 具体的なパスを指定

Invalidation 状態確認:

aws cloudfront get-invalidation \
  --distribution-id E1234ABCD \
  --id I1A2B3C4D5E6F7G8

21.4 CORS エラー

原因と対策:

オリジンが CORS ヘッダーを返していない
    ↓
CloudFront が CORS ヘッダーをブロック
    ↓
ブラウザが CORS 違反でエラー

対策:

  1. オリジン(S3・ALB)が Access-Control-Allow-* ヘッダーを返すよう設定
  2. CloudFront が CORS ヘッダーをフォワードするよう設定
// CloudFront Functions で CORS ヘッダーを追加
function handler(event) {
  var response = event.response;
  response.headers['access-control-allow-origin'] = {
    value: '*'
  };
  return response;
}

21.5 CloudFront への接続タイムアウト

原因と対策:

原因 対策
ユーザー ↔ CloudFront 接続タイムアウト ネットワーク遅延、ISP の問題 → 再試行
CloudFront ↔ オリジン接続タイムアウト Origin Timeout を確認・延長
オリジンの負荷が高い スケーリング、キャッシュ率向上

2025-2026 最新動向

22.1 CloudFront KeyValueStore GA

発表: 2024 年、正式リリース(GA)

エッジで高速なキーバリューアクセス
├── 地域別ルーティング
├── A/B テスト
├── フィーチャーフラグ
├── レート制限
└── コンテンツ推奨

効果: オリジン問い合わせなしにエッジで動的判定可能

22.2 AI 配信最適化

概要: Machine Learning による自動キャッシュ・圧縮・ルーティング最適化

CloudFront が自動学習
├── 最適 TTL を自動決定
├── 圧縮率を最適化
├── ビットレート適応を調整
└── ユーザーセグメント別のルーティング推奨

22.3 Anycast Static IPs

概要: CloudFront のスタティック IP 範囲を顧客が指定可能

  • 従来:CloudFront IP は AWS が管理(変動可能性)
  • 新機能:Anycast Static IPs で固定 IP 提供
  • → IP ホワイトリストに CloudFront を追加可能

22.4 GenAI アセット対応

生成 AI テキスト・画像のキャッシング戦略
├── LLM 生成コンテンツの効率的キャッシング
├── 生成 AI の応答遅延を削減
└── ユーザー体験(LLM 出力時間)を高速化

22.5 CloudFront Functions 言語拡張

現状: JavaScript(サブセット)

検討中: Python・Go・Rust のネイティブサポート

利点:
├── 開発言語の選択肢拡大
├── バックエンド言語との統一化
└── 複雑なロジックをエッジで実行可能

22.6 Lambda@Edge の言語拡張

現状: Node.js・Python

検討中: Go・Rust・Java のサポート


学習リソース

23.1 公式リソース

リソース URL
CloudFront 開発者ガイド https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/
CloudFront API リファレンス https://docs.aws.amazon.com/cloudfront/latest/APIReference/
AWS トレーニング https://aws.amazon.com/training/
CloudFront ナレッジセンター https://repost.aws/

23.2 認定資格

資格 対象 関連
AWS Certified Solutions Architect ソリューションアーキテクト CloudFront 出題
AWS Certified DevOps Engineer DevOps エンジニア CI/CD・CloudFront 統合
AWS Certified Advanced Networking ネットワークエンジニア CDN・キャッシング戦略

23.3 コミュニティ

コミュニティ 説明
AWS フォーラム 公式ディスカッション
Stack Overflow 質問・回答(amazon-cloudfront タグ)
AWS ジャパン 日本語コミュニティ・セミナー
CloudFront Slack 非公式コミュニティ

実装例・活用シーン

24.1 シーン 1:Next.js SPA + S3 + CloudFront

Next.js(フロントエンド)
    ↓ Build
S3 バケット(HTML・JS・CSS)
    ↓
CloudFront Distribution
    ↓
ユーザー(全世界)

設定:

  • オリジン:S3 + OAC
  • キャッシュ:Caching Optimized(1 年)
  • Behavior:/api/* は ALB(キャッシュなし)

効果: 初回ロード 3 秒 → 1 秒(同一地域での再アクセス)

24.2 シーン 2:API Gateway + CloudFront キャッシング

API Gateway(REST API)
    ↓ GET /products?lang=ja
CloudFront(キャッシュ)
    ↓
複数クライアント(同じ結果を高速取得)

キャッシュキー:

URL + { lang パラメーター } クエリ文字列

効果: API レスポンスキャッシュで 70% の API コスト削減

24.3 シーン 3:JWT 認証 + Lambda@Edge

クライアント
    ↓ Bearer token 付きリクエスト
CloudFront(Lambda@Edge で JWT 検証)
    ↓(トークン有効)
オリジン
    ↓(トークン無効)
403 Forbidden を即座に返答(オリジンへのラウンドトリップなし)

メリット: 認証遅延 < 100ms

24.4 シーン 4:ライブストリーミング

入力(RTMP)
    ↓
MediaLive(トランスコード)
    ↓
MediaPackage(HLS・DASH パッケージング)
    ↓
CloudFront Distribution
    ↓
視聴者(全世界、低レイテンシー)

キャッシュ設定:

  • マニフェスト(.m3u8):キャッシュなし
  • セグメント(.ts):3600 秒キャッシュ

24.5 シーン 5:有料動画配信

ユーザー(課金確認済み)
    ↓ リクエスト
アプリケーションサーバー
    ↓ Signed URL 生成(期限 1 時間)
ユーザー
    ↓ Signed URL アクセス
CloudFront(署名検証)
    ↓(有効)
ビデオコンテンツ配信

メリット: オリジンアクセスを制御しながら高速配信


導入ロードマップ

ステップ 1:計画フェーズ(1-2 週間)

  • [ ] ユースケースを定義(静的・API・動画等)
  • [ ] オリジンを選定(S3・ALB・API Gateway)
  • [ ] キャッシュ戦略を設計
  • [ ] セキュリティ要件を確認(OAC・WAF・Shield)

ステップ 2:準備フェーズ(1-2 週間)

  • [ ] S3 バケット作成(OAC 用)
  • [ ] ACM 証明書を us-east-1 で発行
  • [ ] Route 53 ホストゾーンを作成
  • [ ] AWS WAF ルールを定義(オプション)

ステップ 3:実装フェーズ(1-2 週間)

  • [ ] CloudFront Distribution を作成
  • [ ] Origin・Behaviors・Policies を設定
  • [ ] SSL/TLS 証明書を紐付け
  • [ ] ロギング(標準・リアルタイム)を有効化

ステップ 4:テストフェーズ(1 週間)

  • [ ] キャッシュヒット率を検証
  • [ ] エラー率を確認
  • [ ] オリジンレイテンシーを測定
  • [ ] セキュリティテスト(WAF・Shield)

ステップ 5:本番運用フェーズ

  • [ ] Traffic を段階的に CloudFront へ移行
  • [ ] CloudWatch アラームを設定
  • [ ] オペレーションガイドを作成
  • [ ] チーム教育を実施

実装チェックリスト

セキュリティチェックリスト

  • [ ] S3 バケット:public access ブロック ✓
  • [ ] S3 バケット:OAC でのみ CloudFront アクセス許可
  • [ ] ACM 証明書:us-east-1 で発行
  • [ ] Viewer Protocol Policy:redirect-to-https
  • [ ] AWS WAF:CloudFront に紐付け
  • [ ] Shield Standard:自動適用確認
  • [ ] Signed URL / Cookie:有料コンテンツに適用

パフォーマンスチェックリスト

  • [ ] キャッシュポリシー:適切に設定
  • [ ] Compression:有効化 ✓
  • [ ] HTTP/2・HTTP/3:サポート確認
  • [ ] Origin Keep-Alive:有効
  • [ ] Regional Edge Cache:活用確認

コスト最適化チェックリスト

  • [ ] キャッシュヒット率:60% 以上が目標
  • [ ] TTL 設計:静的は 1 年、動的は短期
  • [ ] Invalidation:必要最小限(1,000 パス/月以内)
  • [ ] データ転送:無料枠(1 TB/月)活用
  • [ ] Lambda@Edge:使用量を監視

運用チェックリスト

  • [ ] CloudWatch ダッシュボード:作成・監視
  • [ ] ログ収集:S3・Kinesis に設定
  • [ ] アラーム:エラー率・レイテンシー設定
  • [ ] 定期レビュー:月 1 回(キャッシュ率・コスト)
  • [ ] ドキュメント:オペレーションガイド作成

まとめ

CloudFront は 「グローバルコンテンツ配信の決定版」 です。以下の重要なポイントを押さえることで、高速・セキュア・コスト効率的なコンテンツ配信基盤を構築できます。

重要な 5 つのポイント:

  1. S3 + OAC:S3 をプライベート保持しながら、CloudFront を通してセキュアに配信
  2. キャッシュ戦略:TTL・キャッシュキー設計がヒット率とコストの鍵
  3. エッジ処理:Lambda@Edge・CloudFront Functions でオリジンへのラウンドトリップを削減
  4. セキュリティ統合:OAC・WAF・Shield で多層防御
  5. 監視・最適化:CloudWatch メトリクス・ログで継続的な改善

CloudFront を導入することで、グローバルユーザーへの低レイテンシー配信オリジン負荷 70-80% 削減セキュアなコンテンツ保護 を同時に実現できます。


参考文献

AWS 公式

AWS 公式・ベストプラクティス(2026 年版)

IaC・自動化

外部リソース・標準

学習・チュートリアル


最終更新:2026-04-26
バージョン:1.1
対象:CloudFront 完全初心者~実務者
2026 アップデート:HTTP/3 QUIC GA、HTTPS DNS Records対応、エッジコンピューティング統合強化