AWS テクニカルトレーナーと学ぶ Amazon CloudFront
~ エッジロケーションを使った通信の仕組み
Author : 杉本 圭太
こんにちは ! テクニカルトレーナーの杉本圭太です !
最近読んで面白かった漫画は「Artiste (アルティスト)」です。
AWS を学習していて「Amazon CloudFront はコンテンツ配信の最適化や高速化をするサービスである」ということは知っているけれど、「どのような通信経路になるのか」や「なぜ近くのエッジロケーションへアクセスできるのか」は理解できていないなと感じる方はいませんか ?
というのも、トレーニングを受講していただいた方から「Amazon CloudFront の概要だけは知っていたけど、具体的な動作まで理解できた !」と言っていただくことがあります。そこで他にも多くの方に Amazon CloudFront の学習や利用に役立てていただけるよう、「仕組み」に焦点を当てた解説記事を書いてみました。それでは私が自作した図を交えながら順を追って説明していきます !
まずは結論だけを知りたいという方向けに、今回の記事でお伝えしたいことをまとめた図はこちらです。
これだけ見てもピンとこない方は、安心してください。これからこの図を理解できるようになりますよ 👍
まずは Amazon CloudFront を知る上で欠かせないエッジロケーションの概要や、Amazon CloudFront を使用するメリットをおさらいした上で「仕組み」について解説をしていきます。そのため基本は押さえているよという方は、3. CloudFront ディストリビューションを使用した通信の仕組み から読んでいただければ OK です。
また「キャッシュ」や「DNS の名前解決」の概要は事前知識として必要になるので、気になる方はこちらもご確認ください !
1. エッジロケーションとは
AWS グローバルインフラストラクチャ の中には「エッジロケーション (もしくは Point of Presence (PoP) とも呼ばれる)」という、世界中で地理的に分散して配置されたデータセンターがあります。Amazon CloudFront はエンドユーザーに低レイテンシーでコンテンツを配信するために、このエッジロケーションや、後ほど説明するリージョナルエッジキャッシュを使用します。
Amazon CloudFront のエッジロケーション
Amazon CloudFront のエッジロケーションの数や場所の最新情報は Amazon CloudFront の特徴 ページに記載されており、2023 年 10 月時点では 100 以上の都市に 550 以上あります。(2019 年 10 月には 200 に到達、2022 年 7 月には 400 に到達したと発表されています !)
エッジロケーションを使用してコンテンツのキャッシュなどを行い配信を最適化するサービスは「コンテンツ配信ネットワーク (CDN)」とも呼ばれます。つまり「Amazon CloudFront は AWS が提供する CDN サービス」と言えます。
余談: AWS Global Accelerator のエッジロケーション
AWS Global Accelerator というサービスもエッジロケーションを使用しますが、現時点では使用するエッジロケーションの数などは Amazon CloudFront のものと異なります。こちらの最新情報は AWS Global Accelerator の特徴 ページに記載されています。
2. Amazon CloudFront があるとき〜 ! 😋 無いとき・・・😣
まずは Amazon CloudFront の役割やメリットを、このサービスがある場合とそうでない場合を比べて確認してみましょう。
みなさんは「HTTP/S で誰からでもアクセスできる Web サービスを、AWS のとあるリージョンで提供している」と想定してください。例えば Application Load Balancer や Amazon S3 のバケットなどを公開している状態です。
Amazon CloudFront が無いとき・・・😣
みなさんの提供する Web サービスへ直接ユーザーにアクセスしてもらう場合の通信経路を整理しましょう。実際にはもっと複雑ですが、説明したい部分を押さえた概略図を描いてみました。
この構成のポイントはこちらです φ(•ᴗ•๑)
- クライアント端末から Web サービスまでの通信経路は基本的にインターネットを使用する
- 全ユーザーに対して同じ内容で良い画像や動画などの静的ファイルのレスポンスを、毎回 Web サービスが処理する
よくある構成なので当たり前のように感じるかもしれませんが、通信経路に使用している「インターネット」の特徴を確認しておきましょう。
インターネットとは 複数のインターネットサービスプロバイダで構成されたネットワーク です。通信に使用する経路が常に同一であることや、性能、可用性は全体では保証されていません。そもそもネットワークは通信する距離が長くなるほど通信にかかる時間も増加します。それに加えて経由するネットワークが増えることで、この不規則さの影響を受けやすくなるということです。つまりユーザーの通信でインターネットを使用する距離が長くなるほど、速度や安定性の懸念が大きくなりやすいのです。
もしこれが世界中のユーザーに提供するような Web サービスだとどうでしょうか ? 通信速度や安定性に不満を持つユーザーが増えてしまうかもしれません。多くのユーザーから画像や動画取得リクエストが Web サービスに送られることで、サーバーの処理能力や負荷も気にすることが増えていきます。
そんな時にあると嬉しいのが Amazon CloudFront です !
Amazon CloudFront があるとき〜 ! 😋
Amazon CloudFront では、Web サービスを「オリジン」として設定することで、ユーザーは近いエッジロケーションを経由して Web サービスへアクセスできるようになります。こちらも概略図を描いてみました。
この構成のポイントはこちらです φ(•ᴗ•๑)
- エッジロケーションから AWS リージョンまでの通信は「AWS ネットワークバックボーン」を使用する
- インターネットを使用した経路はユーザーから近くのエッジロケーションまで
- エッジロケーションに画像や動画などの静的コンテンツをキャッシュすることで、オリジンの負荷軽減や多くのユーザーへ効率の良い配信ができる
図 6
この図に記載されている AWS ネットワークバックボーンは、完全冗長の複数の 100 GbE 並列ファイバーで構成されているため、高いパフォーマンスの通信を実現しやすくなります。例えるならインターネットが「一般道を使って渋滞や工事中の道を考慮しながら目的地まで到達する」のに対して、AWS ネットワークバックボーンは「道幅も広く複数の車線があり、AWS 利用者のみに用意された高速道路で目的地まで到達する」といったところでしょうか ٩(๑・∀・)۶
このようにエッジロケーションと AWS リージョン間の通信は AWS ネットワークバックボーンを経由することで、ユーザーがインターネットを使用する距離は「世界中に多く存在する中から近くのエッジロケーションまで」で済みます。ユーザーとサーバーの距離が遠くても、通信の性能が不安定な部分を減らせるので嬉しいですね !
さらに Amazon CloudFront のエッジロケーションを使用するメリットはこれだけではありません !
エッジロケーションには画像や動画などの静的ファイルをキャッシュとして保存できる設定があります。ショッピングサイトの商品画像や動画配信サイトの動画など、ユーザーがアクセスしたエッジロケーションにコンテンツのキャッシュがあれば、オリジンにアクセスすることなくコンテンツの取得をより高速にできます !
キャッシュを活用できればユーザーが嬉しいだけではなく、オリジンの負荷削減につながるのでサービス提供者にも嬉しさがあります !
キャッシュの仕組みをもっと知りたい方は Amazon CloudFront ユーザーガイドの キャッシュの最適化と可用性 を読んでみてください。
1 つの CloudFront ディストリビューションには複数のオリジン紐付けができるので、パスによって静的コンテンツと動的コンテンツのオリジンを振り分け、それぞれに異なるキャッシュポリシーを設定する構成も取れます。
余談: Amazon CloudFront のリージョナルエッジキャッシュによるパフォーマンスの向上
さらに厳密に言うと Amazon CloudFront でキャッシュを利用する場合、エッジロケーションとオリジンの間にはリージョナルエッジキャッシュ (リージョン別エッジキャッシュ) という、より多くの容量を確保できるロケーションが連携されます。個別のエッジロケーションではしばらくアクセスがないコンテンツは、キャッシュ保持期限内でも容量の問題で削除されてしまうことがあります。しかしリージョナルエッジキャッシュにより、より多くのコンテンツをキャッシュで保持できるため全体的なパフォーマンスが向上します。詳細は こちらのドキュメント をご確認ください。
関係性だけど言うと、エッジロケーションがチェーン店などの地域ごとにある「店舗」で、リージョナルエッジキャッシュは特定のエリアのいくつかの店舗を取りまとめる「エリア統括」に似ているかもしれません ٩(๑・∀・)۶
それではいよいよ次からがこの記事の本題です。世界中のエッジロケーションを使う場合、ユーザーからオリジンへの通信経路がどうなっているのかをもう少し詳しく理解していきましょう !
3. CloudFront ディストリビューションを使用した通信の仕組み
Amazon CloudFront の概要や特徴を聞いた方は、こんな疑問を感じませんでしたか ?
- どうやってエッジロケーションを経由して Web サービスへアクセスさせられるのだろう ? 🤔
- そもそもなぜユーザーは近くのエッジロケーションに接続できるのだろう ? 🤔
この謎を解くポイントは「CloudFront ディストリビューションのドメイン名」と、「そのドメイン名の名前解決で取得できる IP アドレス」です。
CloudFront ディストリビューションのドメイン名
Amazon CloudFront では、Web サービスのエンドポイント (例: web.example.com) を「オリジン」に設定した「CloudFront ディストリビューション」というリソースを作成すると、「xxx.cloudfront.net」のようなドメイン名が払い出されます。
Web サービスのドメイン名を「xxx.cloudfront.net」で公開してユーザーにアクセスしてもらうことで、ユーザーからのリクエストが近くのエッジロケーションに送られ、エッジロケーションがオリジンへリクエストを転送してくれます。つまりユーザーは Web サービスへアクセスするために、「web.example.com」のエンドポイントは知らなくても良いのです。
ではここで最大の疑問です。なぜユーザーは数あるエッジロケーションの中から、近くの最適なエッジロケーションへアクセスできるのでしょうか ?
CloudFront ディストリビューションのドメイン名の名前解決
これは CloudFront ディストリビューションのドメイン名に仕掛けがあります。このドメイン名を DNS で名前解決すると、ネームサーバーはクライアント端末から通信に最適な (通常はレイテンシーを考慮した最寄りの) エッジロケーションの IP アドレスを返してくれます。なのでユーザーには最寄りのエッジロケーションを意識させる必要がないのです !
今回はわかりやすさのために「xxx.cloudfront.net」をそのまま使いましたが、CloudFront ディストリビューションには 代替ドメイン名 (CNAME) を設定 できます。この機能を使えば、ユーザーには自社で保持しているドメイン名 (例: mycompany.example.com) でエッジロケーションへアクセスさせられます。
このような仕組みになっているため、みなさんはオリジンである Web サービスの設定を大きく変更しなくても Amazon CloudFront とエッジロケーションを使用して通信の最適化ができるこということですね !
余談: AWS Global Accelerator のエッジロケーションへの接続方法
AWS Global Accelerator のエッジロケーションへの接続は、今回紹介した Amazon CloudFront の仕組みとは異なります。AWS Global Accelerator では エニーキャストアドレス を用いて同じ IP アドレスを複数のエッジロケーションに割り当てており、世界中のユーザーが同じ IP アドレスで通信しても、それぞれのユーザーに近いエッジロケーションへアクセスできるようになっています。
4. Amazon CloudFront を使いこなすための機能はまだまだある
今回は Amazon CloudFront の主要な機能の一部をお伝えしましたが、紹介しきれなかった便利な機能が多くあります。
- CloudFront Origin Shield による負荷軽減
- 高可用性が必要な場合のオリジンフェイルオーバー
- AmazonCloudFront や AWS WAF などを組み合わせた DDoS 緩和などの攻撃対策
- CloudFront Functions や Lambda@Edge を使用したエッジでのコード実行
もちろんこれ以外にもまだまだありますが、Amazon CloudFront に興味を持った方や今後もっと使いこなしたいと考えている方はこれらも確認してみてください !
5. おわりに
今回は Amazon CloudFront のエッジロケーションを使用した通信が「CloudFront ディストリビューションのドメイン名」と「その名前解決で得られる IP アドレス」によって、最適なエッジロケーションを使用できることについて順を追って学びました。
このようにテクニカルトレーナーは、自学だけではつまずきやすい部分などを含め、みなさんにより AWS を理解してもらいやすくなる工夫を日々行いながら クラスルームトレーニング を提供しております ! 質問もリアルタイムでできるため分からない部分はとことんお付き合いしますし、ほとんどのコースには演習の時間も多くあるため学んだ内容を AWS 環境で実践できます !
AWS のトレーニングについてもっと知りたい方は、以下の連載記事も参考にどうぞ。
これまで自分で勉強してきたけど AWS を体系的に学ぶことでもっと詳しくなって業務で活用したい ! という方はぜひ AWS のトレーニングを受講してみてください !
筆者プロフィール
杉本 圭太
アマゾン ウェブ サービス ジャパン合同会社
トレーニングサービス本部 テクニカルトレーナー
新しいことを知るのが好きなので、多くの人に「AWS を知るのは面白い ! もっと学んでみよう ! 活用しよう !」と思っていただけるよう工夫しながらテクニカルトレーナーをしています。
最近は面白い漫画が増えすぎていて、時間が足りなくて困っています。
AWS を無料でお試しいただけます