AWS错误消息:针对此资源,当前正在进行冲突的条件操作


181

我间歇性地收到此错误。

我有一个使用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
您是否在尝试将对象放入S3,然后立即读取它们?
jamieb

@jamieb,实际上不,目前不在。
user1172468

1
希望我能为您解答。您是否要快速连续重写相同的密钥?S3建立在“最终一致”的模型上,其中PUT需要时间来解决。
jamieb 2012年

@jamieb,感谢您花费脑力周期,但盖伊提供的答案是正确的,我认为。我认为在代码中,我会重试创建一个存储桶-希望正常失败-确实有99.99%的时间,有时会引发此错误。再次非常感谢您抽出宝贵时间来帮助我。欢呼!
user1172468

感谢您的跟进。祝好运!
jamieb 2012年

Answers:


463

当我执行以下操作时,我得到了相同的错误消息:

  1. 创建了一个存储分区-默认情况下,它转到了美国地区(使用过的AWSCLI)

  2. 意识到,存储桶应转到欧盟区域并删除(使用过的AWS控制台)

  3. (几分钟后)尝试创建存储区,并指定了欧盟区域

在第3步,AWS控制台向我显示了问题标题的错误消息。

因此,我想美国的存储桶已删除,但是可能存在一些同步过程,这需要花费时间。我希望,等待几个小时后,我将再次找到可以创建的存储桶名称-这次是在适当的(EU)区域。

FIX:-编辑:大约一个小时后,我创建桶的尝试(在欧盟地区)成功。


4
我只是遇到了同样的情况。如果可以在下一个小时左右创建存储桶,我会回发。
AJB

27
我可以确认这一点。它花了大约1.5个小时,并且不能保证其他人不会同时铲斗名称,但是您可以在合理的时间内找回它,而且运气还不错。
AJB

1
我同意@jan的解决方法:使用新名称创建新存储桶,命名新存储桶时不要使用已删除存储桶的名称。
Dinesh Sunny

5
对我来说,用了不到70分钟。
2013年

4
亚马逊表示,这可能需要长达10个小时的时间Forums.aws.amazon.com/thread.jspa?threadID=37532
TomDotTom

37

对于所有其他从Google偶然发现此线程的人,作为搜索此错误消息的第一结果:

如果您删除了存储桶,要在新区域中重新创建,请不要“手动”等待此后台同步完成,而要运行一个小的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!"

它将每隔几秒钟(取决于'sleep')并尽快为您重试“创建存储桶”操作-会为您创建它,因此没有人会错误地窃取您的存储桶名称:)

希望能帮助到你 :)


1
谢谢你!在我的实例中,我已经在aws配置中定义了区域并运行了脚本,这导致了以下错误:UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 17: ordinal not in range(128)。解决的办法是删除--region标志。
MagentoAaron '19

23

您的示例中的请求是创建一个存储桶。如果您尝试创建过多的存储桶或替换存储桶,则不正常。

请注意,一个帐户最多只能有100个存储桶(请参阅此处)。编辑:现在,此限制是一个“软限制”,您可以根据需要增加它。

另请注意,创建存储桶需要时间,并且:

...不适合在应用程序的高可用性代码路径上进行存储桶创建或删除调用...

最好一次创建您的存储桶,然后,您可以在现有存储桶中放置任意数量的对象(甚至单个对象)。

无论如何,当使用随时可能会失败的系统工作时,您应该能够处理错误并在收到此类错误时减慢处理速度。在AWS Docs中查看更多详细信息。


11

当删除存储桶并以与旧存储桶相同的名称创建新存储桶时,通常会发生此错误。

我相信我们将需要等待一段时间,才能使用相同的名称创建新的存储桶。



0

如果帐户中已经有超过100个存储桶,您也会收到此消息。软限制为100桶。


-1

更改您的存储桶名称或等待。我等不到30分钟。我不需要更改名称,也无法按照设置的名称进行更改-它必须与我要托管的静态网站的现有域名匹配。无论如何,它是在不到30分钟的时间内自动创建的。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.