我从源存储桶中删除了文件。源和副本是同步的,都有删除标记。我删除源存储桶中的删除标记以恢复文件。但是文件在副本中被删除(有删除标记)。它是按设计:
如果DELETE请求指定要删除的特定对象版本ID,则Amazon S3将删除源存储桶中的该对象版本,但它不会复制目标存储桶中的删除(换句话说,它不会从中删除相同的对象版本)目的地桶)。此行为可保护数据免遭恶意删除。 https://docs.aws.amazon.com/AmazonS3/latest/dev/crr-what-is-isnot-replicated.html
我需要一个一致的副本来进行故障转移。如何防止副本中的不一致?
我看到了保存一致性的唯一方法:
永远不要删除对象版本,包括删除标记。
重新上载对象(创建新版本)以恢复它,而不是删除删除标记。
我理解这个问题并认为值得添加这些信息,即使你的问题已经有一段时间了。在源存储桶不可用且您想要从副本还原的灾难恢复方案中,仍然在副本中闲置的“旧”文件(应该已删除)是一个真正的问题。这与恢复方案的不同之处在于,有人已经意外地进行了大量删除(如果删除没有发生,那将会很好)。
目前桶复制处于V2。您可以启用V1复制,它允许复制删除。似乎AWS希望通过禁用删除复制来保护我们自己,但有时它是重要且正确的(特别是当版本控制到位时)。
用于启用V1的相关AWS资源:
https://docs.aws.amazon.com/cli/latest/reference/s3api/put-bucket-replication.html
希望能帮助别人。