はじめに
「CloudFront を使うと速くなる」と聞いて導入しているけれど、
なぜ速くなるのか を自分の言葉で説明できるでしょうか?
この記事は、CloudFront を「なんとなく速いサービス」として使っている
AWS 初心者を対象に、リバースプロキシ・CDN・エッジロケーション という
3つの観点から、CloudFront の仕組みを整理します。
読み終えた時点で、リバースプロキシ・CDN・エッジロケーションの3つの用語を使って、
「なぜCloudFrontは速いのか」を自分の言葉で説明できるようになることがゴールです。
第1章 リバースプロキシとは
1-1 定義
webサーバー側に配置され、クライアントからのリクエストを受けて、必要に応じてwebサーバーへ転送する中継サーバー
* 説明の都合上、リバースプロキシをキャッシュサーバーとして解説しますが、それ以外の機能を持つものもあります。(ロードバランサーやTLS終端など)
1-2 メリット
- webサーバーへの通信・処理の削減
- webサーバーの運用負荷軽減
クライアントA, B, Cが同じコンテンツをwebサーバーにリクエストする場面を考えます。
**クライアントBが初回、A・Cはキャッシュが既にある状態(2回目以降)**とします。
図の通り、初回のBだけがwebサーバーまで取りに行き、
A・Cはリバースプロキシのキャッシュから即返却されます。
結果、webサーバーが実際に処理するリクエストは3回中1回だけになります。
第2章 CDNとは
2-1 定義
ざっくり言うと、第1章のリバースプロキシを世界中に分散配置し、
クライアントの最寄りからコンテンツを返す仕組みです。
下の図のように、各クライアントは「自分の最寄り」のリバースプロキシと通信します。
2-2 DNSによる最寄り判定
どのリバースプロキシがクライアントの最寄りなのかの判定を担うのがDNSです。

*DNSが「最寄り」を判定する際は、リクエスト元のIPアドレスと、接続先を選ぶためのネットワーク情報をもとに、応答が最も速い(ネットワーク的に近い)サーバーを返しています。
第3章 CloudFrontとは
3-1 定義
第2章のCDNを、AWSがサービスとして提供しているのがCloudFrontです。
3-2 エッジロケーション
分散配置されたリバースプロキシ1つ1つのことを指し、CloudFrontがコンテンツのキャッシュを保持しておくためのサーバーです。
第4章 クライアントがCloudFrontを経由してコンテンツを取得するまで
ここまでの説明をもとに、実際のリクエストでどう連携するかを通しで見てみます。
- クライアントがDNSに、
example.comに対応するIPアドレスを問い合わせる - DNSがリクエスト元のIPアドレスをもとに最寄りのエッジロケーションを判定し、そのIPアドレスをクライアントに返す
- クライアントが、受け取ったIPアドレス宛(= 最寄りのエッジロケーション)にコンテンツをリクエストする
- エッジロケーションがキャッシュを確認する
- キャッシュヒット時: そのままクライアントに返す
- キャッシュミス時: オリジンにコンテンツを取りに行き、キャッシュに保存してからクライアントに返す
第5章 なぜCloudFrontは速いのか
CloudFront は、リバースプロキシを世界中に分散配置したCDNを、
AWS がサービスとして提供するものでした。
そして、分散配置されたリバースプロキシ1つ1つがエッジロケーションです。
つまり、CloudFront が速い理由は、次の2つです。
- DNS がクライアントから最寄りのエッジロケーションを返す → クライアントとサーバーがネットワーク的に近くなる(通信が速くなる)
- エッジロケーションがキャッシュを返してくれる → 元のサーバー(オリジン)まで取りに行く回数が減る




