问题
我间歇地得到这个错误。
我有一个使用java aws sdk的程序,并将数以千计的小文件加载到s3。我间歇地看到这个错误。
在互联网上快速搜索后找不到任何有用的答案。
请注意,调用程序是单线程的。底层的aws java sdk似乎确实使用了工作线程。
Status Code: 409, AWS Service: Amazon S3, AWS Request ID: 75E16E8DE2193CA6, AWS Error Code: OperationAborted, AWS Error Message: A conflicting conditional operation is currently in progress against this resource. Please try again., S3 Extended Request ID: 0uquw2YEoFamLldm+c/p412Lzd8jHJGFBDz3h7wN+/4I0f6hnGLkPMe+5LZazKnZ
at com.amazonaws.http.AmazonHttpClient.handleErrorResponse(AmazonHttpClient.java:552)
at com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:289)
at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:170)
at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:2648)
at com.amazonaws.services.s3.AmazonS3Client.createBucket(AmazonS3Client.java:578)
at com.amazonaws.services.s3.AmazonS3Client.createBucket(AmazonS3Client.java:503)
#1 热门回答(340 赞)
当我执行以下操作时,我收到了相同的错误消息:
- 创建了一个存储桶 - 它默认为美国地区(使用AWSCLI)
- 意识到,存储桶应转到欧盟地区并删除它(使用AWS控制台)
- (几分钟后)尝试创建存储桶,指定EU区域
在第3步,AWS控制台向我显示了问题标题的错误消息。
所以我想,美国的存储桶被删除了,但可能还有一些同步过程需要时间。我希望,等待几个小时,我会再次找到可以创建的桶名称 - 这次是在适当的(欧盟)地区。
FIX: - 编辑:大约一个小时后,我创建存储桶(在欧盟地区)的尝试成功了。
#2 热门回答(17 赞)
你的示例中的请求是创建存储桶。如果你尝试创建太多桶或更换桶,则它不健康。
请注意,你有一个帐户限制为100个桶(参见here)。编辑:现在这个限制是一个"软限制",如果需要你可以增加它。
另请注意,创建存储桶需要时间并且:
...在应用程序的高可用性代码路径上创建或删除调用是不合适的...
最好一次创建你的桶,然后你可以在你现有的桶(或者甚至是一个桶)中放置你喜欢的任意数量的对象。
无论如何,当使用一个偶然发生故障的系统时,你应该能够处理错误并在收到这样的错误时减慢你的进程。详情请参阅90534122。
#3 热门回答(15 赞)
对于所有其他从谷歌偶然发现此线程的人,作为搜索此错误消息的第一个结果:
如果你删除了存储桶,要在新区域中重新创建,不会"手动"等待,直到此后台同步完成,而是放置一个小的bash脚本来运行并每5秒左右重试一次所需的存储桶创建。
例:
#!/bin/bash
RESULT=2
until [ $RESULT -eq 0 ]; do
aws s3 mb s3://your.bucket.name --region us-west-2
RESULT=$?
sleep 5
done
echo "Bucket created!"
它会为你重试"创建桶"操作,每隔几秒钟(取决于"睡眠")并尽快 - 将为你创建它,所以没有人可以错误地窃取你的桶名:)
希望能帮助到你 :)