目次
- 初心者から実務者向けの包括的解説
- 概要
- CloudFront が解決する課題
- 主な特徴
- アーキテクチャ
- Distribution(ディストリビューション)
- Edge Location と地理的構造
- オリジン(Origin)設定
- ビヘイビア(Behavior)
- キャッシング戦略
- SSL/TLS とセキュリティ
- CloudFront Functions
- Lambda@Edge
- 主要ユースケース
- オリジン保護
- ロギング・モニタリング
- 動画配信(HLS / DASH)
- CloudFront KeyValueStore
- 他の類似ツールとの比較
- クライアント・エコシステム
- ベストプラクティス
- トラブルシューティング
- 2025-2026 最新動向
- 学習リソース
- 実装例・活用シーン
- 導入ロードマップ
- 実装チェックリスト
- まとめ
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.”
複数のグローバルエッジロケーションを活用し、コンテンツをキャッシュ・配信・保護・プログラム制御します。
目次
- 概要
- CloudFront が解決する課題
- 主な特徴
- アーキテクチャ
- Distribution(ディストリビューション)
- Edge Location と地理的構造
- オリジン(Origin)設定
- ビヘイビア(Behavior)
- キャッシング戦略
- SSL/TLS とセキュリティ
- CloudFront Functions
- Lambda@Edge
- 主要ユースケース
- オリジン保護
- ロギング・モニタリング
- 動画配信(HLS / DASH)
- CloudFront KeyValueStore
- 他の類似ツールとの比較
- クライアント・エコシステム
- ベストプラクティス
- トラブルシューティング
- 2025-2026 最新動向
- 学習リソース
- 実装例・活用シーン
- 導入ロードマップ
- 実装チェックリスト
- まとめ
- 参考文献
概要
初心者向けメモ: 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 等 |
キャッシュヒット率の流れ:
- ユーザー → Edge Location(ヒット率 60-80% が目標)
- Edge Miss → Regional Edge Cache(ヒット率 70-90%)
- 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 オリジン設定の流れ
- CloudFront で「S3 オリジン」を追加
- OAC を新規作成(CloudFront が自動生成)
- 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・画像)、不変オブジェクト |
キャッシュ検証の優先順:
- オリジンが Cache-Control: max-age=N を返す → その値を使用
- オリジンが
Expiresを返す → その値を使用 - オリジンが何も返さない → 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 で一貫性維持
13.10 Cookie ベースコンテンツ配信
Signed Cookie を発行
↓
ユーザーが複数オブジェクトにアクセス
↓
CloudFront が Cookie を検証
↓
有効なら配信(有料動画・プレミアムコンテンツ)
オリジン保護
14.1 OAC(Origin Access Control)
S3 バケット
├── バケットポリシー:CloudFront のみを許可
└── パブリックアクセス:ブロック
CloudFront が OAC で署名付きリクエスト送信
↓
S3 が署名を検証 → OAC の OID なら許可
↓
一般ユーザーは S3 直アクセス不可
設定方法:
- CloudFront Distribution → Origin → “Create OAC”
- S3 バケット → Permissions → Bucket Policy に CloudFront OAC を追加
- 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=...
14.3 Signed Cookie
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 キャッシュ戦略
✅ 推奨:
-
不変オブジェクト = 長期キャッシュ
- JS・CSS(ハッシュ含むファイル名):1 年
- 画像:1 ヶ月~1 年
- フォント:1 年
-
動的コンテンツ = 短期キャッシュまたはなし
- HTML:1 日~1 時間
- API レスポンス:5 分~1 時間
- ユーザー固有データ:キャッシュなし
-
キャッシュキー最適化
- 不要なクエリ文字列・Cookie・ヘッダーを除外
- 言語・地域・デバイスなど区別が必要な要素のみ含める
❌ アンチパターン:
- すべてのキャッシュ TTL を 0 に設定 → オリジン過負荷
- クエリ文字列をすべてキャッシュキーに含める → キャッシュヒット率 0%
- Cache-Control: public を信用してカスタマイズなし → 意図しないキャッシュ
20.2 セキュリティベストプラクティス
✅ 推奨:
-
S3 + OAC で非公開保持
S3 → Block public access ✓ S3 → Bucket Policy で CloudFront OAC のみ許可 -
HTTPS のみ
Viewer Protocol Policy: redirect-to-https -
ACM 証明書 in us-east-1
CloudFront が認識できる唯一のリージョン -
WAF + Shield を有効化
Shield Standard: 無料(自動) Shield Advanced: 大規模 DDoS 対策(有償) WAF: SQL インジェクション・XSS ブロック -
Signed URL / Signed Cookie
有料コンテンツ・認証必須は署名で保護
❌ アンチパターン:
- S3 をパブリック公開 → セキュリティリスク
- HTTP を許可 → MITM 攻撃リスク
- ACM 証明書を us-east-1 以外で作成 → CloudFront 無効
20.3 パフォーマンスベストプラクティス
✅ 推奨:
-
Compression 有効化
Behavior → Compress ✓ (Gzip・Brotli) -
HTTP/2・HTTP/3 対応
CloudFront は自動的に対応(追加設定不要) -
Regional Edge Cache を活用
キャッシュヒット率が低い場合、Regional Edge Cache の 統計的キャッシュ効果を活用(自動) -
Origin との Keep-Alive
オリジンプロトコル:HTTPS Keep-Alive Timeout:高め(5 秒)
20.4 コスト最適化
✅ 推奨:
-
無料枠の活用
毎月 1 TB のデータ転送 + 10M リクエスト(12 ヶ月間) 小規模プロジェクトなら無料で運用可能 -
クエリ文字列・Cookie の最小化
キャッシュキーに含める要素が少ないほど キャッシュヒット率向上 → 転送量削減 -
Invalidation は必要最小限
1-1,000 パス/月:無料 1,001 パス以降:課金(0.005 USD / パス) 大量無効化は避け、キャッシュ TTL で対応 -
オリジン負荷削減
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 違反でエラー
対策:
- オリジン(S3・ALB)が
Access-Control-Allow-*ヘッダーを返すよう設定 - 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 つのポイント:
- S3 + OAC:S3 をプライベート保持しながら、CloudFront を通してセキュアに配信
- キャッシュ戦略:TTL・キャッシュキー設計がヒット率とコストの鍵
- エッジ処理:Lambda@Edge・CloudFront Functions でオリジンへのラウンドトリップを削減
- セキュリティ統合:OAC・WAF・Shield で多層防御
- 監視・最適化:CloudWatch メトリクス・ログで継続的な改善
CloudFront を導入することで、グローバルユーザーへの低レイテンシー配信、オリジン負荷 70-80% 削減、セキュアなコンテンツ保護 を同時に実現できます。
参考文献
AWS 公式
AWS 公式・ベストプラクティス(2026 年版)
- AWS Well-Architected Framework: Content Delivery
- CloudFront パフォーマンス最適化ガイド
- CloudFront セキュリティガイド
- HTTP/3 QUIC Support for CloudFront - 2026 年最適化
- HTTPS DNS Records for HTTP/3
IaC・自動化
外部リソース・標準
- QUIC Protocol RFC 9000
- HTTP/3 Specification RFC 9110
- Cloudflare Workers Documentation
- Fastly VCL Documentation
- NGINX HTTP/3 Module
- MDN Web Docs - HTTP
学習・チュートリアル
最終更新:2026-04-26
バージョン:1.1
対象:CloudFront 完全初心者~実務者
2026 アップデート:HTTP/3 QUIC GA、HTTPS DNS Records対応、エッジコンピューティング統合強化