复制期间 AWS S3 复制 DstObjectHardDeleted 错误

AWS S3 replication DstObjectHardDeleted error during replication

背景:我们目前正在尝试从一个 AWS 账户切换到另一个。这包括将 S3 存储桶的完整副本放入新帐户(包括所有历史版本和时间戳)。我们首先启动复制到新帐户的 S3 存储桶,运行 一个批处理作业来复制历史数据,然后对其进行测试。之后,我们清空存储桶以删除测试期间添加的数据,然后尝试重做 replication/batch 作业。

现在 AWS 似乎不会复制这些对象,因为它看到它们确实在某一时刻存在于存储桶中。查看批处理作业的输出,每个对象都显示:

{bucket} {key} {version} failed 500 DstObjectHardDeleted Currently object can't be replicated if this object previously existed in the destination but was recently deleted. Please try again at a later time

看到这个之后,我完全删除了目标存储桶并重新创建了它,希望它能清除之前的数据痕迹,然后我重试了。出现同样的错误。

我找不到关于此错误的任何信息,甚至在 AWS 文档中也找不到关于这是预期问题或潜在问题的确认信息。

谁能告诉我要等多久才能再次复制?一小时? 24?

AWS 中是否有任何关于此错误的文档?

有没有办法绕过这个限制?


更新:全天定期重试,但从未上传要复制。我还尝试复制到第三个存储桶,然后启动从该新存储桶到原始目标的复制。它抛出同样的错误。


更新 2:这个 post 是在星期五制作的。今天(下周一)重试作业,错误依旧。


更新3:可能是最后一次更新。简短版本是我放弃的,并制作了一个不同的桶来复制它。如果有人知道这方面的信息,我仍然很感兴趣,我不能再浪费时间了。

我们遇到了同样的事情,并尝试了您概述的相同过程。我们确实获得了一些桶以在第二个帐户复制批处理作业中成功,但最大的数据量略低于 200 万。我们不得不使用 aws cli 来同步数据或使用 DataSync 服务(这个过程仍在进行中,可能不得不 运行 多次打破记录)。

似乎在删除第一个帐户中的大型存储桶时,有关它们的元数据会保留很长时间。我们移动了大约 150 个数据量不同的桶。只有大约一半进入了执行两步复制的第二个帐户。所以我学到的教训是,如果你能控制你的桶的名称并在移动过程中改变它们,那就去做吧。

批量复制不支持目标存储桶中 hard-deleted(随对象版本一起删除)的 re-replicating 个对象。

以下是此限制的可能解决方法:

  • 使用批量复制作业将源对象复制到位。复制那些 现有对象将创建新版本的对象 源并自动启动到目标的复制。你 也可以使用自定义脚本在源代码中进行 in-place 复制 桶.

  • Re-replicate 这些源对象到 different/new 目标存储桶。

  • 运行 aws s3 同步命令。它会将对象复制到具有新版本 ID 的目标存储桶(源存储桶和目标存储桶中的版本 ID 将不同)。如果您要同步大量对象,运行 它在前缀级别并根据您的网络吞吐量确定复制所有对象的大致时间。 运行 命令在后台以“&”结尾。你也可以在实际复制之前做 dry运行。请参阅更多选项。

    aws s3 sync s3://SOURCE-BUCKET/prefix1 s3://DESTINATION-BUCKET/prefix1 --dryrun > output.txt

    aws s3 sync s3://SOURCE-BUCKET/prefix1 s3://DESTINATION-BUCKET/prefix1 > output.txt &

总而言之,您只能对新版本 ID 对象执行 S3 批量复制或 S3 复制到现有目标存储桶。要复制源存储桶的现有版本 ID 对象,您将必须使用 different/new 目标存储桶。