CloudFront がコンテンツを配信する方法
初期セットアップを行った後、CloudFront は、ウェブサイトまたはアプリケーションと連携して動作し、コンテンツの配信を高速化します。このセクションでは、ビューワーがコンテンツをリクエストしたときに CloudFront がコンテンツを配信する方法について説明します。
CloudFront がユーザーにコンテンツを配信する方法
CloudFront でコンテンツ配信を設定すると、ユーザーがオブジェクトをリクエストしたときに次の処理が行われます。
ユーザーがウェブサイトまたはアプリケーションにアクセスして、イメージファイルや HTML ファイルなどのオブジェクトに対するリクエストを送信します。
DNS は、リクエストを、最も適切に処理できる CloudFront POP (エッジロケーション) にルーティングします。通常は、レイテンシーを考慮して最寄りの CloudFront POP が対象となります。
CloudFront では、リクエストされたオブジェクトのキャッシュをチェックします。オブジェクトがキャッシュにある場合、CloudFront はオブジェクトをユーザーに返します。オブジェクトがキャッシュにない場合、CloudFront は次の処理を実行します。
CloudFront は、リクエストを、ディストリビューションで指定されている内容と照合し、ファイルのリクエストを、対応するオブジェクトに応じてオリジンサーバーに転送します (例えば、Amazon S3 バケットや HTTP サーバー)。
そのオリジンサーバーが、エッジロケーションにオブジェクトを返します。
オリジンから最初のバイトが到着した直後に、CloudFront はそのオブジェクトをユーザーに転送し始めます。また、CloudFront は、そのオブジェクトに対する次回のリクエストに備えて、キャッシュにそのオブジェクトを追加します。
CloudFront とリージョン別エッジキャッシュとの連携
CloudFront ポイントオブプレゼンス (POP またはエッジロケーションとも呼ばれます) を使用することで、人気のあるコンテンツをすばやくビューワーに提供できます。CloudFront にはリージョン別エッジキャッシュもあり、コンテンツが POP に残るだけの人気が十分にない場合でも、より多くのコンテンツをビューワーの近くに配置して、そのコンテンツのパフォーマンスを向上させます。
リージョン別エッジキャッシュは、すべてのタイプのコンテンツ (特に、時間の経過とともに人気が落ちる傾向にあるコンテンツ) に役立ちます。この例には、ビデオ、写真、アートワークのようなユーザーが生成したコンテンツ、製品の写真やビデオのような e コマースアセット、突然新たに人気が出る可能性があるニュースやイベント関連のコンテンツがあります。
リージョン別キャッシュの動作
リージョン別エッジキャッシュは、ビューワーに近接して世界各地にデプロイされる CloudFront ロケーションです。オリジンサーバーと、ビューワーに直接コンテンツを提供する POP (世界各地のエッジロケーション) の間にあります。オブジェクトの人気が下がると、個別の POP では、これらのオブジェクトを削除し、より人気の高いコンテンツ用に容量を確保する場合があります。リージョン別エッジキャッシュのキャッシュは個別の POP よりも大きいため、オブジェクトは最も近いリージョン別エッジキャッシュロケーションでより長くキャッシュに残ります。これにより、より多くのコンテンツがビューワーの近くに保持されるため、CloudFront がオリジンサーバーに戻る必要がなくなり、ビューワーに対する全般的なパフォーマンスが向上します。
ビューワーがウェブサイトで、またはアプリケーション経由でリクエストを実行すると、DNS はユーザーのリクエストに対応できる最適な POP にリクエストをルーティングします。通常、この場所は、レイテンシーに関して最も近い CloudFront エッジロケーションです。その POP では、CloudFront によってリクエストされたオブジェクトがキャッシュにあるかどうかをチェックします。オブジェクトがキャッシュにある場合、CloudFront はオブジェクトをユーザーに返します。オブジェクトがキャッシュにない場合、POP は最も近いリージョン別エッジキャッシュをフェッチします。POP がリージョン別エッジキャッシュをスキップして直接オリジンに移動する場合の詳細については、次の注記を参照してください。
そのリージョン別エッジロケーションで、CloudFront は要求されたオブジェクトがキャッシュにあるかどうかをもう一度チェックします。オブジェクトがキャッシュにある場合、CloudFront はリクエスト元の POP にオブジェクトを転送します。リージョン別エッジキャッシュロケーションから最初のバイトが到着した直後に、CloudFront はそのオブジェクトをユーザーに転送し始めます。また、CloudFront は、そのオブジェクトに対する次回のリクエストに備えて、POP 内のキャッシュにそのオブジェクトを追加します。
POP とリージョン別エッジキャッシュロケーションのいずれかでキャッシュされていないオブジェクトについて、CloudFront はディストリビューションの仕様とリクエストを比較し、リクエストをオリジンサーバーに転送します。オリジンサーバーがオブジェクトをリージョン別エッジキャッシュロケーションに送り返すと、POP に転送され、CloudFront はオブジェクトをユーザーに転送します。この場合、CloudFront は次回にビューワーがオブジェクトをリクエストしたときに、POP に加えてリージョン別エッジキャッシュロケーションのキャッシュにオブジェクトを追加します。これにより、リージョン内のすべての POP がローカルキャッシュを共有されて、オリジンサーバーに対して複数のリクエストがおこなわれなくなります。また、CloudFront はオリジンサーバーと永続的接続を保持しているため、可能な限り迅速にオリジンからオブジェクトが取得されます。
注記
-
リージョン別エッジキャッシュには、POP と同等の機能があります。たとえば、キャッシュ無効化リクエストでは、有効期限が切れる前に、POP とリージョン別エッジキャッシュの両方からオブジェクトが削除されます。エンドユーザーが次にオブジェクトを要求したときに、CloudFront はオリジンに戻ってオブジェクトの最新バージョンをフェッチします。
-
プロキシ HTTP メソッド (
PUT
、POST
、PATCH
、OPTIONS
、DELETE
) は POP からオリジンに直接送信され、リージョン別エッジキャッシュを経由してプロキシを実行しません。 -
リクエスト時に決定される動的リクエストは、リージョン別エッジキャッシュを通過せず、直接オリジンに送信されます。
-
オリジンが Amazon S3 バケットで、リクエストの最適なリージョン別エッジキャッシュが S3 バケットと 同じ AWS リージョン である場合、POP はリージョン別エッジキャッシュをスキップして S3 バケットに直接移動します。
次の図は、CloudFront エッジロケーションとリージョン別エッジキャッシュを通るリクエストとレスポンスの流れを示しています。