CloudFront からの高まっているレイテンシーをトラブルシューティングして低くするにはどうすればよいですか?

最終更新日: 2022 年 6 月 2 日

Amazon CloudFront からのレスポンスでレイテンシーが高まっています。原因を特定してレイテンシーを低くするにはどうすればよいですか?

簡単な説明

CloudFront からのレイテンシーをトラブルシューティングするには、まず次のイベントのどれがレイテンシーに寄与しているかを特定します。

  • リクエストがクライアントと CloudFront エッジロケーション間を移動するのにかかる時間。これには、ドメインネームシステム (DNS) ルックアッププロセスと TCP および SSL/TLS ネゴシエーションが含まれます。
  • リクエストが CloudFront とオリジンの間を移動するのにかかる時間。これには、オリジン DNS ルックアッププロセス、オリジンとの TCP および SSL/TLS ネゴシエーション、オリジンがオブジェクトを処理して応答するのにかかる時間が含まれます。

その後、最も大きくレイテンシーを引き起こしているイベントについて、トラブルシューティングのステップに従います。

解決方法

CloudFront からレイテンシーを引き起こしているイベントを特定します。

CloudFront からレイテンシーを引き起こしているイベントを特定するには、次のいずれかを実行します。

  • 次の cURL コマンドを実行します。
curl -w "DNS_resolution: %{time_namelookup}| TCP_negotiation_time: %{time_connect}| SSL_negotiation_time: %{time_appconnect}| TTFB: %{time_starttransfer}| Total time: %{time_total} \n" -o /dev/null -vsL https://www.example.com

: example.com を CloudFront ドメイン名または代替ドメイン名 (CNAME) と URL パスに置き換えます。

  • ウェブブラウザのデベロッパーツールで、ネットワークリクエストの各段階にかかる時間を確認します。例えば、Mozilla Firefox を使用している場合、[Timing] (タイミング) タブにはこの情報が表示されます
  • 各イベントまたはリクエストの time-taken に基づいて、この記事の関連する「解決方法」セクションを参照してください。

    過去にレイテンシーを確認した場合は、CloudFront アクセスログtime-taken フィールドと time-to-first-byte フィールドを確認します。CloudFront アクセスログには、クライアントが DNS ルックアッププロセスと TCP および SSL/TLS ネゴシエーションにかけた時間は記録されません

    DNS 解決のレイテンシーを低くする

    • クライアント側の DNS の DNS キャッシュ時間を引き上げます。
    • ローカル DNS サーバーのキャッシュの Time to Live (TTL) を引き上げます。
    • DNS レジストラ/プロバイダーの DNS レコードの TTL を引き上げます。
    • インターネットサービスプロバイダーからのリゾルバー DNS サーバーがレイテンシーを生じさせている場合は、パブリック DNS サーバーの使用を検討してください。

    TCP および SSL/TLS のレイテンシーを低くする - ネゴシエーション時間

    • ローカルネットワーク帯域幅とインターネット帯域幅を確認します。
    • インターネットサーバープロバイダーまたはルーターにネットワーク障害が起きていないか確認します。
    • インターネットサービスプロバイダーまたはネットワークルートを通じて、ローカルネットワークのパフォーマンスを最適化します。
    • ウェブブラウザが最も近接している適切な POP ロケーションを見つけることができるようにする、適切な DNS リゾルバーを使用していることを確認します。
    • HTTPS サイトのパフォーマンスを改善するには、証明書チェーンを短くします。
    • レイテンシーは、ファイアウォール、プロキシ、またはローカルルーターによって引き起こされる可能性があります。これらのうちのいずれがレイテンシーを引き起こしているかを判断するには、システムから次の MTR コマンドを実行します。詳細については、「Diagnosing Network Issues with MTR」(MTR でネットワークの問題を診断する) を参照してください。
    mtr -rw example.com --no-dns
    : example.com をご使用のドメイン名に置き換えてください。

    Time Taken for First Byte (TTFB) と Total Time Taken (TTL) のレイテンシーを低くする

    CloudFront が「X-Cache:Hit from cloudfront」(X-Cache:CloudFront からのヒット) を返す場合

    リクエストを最も近いエッジロケーションから処理すると、CloudFront は「X-Cache:hit from cloudfront」(X-Cache:CloudFront からのヒット) を返します。レイテンシーを低くするには、次を実行します。

    • CloudFront 自動圧縮をオンにしてファイルを圧縮し、ダウンロード速度を上げます。
    • ローカルまたはブラウザキャッシュを使用して、CloudFront へのリクエストを減らします。ファイルで cache-control ヘッダーを指定して、ウェブサイトのコンテンツをブラウザのメモリまたはローカルディスクに一定時間保持するようウェブブラウザに指示します。cache-control ヘッダーの詳細については、「CloudFront がオブジェクトをキャッシュする期間の指定」を参照してください。

    CloudFront が「X-Cache:Miss from cloudfront」(X-Cache:CloudFront からのミス) を返す場合

    リクエストがオリジンに送信されたときに CloudFront が「X-Cache:Miss from cloudfront」(X-Cache:CloudFront からのミス) を返す場合。レイテンシーを低くするには、次を実行します。

    • CloudFront エッジロケーションからオリジンロケーションまでの Round trip time (RTT) を引き下げます。CloudFront エッジロケーションからのリクエストが最も近いオリジンロケーションに送信される場合、RTT は低くなります。ただし、リクエストがオリジンから地理的に離れたエッジロケーションからのものである場合は、TTFB が影響を受けます。RTT を最適化するには、ユーザーに地理的に近い複数のリージョンにオリジンサーバーをレプリケートします。その後、オリジンドメイン名の DNS を設定して、レイテンシーまたはジオロケーションに基づいてリクエストをオリジンサーバーにルーティングします。DNS プロバイダーとして Amazon Route 53 を使用している場合、詳細については、「ルーティングポリシーの選択」を参照してください。
    • CloudFront 自動圧縮をオンにしてファイルを圧縮し、ダウンロード速度を下げます。ファイル形式が CloudFront 自動圧縮でサポートされていない場合は、オリジンでそのファイルを事前に圧縮し、Content-Encoding ヘッダーを使用して提供します。
    • オリジンレイテンシーメトリクスを有効にして、オリジンから CloudFront までのレイテンシーを確認します。注: CloudWatch の標準料金が適用されます。
    • [CloudFront Origin Shield] をオンにします。
    • Server-Timing ヘッダー機能をオンにしたレスポンスヘッダーポリシーを追加します。この機能は、CloudFront とオリジン間のレイテンシーに寄与しているイベントを理解するのに役立ちます。