ウェブブラウザを使用して Amazon S3 に保存されているオブジェクトをダウンロードするときにロード時間が長い場合のトラブルシューティング方法を教えてください。
最終更新日: 2020 年 3 月 6 日
ウェブブラウザを使用して Amazon Simple Storage Service (Amazon S3) からオブジェクトをダウンロードしようとしていますが、ダウンロードが遅くなります。このような問題が発生している理由は何ですか?
解決方法
ウェブブラウザを使用した際に Amazon S3 からのダウンロード時間が長くなる原因を特定するには、以下の項目を確認します。
インターネット帯域幅が狭い
インターネットサービスプロバイダー (ISP) から提供されているネットワーク速度を確認します。速度が低下している場合、Amazon S3 バケットに接続してオブジェクトをダウンロードしようとすると、ボトルネックが生じる可能性があります。
オブジェクトサイズが大きい
他のオブジェクトが通常の速度でダウンロードされるのに、一部のオブジェクトだけダウンロードに時間がかかってしまう場合は、ダウンロードに時間がかかるオブジェクトのサイズを確認します。Amazon S3 オブジェクトのサイズが非常に大きい場合にウェブブラウザがオブジェクト全体をダウンロードしようとすると、ダウンロード時間が長くなることがあります。代わりに、Amazon S3 API を使用して GET リクエストを範囲指定した状態で大きなオブジェクトをダウンロードしてみてください。GET リクエストを範囲指定して実行することで大きなオブジェクトを小さなチャンクに分割してダウンロードできるため、レイテンシーを回避できます。
クライアントと Amazon S3 バケットが地理的に離れている
Amazon S3 バケットからダウンロードするクライアントが世界中のさまざまな場所に点在する場合、バケットのある AWS リージョンから地理的に離れたクライアントでのダウンロードには時間がかかる可能性があります。地理的に離れたクライアントでのダウンロード時間を短縮するには、以下の方法があります。
- Amazon CloudFront ディストリビューションから Amazon S3 オブジェクトを配信します。CloudFront を使用すれば地理的に近いエッジロケーションからクライアントに配信できるため、レイテンシーを最小限に抑えることができます。
- クライアントと地理的に近い AWS リージョンにバケットを移動することを検討します。クロスリージョンレプリケーションを使用すると、ソースバケットから別のリージョンのレプリケート先バケットにオブジェクトをコピーできます。
中間ネットワーク関連の問題
ネットワーク関連の問題 (パケットロス、ホップ数の多さ、その他 ISP に関連した問題) は、ウェブブラウザ使用時における Amazon S3 のダウンロード時間に影響する可能性があります。
ネットワーク関連の問題が原因でダウンロードが遅くなっているかどうかを確認するには、mtr や traceroute などのツールを使用します。これらのツールは、リモートホストにパケットを送信するときに発生する可能性のあるネットワークの問題を特定するのに役立ちます。たとえば、以下の traceroute コマンドは、ポート 80 経由で us-east-1 内の Amazon S3 エンドポイントに TCP traceroute を送信します。
sudo traceroute -P TCP -p 80 s3.us-east-1.amazonaws.com
注意: ICMP 経由で応答しないネットワークデバイスが多いため、TCP traceroute を実行することがベストプラクティスです。
ワークステーションリソース
全体的にレイテンシーを発生させる可能性のあるリソース競合 (CPU、メモリ、ネットワーク帯域幅など) がワークステーション内にないことを確認します。
オペレーティングシステムに応じて Resource Monitor または top コマンドなどのツールを使用すると、ほとんどのクライアントシステムでリソースの使用状況を確認することができます。
Amazon S3 から処理時間を分離する
ダウンロード時間が長くなる原因を特定するために、処理時間を Amazon S3 から分離できます。サーバーアクセスのログ記録を有効にしてから、Amazon S3 がリクエストを処理するのにかかった時間を表す Total Time のログを確認できます。
さらに、Amazon CloudWatch メトリクスである FirstByteLatency の分析もできます。FirstByteLatency は、Amazon S3 がクライアントからのリクエストを処理してからクライアントへの応答の送信を開始するのにかかった時間を示します。この CloudWatch メトリクスにより、パフォーマンスをバケットレベルで確認することができます。
注意: Amazon S3 CloudWatch リクエストメトリクスの料金は、カスタムメトリクスと同じ料金です。