概要

動的な API や高度にパーソナライズされた Web ページなどのワークロードは、ほとんどキャッシュできません。ただし、CloudFront やグローバルアクセラレータなどの AWS エッジサービスが提供するセキュリティとアクセラレーションの恩恵を受けることができます。AWS エッジサービスは、ユーザーから平均して 20 ~ 30 ミリ秒以内に世界中に分散している数百のポイントオブプレゼンス (POP) で運用されます。オリジンへのトラフィックは、パブリックインターネットを経由するのではなく、AWS グローバルネットワークを介して持ち帰られます。AWS グローバルインフラストラクチャは、世界中の地上ケーブルと大洋横断ケーブルで結ばれた、完全冗長化されたグローバルなメトロファイバーネットワーク上に構築された、可用性が高く、レイテンシーの低い専用インフラストラクチャです。

CloudFront によるダイナミック・アクセラレーション

CloudFront は、ユーザーの近くでの TCP/TLS 接続を終了させるだけでなく、次の方法で動的コンテンツを高速化します。

  • 配信元がサポートしていない場合でも、QUICやTLS1.3などの最新のインターネットプロトコルを介してコンテンツを配信します。
  • オリジンとの接続を維持します。コンテンツがローカルキャッシュに存在しない場合や、API のように純粋に動的な場合など、リクエストをオリジンに転送しなければならない場合があります。POP からの固定接続を介して転送されるリクエストは、オリジンへの新しい TCP/TLS 接続を確立する必要がないため、複数のラウンドトリップによるレイテンシがなくなり、スケーリングされた TCP ウィンドウが維持されます。オリジンと CloudFront の設定で TCP キープアライブタイムアウトを増やしたり、Origin Shield を有効にしたりすることで、接続の再利用をさらに強化できます。さらに、オリジンでの接続確立率が低いため、スケーリングの面でコストが削減されます。具体的には、EC2およびALBベースのオリジンの場合、オリジンからTLS証明書を送信する際のDTOオーバーヘッドが軽減されるため、データ転送アウト(DTO)料金が低くなります。CloudFront は DTO 計算で TLS のオーバーヘッドを測定していないことに注意してください。オリジンシールドを有効にすることで、CloudFront での接続の再利用を強化できます。
    以下のビデオでは、TinderとSlackが、CloudFrontがAPIの応答時間を大幅に短縮するのにどのように役立つかを説明しています。

以下のビデオでは、TinderとSlackが、CloudFrontがAPIの応答時間を大幅に短縮するのにどのように役立つかを説明しています。

Slack、Amazon CloudFront を使用して API の高速化をセキュアに行うことについて語る
CloudFront のパフォーマンスの最適化:ミリ秒単位が大切です!

CloudFront が HTTP 動的トラフィックを最適化する方法の詳細については、このブログをご覧ください。さらに、このブログでは Python スクリプトの使用方法についても説明します。これにより、CloudFront が HTTP 動的リクエストのパフォーマンスをどのように改善するかをよりよく理解できるようになります。

CloudFront をリバースプロキシとして使用するには、該当するキャッシュ動作で、ディストリビューションのキャッシュ無効化マネージドキャッシュポリシーを設定する必要があります。これにより、POP から受信したリクエストをオリジンに直接転送するよう CloudFront に指示されます。デフォルトでは、オリジンリクエストポリシーを明示的に設定しない場合、CloudFront はリクエストをオリジンに転送する前に Cookie、クエリパラメータ、およびほとんどのヘッダーを削除します。例外的に、CloudFront はオリジンのドメイン名の値を含む Host ヘッダーを送信し、リクエスタの IP 分だけ増加した X-Forwarded-For ヘッダーを追加し、ユーザーエージェントヘッダーを Amazon CloudFront の値で上書きします。 CloudFront がリバースプロキシとして設定されている場合、Gzip または Brotli を使用してレスポンスを圧縮しないことに注意してください。

特定のリクエスト属性を CloudFront に転送する必要がある場合は、オリジンリクエストポリシーで明示的に設定する必要があります。たとえば、 AllViewer マネージドオリジンリクエストポリシーを設定することで、ユーザーが受け取ったすべてのリクエスト属性を転送できます。 これを行うと、オリジンのドメイン名の値を送信するのとは対照的に、CloudFront はユーザーが受信したとおりに Host ヘッダーを送信することに注意してください。API ゲートウェイを使用する場合など、API オリジンがホストヘッダーにオリジンドメイン名を期待する場合は、代わりに AllViewerExcepHostHeader マネージドオリジンリクエストポリシーを設定します。

転送されたリクエストに、ユーザーの国やデバイスに関する情報など、 CloudFront からのメタデータを追加するには、オリジンリクエストポリシーで関連する CloudFront ヘッダーを設定します。True-Client-IP などのカスタム動的ヘッダーの場合、ビューワーリクエストイベントで CloudFront Function を使用してアップストリームに追加します。

CloudFront による動的コンテンツのパフォーマンス向上をテストするには、このワークショップをチェックしてください

グローバルアクセラレータによるダイナミックアクセラレーション

グローバルアクセラレータは、BGP エニーキャストを使用してユーザトラフィックを最も近い PoP にルーティングします。そこから、グローバルアクセラレータは Amazon バックボーンを介してユーザートラフィックをオリジンに転送します。グローバルアクセラレータは、次の手法を使用してパフォーマンスをさらに向上させます。

  • ジャンボフレーム対応。AWS エッジロケーションと AWS リージョンのアプリケーションエンドポイント間のジャンボフレームを有効にすることで、Global Accelerator は各パケットで最大6倍のデータ (ペイロード) を送受信できます。ジャンボフレームのサポートにより、ユーザーとアプリケーション間でデータを転送するのに必要な合計時間が短縮されます。
  • エッジでの TCP ターミネーショングローバルアクセラレータは、クライアントとクライアントに最も近い AWS PoP との間に TCP 接続を確立することにより、初期の TCP セットアップ時間を短縮します。ほぼ同時に、2 つ目の TCP 接続をエッジロケーションと AWS リージョンのアプリケーションエンドポイントとの間に作成します。
  • 受信側ウィンドウ、TCP バッファ、輻輳ウィンドウが大きいTCP で終端されたトラフィックの場合、Global Accelerator は AWS エッジインフラストラクチャの受信側ウィンドウと TCP バッファの設定を調整することで、アプリケーションから大量のデータを短時間で受信してバッファリングできます。これにより、クライアントへのダウンロードが速くなり、クライアントは AWS エッジから短時間で直接データを取得できるようになりました。AWS グローバルネットワークを介してデータを送信することで、Global Accelerator は TCP の混雑時間を拡大して、パブリックインターネット経由で通常可能な量よりも多くのデータを送信できます。
AWS グローバルアクセラレータによるパフォーマンスと可用性の向上

リソース

このページはお役に立ちましたか?