CloudFront からの遅い応答のレイテンシーを低減するにはどうすればよいですか?

最終更新日: 2020 年 8 月 28 日

オブジェクトまたは画像を Amazon CloudFront からダウンロードすると、レイテンシーが高くなります。「X-Cache:Miss from cloudfront」という応答を受け取るリクエストは、「X-Cache:Hit from cloudfront」という応答を受け取るリクエストよりもロードが遅くなります。このような問題が発生している理由は何ですか? これを解決する方法を教えてください。 

解決方法

リクエストがオリジンに送信されると、CloudFront は「X-Cache:Miss from cloudfront」を返します。リクエストを最も近いエッジロケーションから処理すると、CloudFront は「X-Cache:hit from cloudfront」を返します。「Miss」リクエストは、オリジンに転送する追加ステップがあるため、ロードが遅くなる可能性があります。

リクエストをオリジンに転送することによるレイテンシーを避けるために、以下をチェックしてリクエストが CloudFront エッジロケーションから確実に処理されるようにしてください。

  • すべてのヘッダー、クッキー、クエリ文字列を転送しないでください。これにより、CloudFront はリクエストをキャッシュする代わりにパススルーするように指示されてしまうからです。
  • ほとんど変更されない静的コンテンツ (CSS ファイルなど) と、頻繁に変更される動的コンテンツ (JavaScript ファイルなど) のキャッシュ動作を区別していることを確認します。静的コンテンツについては、オリジンがコンテンツを提供するのに必要ない Cookie、クエリ文字列、またはヘッダーに基づくキャッシュを避けてください。
    注意: ウェブディストリビューションでは、CloudFront はデフォルトで、エッジロケーションにオブジェクトをキャッシュするときに Cookie を考慮しません。オリジンが 2 つのオブジェクトを返し、それらは Set-Cookie ヘッダーの値のみが異なる場合、CloudFront はオブジェクトの 1 つのバージョンのみをキャッシュします。
  • CloudFront がオリジンにクエリを実行する前に、キャッシュでさらに時間がかかるパスパターンの最小 TTL、最大 TTL、デフォルト TTL を拡張します。
  • オリジンが Cache-Control ヘッダーを使用している場合は、ディレクティブが配信に設定されている最小 TTL、最大 TTL、デフォルト TTL と一致していることを確認します。
  • オリジンが Expires ヘッダーを使用している場合は、必要に応じてヘッダーで CloudFront がレスポンスをキャッシュできることを確認します。
  • オリジンサーバーが Date および Last-Modified ヘッダーフィールドに有効で正確な値を設定していることを確認します。
  • オブジェクトに対する無効化の使用を制限します。必要な場合にのみ無効化を実行してください。
  • オブジェクトがリクエストされる頻度を確認します。オブジェクトが頻繁にリクエストされない場合、CloudFront はオブジェクトをエッジロケーションから削除する可能性があります。

動的コンテンツを提供していて、リクエストに対して「X-Cache:Miss from cloudfront」レスポンスを期待している場合は、キャッシュを使用せずにリクエストのレイテンシーを低減するために、次の方法を検討してください。

  • 地理的にリクエスタに近いオリジンサーバーをより多く設定します。次に、これらのサーバーに解決される単一のレイテンシーベースのルーティング DNS レコード (たとえば、origin-latencybased-dnsrecord.example.com) を設定します。CloudFront で、ディストリビューションのオリジンとして DNS 名 (たとえば、origin-latencybased-dnsrecord.example.com) を設定します。この設定により、CloudFront は、リクエストが到達するエッジロケーションに基づいて、最小のレイテンシーでオリジンサーバーからコンテンツを取得できます。Amazon Route 53 を DNS プロバイダーとして使用している場合は、Amazon Route 53 のレイテンシーベースのルーティングに別のリージョンを追加するを参照してください。
  • CloudFront オリジンのキープアライブアイドルタイムアウトを増やします。この値は、接続を閉じる前までに CloudFront がオリジンサーバーとのアイドル接続を維持する時間を指定します。デフォルトのキープアライブアイドルタイムアウトは 5 秒ですが、オリジンサーバーがサポートしている場合は、最大 60 秒まで高い値を設定できます。ディストリビューションが動的コンテンツのリクエストをオリジンに転送する場合、CloudFront はリクエストごとに新しい接続を作成する必要がないため、タイムアウト値を増やすとレイテンシーを低減することができます。
    注意: オリジンには、複数の IP アドレスを割り当てることができます。複数のオリジン IP アドレス間で永続的な接続を使用するために、CloudFront は高いリクエスト率と、より高いリクエスト頻度に依拠します。これは、リクエストがオリジン IP アドレス全体にラウンドロビンでルーティングされ、接続が IP アドレスごとに永続化されるためです。