我在 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"
}
]
}