CDN とは?

- CDN(Content Delivery Network) は、地理的・物理的に離れたユーザーへコンテンツをより速く届けるためのシステムです。
- ユーザーが遠隔地の Origin Server から コンテンツ(Web オブジェクト、動画、音楽、画像、文書など) をダウンロードすると、近くのサーバーから受け取るより時間がかかります。
- そこでユーザーの近くにある Cache Server にコンテンツを保存し、リクエスト時には Cache Server が応答します。
CDN のメリット
- Web サイトの読み込み速度改善:オリジンサーバーのトラフィック負荷とコストを削減できます。
- 回線コストの削減:サーバー費用が下がります。
- 配信の安定性:ISP に直結してデータを届けるため、高速にコンテンツを提供できます。
- セキュリティの向上:大規模な分散サーバー群で攻撃トラフィックを緩和できます。
CDN の動作原理
- 最初のリクエストはサーバーからコンテンツを取得してユーザーへ送ると同時に、CDN キャッシュ装置に保存します。
- 2 回目以降のリクエストは、CDN 事業者が指定する有効期限まで、キャッシュ装置のコンテンツを配信します。
- よく使われるページのみキャッシュされ、呼び出しがなければ定期的に削除されます。
- コンテンツが利用不可・古い場合、CDN はサーバーへのプロキシとして動作し、今後のリクエストに応答できるよう新しいコンテンツを保存します。
CloudFront とは?

CloudFront は AWS が提供する CDN サービス です。キャッシュを利用してユーザーへより速い転送速度を提供することが目的です。世界中に Edge Server を配置し、ユーザーに最も近い Edge Server から高速にデータを届けます。
CloudFront の構成
- Origin Server
- 元データを持つサーバーです。
- AWS では S3 や EC2 を指します。
- Edge Server
- AWS が実際に世界中で運用しているサーバーです。
- リクエストされたデータへ素早く応答するためのキャッシュ機能を提供します。
CloudFront の処理の流れ
- クライアントから Edge Server へリクエストが発生します。
- Edge Server はそのデータがキャッシュされているか確認します。
- 近くの Edge Server にキャッシュがあれば、そのままデータを返します。
- 適切なキャッシュがなければ、リクエストは Origin Server へ転送されます。
- Origin Server からデータを取得し、Edge Server にキャッシュを作成してからクライアントへ応答します。
CloudFront が提供する CDN コンテンツ
- Download Distribution:HTTP プロトコルでダウンロードできる一般的な画像や静的ファイルを配信します。
- Streaming Distribution:HTTP プログレッシブダウンロードや RTSP(Real Time Streaming Protocol)に対応した動画コンテンツを配信します。
Edge Server キャッシュの特徴
- 基本的に一度リクエストされたものは Edge Server にキャッシュされた状態で保存されます。
- Edge Server のデフォルト TTL は 24 時間で、設定により変更可能です(TTL 変更が Edge Server に反映されるまで 1 時間ほどかかります)。
- この反映遅延のため、全体の TTL を変更するのではなく、個別データを invalidation API(特定ファイルをキャッシュから削除する機能)で削除できます。
- Invalidation API は同時に最大 3 リクエストまで発行でき、各リクエストで最大 1,000 件まで指定できます。
- Invalidation API が Edge Node に反映されるまで 5〜10 分ほどかかります。
CloudFront の使い方

CloudFront のメイン画面です。「ディストリビューションを作成」を押してください。

上の画像のとおりに設定します。それ以外はデフォルトのまま進めます。

正しく作成されたことが確認できます。そのドメインをそのままブラウザに貼り付けます。

私は S3 と連携したので、S3 の Web サービスが動くことを確認できます。では CloudFront がきちんと機能しているかテストしましょう。Postman で速度を測定します。S3 のドメインと CloudFront のドメインで実施します。

これが S3 の速度です。436ms〜200ms 程度でした。

これが CloudFront です。歴然とした速度差が見えます。15ms〜9ms まで確認でき、CloudFront が正常に動作していることが分かります。
参考
原文(韓国語): tistory — 2023-01-10 公開、当ブログへ移行。この翻訳は AI の協力で作成されました。