メニュー
Amazon CloudFront
開発者ガイド (API バージョン 2016-09-29)

CloudFront がコンテンツを配信する方法

初期セットアップを行った後、CloudFront は、ウェブサイトまたはアプリケーションと連携して動作し、コンテンツの配信を高速化します。このセクションでは、ビューワーがコンテンツをリクエストしたときに CloudFront がコンテンツを配信する方法について説明します。

CloudFront がコンテンツをユーザーに配信する方法

CloudFront でコンテンツ配信を設定すると、ユーザーがオブジェクトをリクエストしたときに次の処理が行われます。

  1. ユーザーがウェブサイトまたはアプリケーションにアクセスして、イメージファイルや HTML ファイルなどの 1 つまたは複数のオブジェクトをリクエストします。

  2. DNS は、リクエストを最良の方法でそのリクエストに対応できる CloudFront エッジロケーション (通常はレイテンシーの点から最寄りの CloudFront エッジロケーション) にルーティングします。

  3. そのエッジロケーションで、CloudFront は要求されたファイルがキャッシュにあるかどうかをチェックします。ファイルがキャッシュにある場合、CloudFront はファイルをユーザーに返します。ファイルがキャッシュにない場合は、次のように処理します。

    1. CloudFront は、ディストリビューションに指定された内容とリクエストを照合し、ファイルのリクエストを、対応するファイルタイプに応じて該当のオリジンサーバーに転送します。たとえば、イメージファイルの場合は Amazon S3 バケット、HTML ファイルの場合は HTTP サーバーです。

    2. オリジンサーバーは、CloudFront エッジロケーションにファイルを返します。

    3. オリジンから最初のバイトが到着した直後に、CloudFront はユーザーへのファイルの転送を開始します。また、CloudFront はキャッシュにファイルを追加し、次にこのファイルがリクエストされた場合に備えます。

 CloudFront の支払い

CloudFront とリージョン別エッジキャッシュとの連携

CloudFront エッジロケーションを使用することで、人気のあるコンテンツをすばやくビューワーに提供できます。CloudFront にはリージョン別エッジキャッシュもあり、コンテンツが CloudFront エッジロケーションに残るだけの人気が十分にない場合でも、より多くのコンテンツをビューワーの近くに配置して、そのコンテンツのパフォーマンスを向上させます。

リージョン別エッジキャッシュは、すべてのタイプのコンテンツ (特に、時間の経過とともに人気が落ちる傾向にあるコンテンツ) に役立ちます。この例には、ビデオ、写真、アートワークようなユーザーが生成したコンテンツ、製品の写真やビデオのような e コマースアセット、突然新たに人気が出る可能性があるニュースやイベント関連のコンテンツがあります。

リージョン別キャッシュの動作

リージョン別エッジキャッシュは、ビューワーに近接して世界各地にデプロイされる CloudFront ロケーションです。オリジンサーバーと、ビューワーに直接コンテンツを提供する世界各地のエッジロケーションの間にあります。オブジェクトの人気が下がると、個別のエッジロケーションでは、これらのオブジェクトを削除し、より人気の高いコンテンツ用に容量を確保する場合があります。リージョン別エッジキャッシュのキャッシュは個別のエッジロケーションよりも大きいため、オブジェクトは最も近いリージョン別エッジキャッシュロケーションでより長くキャッシュに残ります。これにより、より多くのコンテンツがビューワーの近くに保持されるため、CloudFront がオリジンサーバーに戻る必要がなくなり、ビューワーに対する全般的なパフォーマンスが向上します。

ビューワーがウェブサイトで、またはアプリケーション経由でリクエストを実行すると、DNS はユーザーのリクエストに対応できる最適な CloudFront エッジロケーションにリクエストをルーティングします。通常、この場所は、レイテンシーに関して最も近い CloudFront エッジロケーションです。そのエッジロケーションで、CloudFront は要求されたファイルがキャッシュにあるかどうかをチェックします。ファイルがキャッシュにある場合、CloudFront はファイルをユーザーに返します。ファイルがキャッシュにない場合、エッジサーバーは最も近くのリージョン別エッジキャッシュに接続してオブジェクトをフェッチします。

そのリージョン別エッジロケーションで、CloudFront は要求されたファイルがキャッシュにあるかどうかをもう一度チェックします。ファイルがキャッシュにある場合、CloudFront は要求されたエッジロケーションにファイルを転送します。リージョン別エッジキャッシュロケーションから最初のバイトが到着した直後に、CloudFront はユーザーへのファイルの転送を開始します。また、CloudFront はリクエストされたエッジロケーションのキャッシュにファイルを追加し、次にこのファイルがリクエストされた場合に備えます。

エッジロケーションとリージョン別エッジキャッシュロケーションの両方でキャッシュされていないファイルについて、CloudFront はディストリビューションの仕様とリクエストを比較し、ファイルのリクエストをオリジンサーバーに転送します。オリジンサーバーがファイルをリージョン別エッジキャッシュロケーションに送信すると、要求されたエッジロケーションに転送され、CloudFront はファイルをユーザーに転送します。この場合、CloudFront は次回にビューワーがファイルを要求したときに備えて、エッジロケーションに加えてリージョン別エッジキャッシュロケーションのキャッシュにファイルを追加します。これにより、リージョン内のすべてのエッジロケーションがローカルキャッシュを共有し、オリジンサーバーに対する複数のリクエストが排除されます。また、CloudFront はオリジンサーバーと永続的接続を維持し、ファイルをできるだけ早くオリジンからフェッチできるようにします。

注記

  • リージョン別エッジキャッシュには、エッジロケーションと同等の機能があります。たとえば、キャッシュ無効化リクエストでは、有効期限が切れる前に、エッジキャッシュとリージョン別エッジキャッシュの両方からオブジェクトが削除されます。エンドユーザーが次にオブジェクトを要求したときに、CloudFront はオリジンに戻ってオブジェクトの最新バージョンをフェッチします。

  • プロキシメソッド PUT/POST/PATCH/OPTIONS/DELETE はエッジロケーションからオリジンに直接送信され、リージョン別エッジキャッシュをプロキシ経由しません。

  • リージョン別エッジキャッシュはカスタムオリジンでは使用されますが、Amazon S3 オリジンでは使用されません。

  • リクエスト時に決定される動的コンテンツ (すべてのヘッダーを転送するように設定されたキャッシュ動作) は、リージョン別エッジキャッシュを介して送信されず、直接オリジンに送信されます。