変更要約: ANS-C01 第3章を深掘り(トラフィックフロー/ヘルスチェック種別・エッジ関数2種/キャッシュキー・GA内部構成/ダイヤル+比較表・シナリオ・FAQ・ひっかけ、図ja化)
3.2CloudFront によるコンテンツ配信
エッジで速く・安全に——CloudFront、キャッシュ、オリジン(S3/ALB)、OAC によるオリジン保護、エッジでの TLS/WAF——を理解します。世界中のエッジから低遅延に配信します。
CloudFront は世界中の エッジロケーションにコンテンツをキャッシュする CDN です。ユーザーは最寄りのエッジから受け取り、低遅延でアクセスできます。
3.2.1キャッシュとオリジン保護
- キャッシュ:エッジにキャッシュヒットならオリジンに行かず即応答。ミス時のみオリジンから取得。
- オリジン:S3(静的)や ALB/API(動的・カスタムオリジン)を指定できる。
- OAC(Origin Access Control):S3 を非公開にしつつ CloudFront 経由のみアクセスを許可する。
- エッジでの保護:TLS 終端・WAF・エッジ関数をエッジで適用し、オリジン負荷と攻撃面を減らす。
「静的コンテンツの低遅延配信=CloudFront」「S3 を非公開にしつつ CDN 配信=OAC」「キャッシュヒットはオリジンに行かない」「エッジで TLS/WAF」 は ANS-C01 で頻出です。S3 を公開せず配信したいときは OAC(旧 OAI)を使います。
CloudFront は HTTP/HTTPS のコンテンツ配信に特化します。任意の TCP/UDP や静的 IP が必要な非 HTTP ワークロードは Global Accelerator を検討します(次節)。
ANS-C01 ではキャッシュの効きを左右する「キャッシュキー」と、エッジでの処理を担う 2 種類の関数が頻出です。キャッシュキーはデフォルトでパスのみですが、キャッシュポリシーで特定のヘッダー・クエリ文字列・Cookie を含めて分割できます。含めすぎるとキャッシュヒット率が下がるため、オリジンへ渡したいだけの値はオリジンリクエストポリシーで転送し、キャッシュキーには含めないのが定石です。エッジでコードを動かす手段は 2 つあり、CloudFront Functions は超軽量・サブミリ秒・ビューワーリクエスト/レスポンスのみで、ヘッダー操作やリダイレクト・URL 書き換えに使います。Lambda@Edge はより重い処理が可能で、オリジンリクエスト/レスポンスにもフックでき、外部呼び出しや本格的なロジックを実行できます。オリジン保護では、S3 をオリジンにする場合は OAC で非公開化し、カスタムオリジン(ALB 等)の場合はカスタムヘッダーに秘密値を載せて WAF で検証し、CloudFront 以外からの直接アクセスを弾く構成が定番です。配信元が複数ある場合はオリジングループでプライマリ/セカンダリのオリジンフェイルオーバーも設定できます。
| 項目 | CloudFront Functions | Lambda@Edge |
|---|---|---|
| 実行できる箇所 | ビューワーリクエスト/レスポンスのみ | ビューワー+オリジンの両方 |
| レイテンシー/規模 | サブミリ秒・超高頻度向き | ミリ秒〜・重い処理向き |
| 外部呼び出し | 不可(自己完結) | 可能(ネットワーク/SDK) |
| 代表用途 | ヘッダー操作・リダイレクト・URL 書換 | 認証・A/B・動的オリジン選択 |
シナリオ:S3 の静的サイトを配信しつつ、特定パスだけ別リージョンの ALB へ動的に振り分け、画像のサムネ URL をエッジで書き換えたい。→ CloudFront に S3(OAC)と ALB(カスタムオリジン)の 2 オリジンとビヘイビアを設定し、URL 書き換えのような軽量処理は CloudFront Functions、リクエスト内容に応じたオリジン選択や認証など重い処理は Lambda@Edge に分担させる。
FAQ:Q. キャッシュヒット率が上がらない? A. キャッシュキーに不要なヘッダー/クエリ/Cookie を含めていないか確認。オリジンに渡すだけならオリジンリクエストポリシーで転送し、キャッシュキーには入れない。Q. OAI と OAC の違いは? A. OAC が現行の推奨で、SSE-KMS や全リージョン・全 HTTP メソッドに対応する。新規は OAC を使う。
ひっかけ:「Lambda@Edge を使えば必ず速くなる」は誤り。Lambda@Edge は処理を伴うため CloudFront Functions より重く、単純なヘッダー操作やリダイレクトには過剰。軽量・高頻度は CloudFront Functions、オリジンイベントや外部呼び出しが要る場合のみ Lambda@Edge を選ぶ。
3.2.2この節のまとめ
- 配信=エッジキャッシュ、保護=OAC+TLS/WAF
- オリジン=S3(静的)/ALB・API(動的)
進捗の記録にはログインが必要です。
理解度チェック
(軽い確認用)Q1. 静的な画像/動画を世界中のユーザーへ低遅延で配信し、オリジン負荷を下げたい。何を使いますか?
Q2. S3 バケットを一般公開せず、CloudFront 経由のみでアクセスさせたい。何を使いますか?
Q3. CloudFront でキャッシュヒットした場合、リクエストはどう処理されますか?

