有没有办法为现有对象启用 Amazon S3 版本控制?

有没有办法为现有对象启用 Amazon S3 版本控制?

我在 AWS S3 对象版本控制上阅读的所有信息都特别提到了这一点:

在您设置版本控制状态之前存储在存储桶中的对象的版本 ID 为 null。启用版本控制后,存储桶中的现有对象不会发生变化。变化的是 Amazon S3 在未来请求中处理对象的方式。本节中的主题介绍了启用版本控制的存储桶中的各种对象操作。

来源

我目前在一个存储桶中大约有 2 TB(370K 个对象)的数据。我的理解是,如果我现在打开版本控制,那么将来的对象将被版本控制。我的问题是:现有对象怎么办?如果没有非版本控制,我是否会陷入困境,或者有没有办法在不下载/重新上传它们的情况下对它们进行版本控制?我在进行 Google Fu 时没有找到任何信息,所以想在这里 ping 集体。

谢谢。

答案1

抱歉,但是你被困住了。

必须启用版本控制才能访问以前的版本。

使用版本控制已禁用 或者使用版本控制暂停,您无法检索任何类型的更改日志。该文件只是被覆盖了。

如果nullBucket中已经存在某个版本,null则会覆盖该版本,如下图所示。

版本图
(来源:亚马逊

不启用任何版本控制也遵循同样的策略。但看起来更像这样:

没有版本控制
(来源:亚马逊

具有版本 ID 的对象null将继续被覆盖。如果 AWS 默认设置了版本控制,它们可能会耗尽空间。

更新:当您启用它时,存储桶中已有的项目将立即开始版本控制。

答案2

当您在存储桶上启用版本控制时,现有对象不会获得版本 ID。相反,它们的版本 ID 为null。任何先前的版本都不会“自动恢复”。

除此之外,现有的对象将来会像正常一样进行版本控制。

存储桶中添加或更改的新对象将被赋予唯一的版本 ID。

null启用版本控制后,如果列出对象的所有版本,您会注意到,如果原始版本在启用版本控制之前就已存在,则最后一个(最旧)版本的版本 ID 为。

答案3

当您在现有 S3 存储桶上启用版本控制时,版本控制会对现有对象“起作用”(取决于您究竟期望什么!)。

如果你删除了旧对象,它只会使用删除标记。你可以恢复该旧对象以通常的方式删除删除标记。删除后我看到的内容如下:

aws s3api list-object-versions --bucket my-example-bucket --prefix myfile

{
    "Versions": [
        {
            "ETag": "\"0123456789abcdef0123456789abcdef\"",
            "Size": 10,
            "StorageClass": "STANDARD",
            "Key": "myfile",
            "VersionId": "null",
            "IsLatest": false,
            "LastModified": "2020-07-02T12:59:44+00:00",
            "Owner": {
                "DisplayName": "aws-dev",
                "ID": "7930123456789abcdef0123456789abcdef0123456789abcdef0123456789abc"
            }
        }
    ],
    "DeleteMarkers": [
        {
            "Owner": {
                "DisplayName": "aws-dev",
                "ID": "7930123456789abcdef0123456789abcdef0123456789abcdef0123456789abc"
            },
            "Key": "myfile",
            "VersionId": "ABCDEFGHIJKLMN_ABCDEFGHIJKLMNOPQ",
            "IsLatest": true,
            "LastModified": "2020-07-02T13:06:53+00:00"
        }
    ]
}

相关内容