Amazon CloudFront・AWS Global Accelerator
どちらも世界中にある AWS のエッジロケーション(利用者の近くに置かれた AWS の拠点)を入口にして、遠くの利用者にも速く届けるサービスです。SAA では「キャッシュして配るなら CloudFront、固定 IP や TCP / UDP の高速化なら Global Accelerator」という使い分けと、CloudFront のセキュリティ機能が頻出です。
ひとことで言うと: CloudFront は「近所のコンビニに商品を置いておく」仕組み、Global Accelerator は「近所の入口から本店まで専用の高速道路を通す」仕組みです。
CloudFront は、よく売れる商品(コンテンツ)を近所の店(エッジ)に在庫しておき、本店(オリジン)まで行かずに渡します。Global Accelerator は在庫を持たず、近所の入口で受け付けた客を混雑した一般道(インターネット)ではなく AWS の道で本店へ運びます。
このページで押さえる論点
- CloudFront の仕組み: ディストリビューション・オリジン・キャッシュと TTL
- キャッシュの制御: キャッシュポリシー・無効化・Origin Shield・オリジンフェイルオーバー
- CloudFront のセキュリティ: OAC・署名付き URL / Cookie・地理的制限・HTTPS(ACM)・WAF / Shield
- エッジでの処理: CloudFront Functions と Lambda@Edge
- Global Accelerator の仕組み: 固定エニーキャスト IP・TCP / UDP・高速フェイルオーバー
- CloudFront と Global Accelerator の使い分け(Route 53 との違いを含む)
CloudFront の仕組み: ディストリビューション・オリジン・キャッシュ
Amazon CloudFront は CDN(コンテンツ配信ネットワーク)のサービスです。配信の設定のまとまりをディストリビューションと呼び、作成すると d111111abcdef8.cloudfront.net のようなドメイン名が割り当てられます。独自ドメイン(www.example.com)で使うときは、Route 53 のエイリアスレコードでこのドメイン名に向けます。
コンテンツの本来の置き場所をオリジンと呼びます。S3 バケット、ALB、EC2、API Gateway、さらにオンプレミスの Web サーバーのような AWS 外の HTTP サーバーもオリジンにできます。1 つのディストリビューションに複数のオリジンを登録し、キャッシュ動作(ビヘイビア)で「/images/* は S3 へ、/api/* は ALB へ」のようにパスごとに振り分けられます。
利用者のリクエストは、DNS によって近くのエッジロケーションに届きます。エッジにキャッシュ(コピー)があればそこから即座に返し(キャッシュヒット)、なければオリジンから取ってきて返し、同時にエッジに保存します(キャッシュミス)。キャッシュしてよい期間が TTL(Time To Live)です。キャッシュポリシーを使わない従来の設定では、既定の TTL は 24 時間です。オリジン側で Cache-Control ヘッダーを付けて、ファイルごとに期間を変えることもできます。
キャッシュミスとキャッシュヒット
※簡略化しています: エッジロケーションとオリジンの間にある「リージョン別エッジキャッシュ」(より大きな中間キャッシュ)と、DNS でエッジが選ばれる流れを省いています。
図では省略していますが、エッジロケーションとオリジンの間には、より多くのコンテンツを長く保持するリージョン別エッジキャッシュという中間層があります。エッジでミスしても、ここでヒットすればオリジンまで行かずに済みます。
CloudFront はキャッシュできない動的コンテンツ(ログイン後の画面や API の応答など)にも使えます。この場合もキャッシュはされませんが、利用者は近くのエッジと接続し、そこからオリジンまでは AWS のネットワークを通るため、インターネットを長く通るより速く安定します。また、ディストリビューションは GET・HEAD だけでなく、POST・PUT・DELETE などのリクエストもオリジンへ中継できます(アップロードなど)。
キャッシュの制御: キャッシュポリシー・無効化・Origin Shield・オリジンフェイルオーバー
キャッシュキーとキャッシュポリシー
CloudFront は、URL のパスなどから作るキャッシュキーで「同じコンテンツかどうか」を判断します。キャッシュポリシーで、キャッシュキーにクエリ文字列・ヘッダー・Cookie を含めるかどうかと TTL を決めます。キャッシュキーに含める値を増やすほど、別々のコンテンツとして扱われてヒット率が下がります。ヒット率を上げたいときは、キャッシュキーには本当に必要な値だけを含めます。オリジンに渡したいがキャッシュキーには含めたくない値は、オリジンリクエストポリシーで指定します。
無効化(インバリデーション)
TTL が切れる前にファイルを更新したいときは、無効化でエッジのキャッシュを消します。無効化するパスは 1 か月に 1,000 件まで無料で、それを超えるとパスごとに料金がかかります(アカウント内のすべてのディストリビューションの合計)。/images/* のようなワイルドカードは、多数のファイルが対象でも 1 パスと数えます。頻繁に更新するなら、無効化に頼るより app-v2.js のようにファイル名にバージョンを含める方法も有効です。
Origin Shield
Origin Shield は、リージョン別エッジキャッシュとオリジンの間に追加するキャッシュの層です。世界各地からの同じコンテンツへのリクエストを 1 か所にまとめるので、キャッシュヒット率が上がり、オリジンへのリクエストが減ります。「オリジンの負荷を減らしたい」「複数リージョンからのアクセスでオリジンへの問い合わせが多い」ときの答えになります。
オリジンフェイルオーバー(オリジングループ)
プライマリとセカンダリの 2 つのオリジンでオリジングループを作ると、プライマリが指定した HTTP ステータスコード(500、502、503、504、403、404 など)を返したときや、接続できない・タイムアウトしたときに、CloudFront がセカンダリへ切り替えます。たとえば「別リージョンにレプリケーションした S3 バケットをセカンダリにする」構成です。フェイルオーバーするのは GET・HEAD・OPTIONS(キャッシュ対象に設定した場合)のリクエストだけで、POST や PUT では切り替わりません。
CloudFront のセキュリティ
| 機能 | 何をするか | 選ぶ場面 |
|---|---|---|
| OAC(オリジンアクセスコントロール) | S3 バケットへのアクセスを CloudFront 経由だけに限定する。バケットポリシーで CloudFront のサービスプリンシパルからのアクセスだけを許可する | S3 の URL を直接たたかれないようにしたい。S3 は非公開のまま配信したい |
| 署名付き URL | 有効期限などを付けた URL を持つ人だけが 1 つのファイルを取得できる | 購入者だけがインストーラーをダウンロード。Cookie を使えないクライアント |
| 署名付き Cookie | Cookie を持つ人だけが複数のファイルを取得できる。URL は変えなくてよい | 会員エリアの全ファイル、HLS 形式の動画(多数の小さなファイル) |
| 地理的制限 | 国単位で許可リストかブロックリストを作り、対象外の国からのリクエストに 403(Forbidden)を返す | 配信権のある国だけに提供、特定の国からのアクセスを拒否 |
| HTTPS(ACM 証明書) | 利用者と CloudFront の間を TLS で暗号化する。独自ドメインの証明書は us-east-1(バージニア北部)の ACM で発行(またはインポート)する | 独自ドメインで HTTPS 配信したい |
| AWS WAF | ディストリビューションに Web ACL を関連付け、SQL インジェクションなどの攻撃や特定 IP・レート超過のリクエストをエッジで止める | アプリへの攻撃をオリジンに届く前に防ぎたい |
| AWS Shield | DDoS 攻撃からの保護。CloudFront・Global Accelerator は Shield と統合されている。Shield Standard は追加料金なしで自動的に有効 | DDoS 対策(高度な保護や DDoS 対応チームの支援が必要なら Shield Advanced) |
- OAC と OAI: OAI(オリジンアクセスアイデンティティ)は従来の方式で、AWS は後継の OAC を推奨しています。OAC は SSE-KMS で暗号化した S3 オブジェクトや、PUT・DELETE などの動的なリクエストにも対応し、OAI はこれらに対応していません。
- 署名付き URL と署名付き Cookie を両方使った場合は、署名付き URL の判定が優先されます。
- OAC は S3 をオリジンにするときの仕組みです。ALB をオリジンにする場合は、ALB のセキュリティグループで CloudFront のマネージドプレフィックスリストだけを許可したり、CloudFront が付けるカスタムヘッダーを ALB で確認したりして、CloudFront を迂回する直接アクセスを防ぎます。
- 地理的制限は国単位で、ディストリビューション全体に効きます。国より細かい条件(特定のパスだけ、など)が必要なら AWS WAF の地理的一致ルールを使います。
エッジでの処理: CloudFront Functions と Lambda@Edge
CloudFront では、リクエストやレスポンスをエッジで書き換える小さなプログラムを動かせます。オリジンまで行かずに処理できるので速く、オリジンの負荷も減ります。2 種類あり、処理の重さで使い分けます。
| 項目 | CloudFront Functions | Lambda@Edge |
|---|---|---|
| 言語 | JavaScript | Node.js、Python |
| 動くタイミング | ビューワーリクエスト・ビューワーレスポンス(利用者との間)だけ | ビューワーリクエスト・ビューワーレスポンスに加え、オリジンリクエスト・オリジンレスポンス |
| 実行時間 | サブミリ秒(1 ミリ秒未満)の軽い処理 | 秒単位の処理もできる |
| ネットワーク・リクエスト本文へのアクセス | できない | できる(外部 API の呼び出しなど) |
| 向く処理 | ヘッダーの追加、URL の書き換え・リダイレクト、簡単なトークン検証など大量で軽い処理 | 外部サービスへの問い合わせ、本文を使う処理、オリジンの選択など重い処理 |
試験では「軽い処理を低コストで大量に」なら CloudFront Functions、「ネットワークにアクセスする」「オリジン側のイベントで動かす」なら Lambda@Edge、が判断の目安です。
Global Accelerator の仕組み
AWS Global Accelerator は、アプリケーションの入口として 2 つの固定の IPv4 アドレスを用意するサービスです(デュアルスタックなら IPv6 アドレス 2 つも追加)。この IP アドレスはエニーキャスト(同じ IP アドレスを世界中のエッジロケーションが同時に受け持ち、利用者に近い拠点が応答する方式)で広告されます。利用者のトラフィックは最寄りのエッジから AWS のグローバルネットワークに入り、混雑しやすいインターネットを通る区間が短くなるので、遅延や揺らぎが減ります。
構成要素は、IP アドレスを持つアクセラレーター、ポートとプロトコル(TCP / UDP)を決めるリスナー、リージョンごとのエンドポイントグループ、その中のエンドポイント(ALB、NLB、EC2 インスタンス、Elastic IP アドレス)です。
- TCP と UDP: HTTP に限らず、ゲーム、IoT、音声通話(VoIP)などの TCP / UDP 通信を高速化できます。キャッシュはしません。
- ヘルスチェックと高速フェイルオーバー: 標準アクセラレーターはエンドポイントの状態を自動で確認し、異常なエンドポイントには新しい接続を送りません。入口の IP アドレスは変わらないので、DNS のように利用者側のキャッシュが切れるのを待つ必要がなく、切り替えは数秒で反映されます。
- トラフィックダイヤル: エンドポイントグループ(リージョン)ごとに、向けるトラフィックの割合を 0〜100% で絞れます。リージョン単位の段階的な移行(ブルー / グリーンデプロイ)や、メンテナンス時に 0% にして外す使い方をします。
- エンドポイントの重み: グループ内のエンドポイントごとに 0〜255 の重み(既定 128)で振り分けの比率を決めます。
- 固定 IP の利点: 利用者の企業のファイアウォールに登録する許可リストが 2 つの IP で済み、裏側のリージョンやロードバランサーを入れ替えても変わりません。ALB は IP アドレスが固定ではないため、「ALB を固定 IP で公開したい」は Global Accelerator が答えになります。
このほか、ゲームのマッチングのように特定の EC2 インスタンスへ決め打ちで送りたい場合向けのカスタムルーティングアクセラレーターもあります。こちらはヘルスチェックによるフェイルオーバーを行いません。
CloudFront と Global Accelerator の使い分け
| 項目 | CloudFront | Global Accelerator |
|---|---|---|
| 役割 | CDN。コンテンツをエッジにキャッシュして配る | ネットワークの高速化。キャッシュせず、パケットをエッジから AWS のネットワークでリージョンへ運ぶ |
| プロトコル | HTTP / HTTPS(WebSocket を含む) | TCP / UDP(HTTP 以外も可) |
| 入口 | ドメイン名(IP アドレスは固定ではない) | 2 つの固定のエニーキャスト IP アドレス |
| 主な機能 | キャッシュ、OAC、署名付き URL / Cookie、地理的制限、エッジ関数 | ヘルスチェックによる数秒のリージョン切り替え、トラフィックダイヤル、エンドポイントの重み |
| オリジン / エンドポイント | S3、ALB、EC2、API Gateway、AWS 外の HTTP サーバーなど | ALB、NLB、EC2、Elastic IP アドレス |
| DDoS 対策 | Shield と統合、WAF を関連付け可能 | Shield と統合 |
質問に答えて CloudFront か Global Accelerator かを選ぶ
配信したいアプリケーションを思い浮かべて「はい / いいえ」で答えてください。答えた経路が上から順に表示されます。
※簡略化しています: 両方を組み合わせる構成や、料金の比較は分岐に含めていません。
Route 53 のルーティングとの違いも問われます。Route 53 のレイテンシーやフェイルオーバーのルーティングは DNS の答えを変える方式なので、利用者側に古い答えがキャッシュされている間(TTL の間)は切り替わりません。Global Accelerator は入口の IP アドレスが変わらず、その先の行き先を AWS 側で切り替えるので、DNS のキャッシュの影響を受けません。「DNS のキャッシュに左右されず、すばやくリージョンを切り替えたい」は Global Accelerator です(Route 53 の詳細は Route 53 のページ)。
コストの観点では、CloudFront はエッジでキャッシュから返した分だけオリジンへのリクエストとオリジンからのデータ転送が減るため、オリジンの台数や負荷を抑えられます。
問題文のキーワード → 選ぶべき答え
| 問題文の言い回し | 選ぶべき答えと理由 |
|---|---|
| 「世界中の利用者に静的コンテンツ(画像・動画)を低遅延で配信」 | CloudFront。エッジにキャッシュして近くから返す |
| 「S3 バケットを公開せず、CloudFront 経由でだけ配信」 | OAC+バケットポリシー(OAI は旧方式) |
| 「購入者だけが 1 つのファイルを期限付きでダウンロード」 | 署名付き URL |
| 「会員だけが複数のファイル(動画のセグメントなど)を見られる」「URL を変えたくない」 | 署名付き Cookie |
| 「特定の国からのアクセスを拒否」「配信権のある国だけ」 | CloudFront の地理的制限(国単位。細かい条件は WAF) |
| 「CloudFront で独自ドメインの HTTPS」 | us-east-1 の ACM 証明書 |
| 「オリジンの負荷を減らす」「キャッシュヒット率を上げる」 | TTL を延ばす、キャッシュキーを絞る、Origin Shield |
| 「プライマリのオリジンが 5xx を返したら別のオリジンから配信」 | オリジングループ(オリジンフェイルオーバー) |
| 「エッジでヘッダー追加・URL 書き換えを低コストで大量に」 | CloudFront Functions |
| 「エッジで外部 API を呼ぶ」「オリジンリクエスト時に処理」 | Lambda@Edge |
| 「TCP / UDP(ゲーム・IoT・VoIP)の遅延を減らす」 | Global Accelerator |
| 「固定 IP アドレスで公開」「顧客のファイアウォールに IP を登録」 | Global Accelerator(2 つの固定エニーキャスト IP) |
| 「DNS キャッシュに左右されず、数秒でリージョンをフェイルオーバー」 | Global Accelerator |
| 「リージョンごとのトラフィックの割合を少しずつ変える」 | Global Accelerator のトラフィックダイヤル |
引っかけポイント
- 「Global Accelerator は静的コンテンツをエッジにキャッシュして配信する」→ ✕。Global Accelerator はキャッシュしません。キャッシュは CloudFront です。
- 「CloudFront でゲームの UDP 通信を高速化する」→ ✕。CloudFront は HTTP / HTTPS 向けです。TCP / UDP 全般なら Global Accelerator です。
- 「CloudFront の独自ドメイン用の ACM 証明書は、オリジンと同じリージョン(例: 東京)で発行する」→ ✕。利用者と CloudFront の間の証明書は us-east-1 で発行します。
- 「CloudFront は動的コンテンツには効果がない」→ ✕。キャッシュしなくても、近くのエッジで接続を受けて AWS のネットワークでオリジンへ届けるため速くなります。
- 「S3 を CloudFront 経由だけに限定するため、バケットをパブリックにして OAI を使う」→ ✕。バケットは非公開のまま、OAC とバケットポリシーで CloudFront だけに許可します。OAI は旧方式で SSE-KMS に対応しません。
- 「Route 53 のフェイルオーバールーティングなら、利用者は数秒で切り替わる」→ ✕。利用者側に DNS の答えがキャッシュされている間は切り替わりません。IP を変えずに切り替えるなら Global Accelerator です。
- 「オリジングループなら、POST リクエストが失敗してもセカンダリへ切り替わる」→ ✕。フェイルオーバーするのは GET・HEAD・OPTIONS だけです。
まとめ: SAA 試験で押さえるポイント
- HTTP / HTTPS のコンテンツをエッジにキャッシュして速く配る → CloudFront(動的コンテンツも高速化できる)
- キャッシュの期間は TTL。更新をすぐ反映したいなら無効化(月 1,000 パスまで無料、ワイルドカードは 1 パス)かファイル名のバージョン付け
- オリジンの負荷を減らす → TTL を延ばす・キャッシュキーを絞る・Origin Shield。オリジンの障害に備える → オリジングループ
- S3 を CloudFront 経由だけに → OAC。1 ファイル → 署名付き URL、複数ファイル → 署名付き Cookie、国単位の制限 → 地理的制限
- 独自ドメインの HTTPS 証明書は us-east-1 の ACM。攻撃対策は WAF、DDoS は Shield(Standard は自動・無料)
- エッジの軽い処理 → CloudFront Functions、ネットワークやオリジン側イベントを使う処理 → Lambda@Edge
- TCP / UDP の高速化、固定 IP、DNS キャッシュに左右されない数秒のフェイルオーバー → Global Accelerator
- Global Accelerator の割合調整は、リージョン単位 = トラフィックダイヤル(0〜100%)、エンドポイント単位 = 重み(0〜255)
確認問題
参考リンク
AWS 公式ドキュメント(外部サイトが開きます)。本文の数値はこれらで確認しています。
- AWS Certified Solutions Architect - Associate(SAA-C03)試験ガイド
- コンテンツがキャッシュに保持される期間(有効期限)の管理(既定の TTL 24 時間)
- ファイル無効化の料金(月 1,000 パス無料、ワイルドカードは 1 パス)
- Amazon CloudFront Origin Shield の使用
- CloudFront オリジンフェイルオーバーによる高可用性の最適化(対象のステータスコードとメソッド)
- Amazon S3 オリジンへのアクセスを制限する(OAC と OAI)
- 署名付き URL と署名付き Cookie の選択
- コンテンツの地理的ディストリビューションの制限(403 を返す)
- CloudFront で SSL/TLS 証明書を使用するための要件(us-east-1)
- CloudFront Functions と Lambda@Edge の違い
- AWS Global Accelerator の仕組み(固定 IP 2 つ、トラフィックダイヤル 0〜100、重み 0〜255)
- AWS Global Accelerator のよくある質問(CloudFront との違い、Shield、DNS キャッシュ)