ChatGPT解决这个技术问题 Extra ChatGPT

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

我间歇性地收到此错误。

我有一个程序,它使用 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)
您是否尝试将对象放入 S3,然后立即读取它们?
@jamieb,实际上不,此时不是。
我希望我能给你一个答案。您是否试图快速连续地重写相同的键? S3 建立在“最终一致”的模型之上,PUT 需要时间来解决。
@jamieb,感谢您花费脑力周期,但我认为 Guy 提供的答案是正确的。我认为在我的代码中我重试创建一个存储桶——期望优雅地失败——它确实有 99.99% 的时间会抛出这个错误。再次非常感谢您抽出时间来帮助我。欢呼!
感谢您的跟进。祝你好运!

F
Faisal Mansoor

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

创建了一个存储桶 - 它默认转到美国地区(使用 AWSCLI)实现,存储桶应转到欧盟地区并删除它(使用 AWS 控制台)(几分钟后)尝试创建存储桶,指定欧盟地区

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

所以我猜,美国的桶被删除了,但可能有一些同步过程,这需要时间。我希望,等待几个小时后,我会再次找到可用于创建的存储桶名称 - 这次是在适当的(欧盟)区域。

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


我刚刚遇到了同样的情况。如果我能在接下来的一个小时左右创建我的存储桶,我会回复。
我可以确认这一点。大约花了 1.5 小时,并且不能保证其他人不会在此期间获取存储桶名称,但是您可以在合理的时间内将其取回,并且运气好。
我同意@jan 解决这个问题:使用新名称创建一个新存储桶,在命名新存储桶时不要使用已删除存储桶的名称。
对我来说,只用了不到 70 分钟。
亚马逊表示,它可能需要长达 10 小时forums.aws.amazon.com/thread.jspa?threadID=37532
D
Dmitry Shmakov

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

如果您删除了存储桶,要在新区域中重新创建,请不要“手动”等待此后台同步完成,而是放置一个小型 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' )并尽快 - 会为您创建它,因此没有人可以错误地窃取您的存储桶名称 :)

希望能帮助到你 :)


谢谢你!在我的实例中,我已经在 aws 配置中定义了区域并运行脚本,结果导致以下错误:UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 17: ordinal not in range(128)。解决方案是删除 --region 标志。
霍罗修!!!!!!!!!
更简单:-) until aws s3 mb aws s3 mb s3://your.bucket.name --region us-west-2; do echo "Trying again.."; sleep 5; done
G
Guy

您的示例中的请求是创建一个存储桶。如果您尝试创建太多存储桶或替换存储桶,则它不健康。

请注意,您对一个帐户有 100 个存储桶的限制(请参阅 here)。编辑:现在这个限制是一个“软限制”,如果需要,你可以增加它。

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

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

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

无论如何,当使用一个注定会不时失败的系统时,您应该能够处理错误并在收到此类错误时减慢您的进程。在 AWS Docs 中查看更多详细信息。


S
Srivignesh KN

此错误通常发生在删除 Bucket 并创建与旧 Bucket 同名的新 Bucket 时。

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


s
sigmaxf

简单明了:更改新的存储桶名称或等待 1 小时。


D
Dmitriy Popov

最后,AWS 现在在自己的知识中心有了明确的答案,请参阅https://aws.amazon.com/premiumsupport/knowledge-center/s3-conflicting-conditional-operation/

我刚刚删除了一个存储桶(因为 S3 存储桶名称是全局唯一的,我需要在另一个 AWS 账户中创建相同的存储桶)并且我创建具有相同名称的存储桶的脚本失败并出现相同的错误。所以我必须耐心等待一个小时。

作为确认:大约一个小时后,我可以成功创建一个与已删除存储桶同名的存储桶。


v
vel12171

更改您的存储桶名称或等待。我等了不到 30 分钟。我不需要更改名称,也无法更改它,因为我已经设置好了 - 它必须与我已经存在的域名相匹配,以用于我正在寻找托管的静态网站。无论如何,在不到 30 分钟的时间内,它就自动创建了。


J
John Mee

当您的账户中已有超过 100 个存储桶时,您也会收到此消息。有 100 个存储桶的软限制。


J
Jeremy Thompson

我在运行 Cloud Formation 模板时遇到错误。

原来 EC2 假设我正在运行 CFN 模板的 IAM 角色没有创建 S3 存储桶的权限。

提供 IAM 访问权限,或者通过执行具有创建 S3 存储桶的必要权限的 AWS Configureprogrammatically assume a role 来使用不同的 IAM 角色。


W
William Crossland

我遇到了这个。我创建了一个存储桶,然后意识到我在错误的区域创建了存储桶:us-west-2

但是,它应该在 us-east-1 中。我删除了错误的存储桶,然后尝试在正确的区域重新创建它。

此命令每 10 秒运行一次存储桶创建命令(MacOS 或 Linux)。花了一个多小时才成功。

watch -n 10 aws s3api create-bucket --bucket com.xenial.deploy.uat-us-east-1 --region us-east-1

关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅