Amazon Simple Storage Service (Amazon S3) バケットでオブジェクトをアップロードまたはダウンロードすると、次のいずれかのエラーが表示されます。 ConnectionResetError、接続中止、またはピアによる接続リセット。
解決策
アプリケーションが Amazon S3 エンドポイントへの接続を確立できないため、接続リセットエラーが発生します。これは、S3 リソースにアクセスしたときに接続が閉じられたり、接続が非アクティブになったりすることが原因である可能性があります。これらのエラーは、アプリケーションまたはクライアント層、ネットワークパス、または中間リソースの問題が原因で発生します。問題の根本原因を特定するには、エラーの原因となっているコンポーネントを見つける必要があります。
接続テスト
接続をテストするには、次のコマンドを実行して、マシンが HTTP または HTTPS 経由で S3 への接続を確立できるかどうかを確認します。
$ telnet mybucket.s3.REGION-CODE.amazonaws.com 80
$ telnet mybucket.s3.REGION-CODE.amazonaws.com 443
SSL 検証のバイパス
SSL 検証をバイパスするには、リクエストに --no-verify-ssl パラメータを含めてください。このパラメータは、SSL 証明書が検証されないようにします。ただし、リクエストはポート 443 を経由します。このアプローチは、SSL 検証に関連する問題を切り分けるのに役立ちます。
ネットワークトラフィックの分析
パケットをキャプチャして、マシンと Amazon S3 間のネットワークトラフィックを分析します。パケットのキャプチャを分析して、クライアントまたはサーバーが RST フラグを投げるかどうかを判断します。
- ネットワークが RST フラグを投げる場合は、IP アドレスと RST フラグがスローされたときのプロセスを書き留めます。プロセスには、DNS ルックアップ、TCP ハンドシェイク、SSL ハンドシェイク、およびデータ転送が含まれます。
- SSL ハンドシェイク中にネットワークが RST フラグを投げた場合は、マシンが Amazon から返される証明書を信頼しているかを確認してください。
デバッグ接続
**注:**AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、最新の AWS CLI バージョンを使用しているかどうかを確認してください。
エラーが発生したマシンから AWS CLI cp コマンドを実行して、Amazon S3 バケットへの接続を試みます。コマンドには --debug フラグを含めてください。
aws s3 cp/sync SOURCE_FILE_PATH/SOURCE_FILE_NAME DESTINATION --debug
リクエストヘッダー、リクエストメソッド、およびレスポンスを分析します。問題が断続的に発生し、いくつかのリクエストが成功した場合は、成功したリクエストと失敗したリクエストに違いがあるかどうかを確認してください。
コマンドの出力をチェックして、ネットワーク環境のプロキシがエラーの原因になっているかどうかを確認します。出力には、HTTP プロキシが原因で発生したエラーのプロキシエラーまたはプロキシ接続障害が表示されます。SSL プロキシがエラーの原因である場合、SSL ハンドシェイクを確立しようとすると、いずれかの接続リセットエラーが表示されます。
HTTP Keep-Alive のチェック
マシンの HTTP Keep-Alive を有効にすると、マシンは 1 つの TCP 接続を使用して複数の HTTP 要求および応答に対して開いたままになります。次のコマンドを実行して、TCP Keep-Alive がオンになっているかどうかを確認します。
curl -Iv s3.amazonaws.com 2>&1 | grep -i 'connection #0'
TCP Keep-Alive がオンになっている場合、出力には次の文字列が表示されます。
Connection #0 to host s3.amazonaws.com left intact
仲介リソースのチェック
NAT ゲートウェイ、ファイアウォール、ロードバランサーなどの中間リソースは、これらのリソースの使用率が高い場合、接続を途中で終了する可能性があります。また、一定期間データがワイヤーに書き込まれなかったり、ワイヤーからデータが書き込まれなかったりすると、接続が途中で終了し、接続が切断されたとマークされることもあります。