AWS S3 跨区域复制删除操作行为的状态

rom*_*ain 10 amazon-s3 amazon-web-services

我很惊讶地发现在 S3 存储桶跨区域复制情况下没有复制文件删除,运行这个简单的测试:

  1. CRR 的最简单配置
  2. 上传一个新文件
  3. 检查它是否被复制
  4. 删除文件(不是文件的版本)

所以我检查了文档,我发现了这个声明:

如果您从源存储桶中删除对象,则会发生以下情况:

  • 如果您在未指定对象版本 ID 的情况下发出 DELETE 请求,Amazon S3 会添加删除标记。Amazon S3 处理删除标记如下:
    • 如果使用最新版本的复制配置,即您在复制配置规则中指定 Filter 元素,Amazon S3 不会复制删除标记。
    • 如果未指定 Filter 元素,Amazon S3 将假定复制配置是先前版本 V1。在早期版本中,Amazon S3 以不同方式处理删除标记的复制。有关更多信息,请参阅向后兼容性

后面的向后兼容链接告诉我:

  • 当您从源存储桶中删除对象而不指定对象版本 ID 时,Amazon S3 会添加删除标记。如果您使用复制配置 XML 的 V1,Amazon S3 会复制由用户操作产生的删除标记。[...] 在 V2 中,Amazon S3 不复制删除标记,因此您必须将 DeleteMarkerReplication 元素设置为 Disabled。

所以如果我总结一下:

  • 如果没有过滤器,CRR 配置被认为是 v1
  • 使用 CRR 配置 v1,复制文件删除,而不是 v2

嗯,这是我的配置:

{
    "ReplicationConfiguration": {
        "Role": "arn:aws:iam::271226720751:role/service-role/s3crr_role_for_mybucket_to_myreplica",
        "Rules": [
            {
                "ID": "first replication rule",
                "Status": "Enabled",
                "Destination": {
                    "Bucket": "arn:aws:s3:::myreplica"
                }
            }
        ]
    }
}
Run Code Online (Sandbox Code Playgroud)

并且不会复制删除。所以这让我觉得我的配置仍然被认为是 V2(即使我没有过滤器)。


那么,有人可以证实这个假设吗?谁能告诉我有什么作用:

在 V2 中,Amazon S3 不复制删除标记,因此您必须将 DeleteMarkerReplication 元素设置为 Disabled

真正的意义?

Joh*_*ein 2

我见过完全相同的行为。我无法创建 v1 情况来进行删除标记复制。