![有没有办法为现有对象启用 Amazon S3 版本控制?](https://linux22.com/image/679452/%E6%9C%89%E6%B2%A1%E6%9C%89%E5%8A%9E%E6%B3%95%E4%B8%BA%E7%8E%B0%E6%9C%89%E5%AF%B9%E8%B1%A1%E5%90%AF%E7%94%A8%20Amazon%20S3%20%E7%89%88%E6%9C%AC%E6%8E%A7%E5%88%B6%EF%BC%9F.png)
我在 AWS S3 对象版本控制上阅读的所有信息都特别提到了这一点:
在您设置版本控制状态之前存储在存储桶中的对象的版本 ID 为 null。启用版本控制后,存储桶中的现有对象不会发生变化。变化的是 Amazon S3 在未来请求中处理对象的方式。本节中的主题介绍了启用版本控制的存储桶中的各种对象操作。
我目前在一个存储桶中大约有 2 TB(370K 个对象)的数据。我的理解是,如果我现在打开版本控制,那么将来的对象将被版本控制。我的问题是:现有对象怎么办?如果没有非版本控制,我是否会陷入困境,或者有没有办法在不下载/重新上传它们的情况下对它们进行版本控制?我在进行 Google Fu 时没有找到任何信息,所以想在这里 ping 集体。
谢谢。
答案1
答案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"
}
]
}