12

800KBのJPGファイルがあります。S3にアップロードしようとすると、タイムアウトエラーが発生し続けます。何が悪いのか理解できますか?800KBはアップロードにはかなり小さいです。

エラーメッセージ:サーバーへのソケット接続がタイムアウト期間内に読み取られなかったか、書き込まれませんでした。アイドル接続は閉じられます。

HTTPステータスコード:400

AWSエラーコード:RequestTimeout

Long contentLength = null;
System.out.println("Uploading a new object to S3 from a file\n");
try {
    byte[] contentBytes = IOUtils.toByteArray(is);
    contentLength = Long.valueOf(contentBytes.length);
} catch (IOException e) {
    System.err.printf("Failed while reading bytes from %s", e.getMessage());
}

ObjectMetadata metadata = new ObjectMetadata();
metadata.setContentLength(contentLength);        
       
s3.putObject(new PutObjectRequest(bucketName, key, is, metadata));
4

3 に答える 3

12

IOUtils.toByteArrayが入力ストリームを排出しているため、サービス呼び出しが行われたときにそこから読み取られるデータがなくなる可能性はありますか?その場合、stream.reset()で問題が修正されます。

ただし、(任意のInputStreamではなく)ファイルをアップロードするだけの場合は、ファイルを受け取るAmazonS3.putObject()のより単純な形式を使用でき、コンテンツの長さを計算する必要はまったくありません。

http://docs.amazonwebservices.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/s3/AmazonS3.html#putObject(java.lang.String、java.lang.String、java.io.File

これにより、このようなネットワークエラーが自動的に数回再試行されます。ClientConfigurationオブジェクトを使用してインスタンス化することにより、クライアントが使用する再試行回数を微調整できます。

http://docs.amazonwebservices.com/AWSJavaSDK/latest/javadoc/com/amazonaws/ClientConfiguration.html#setMaxErrorRetry(int)

于 2012-10-10T22:58:58.730 に答える
1

エンドポイントがVPCの背後にある場合は、サイレントエラーも発生します。ここにs3の新しいVPCエンドポイントを追加できます

https://aws.amazon.com/blogs/aws/new-vpc-endpoint-for-amazon-s3/

于 2018-03-06T00:58:50.270 に答える
-1

その答えをくれたガブリエルに感謝します。rcloneを使用してS3のエンドポイントを実装したところ、エラーが100から0に変化することがわかりました。これにより、ECSからS3への転送は内部ネットワークを経由します。これは非常に高速で信頼性があります。私が付け加える他の唯一のポイントは、ネットワークドライブをS3にバックアップしようとしないことです。

このコマンド(およびオプション)は、一日中完全に機能しています。rclone --progress copy / home / sound / Effects / $ formatName / $ fileType / $ S3CONFIG:$ S3BUCKET / $ formatName- $ fileType / $ fileType /- contimeout 10m0s --max-backlog 100 --transfers 8

于 2020-08-25T07:27:58.067 に答える