有没有办法复制包含对象版本的S3存储桶?
我读到一种复制存储桶的方法是使用命令行工具
aws s3 sync s3://<source> s3://<dest>
但是,在源存储桶中,我有:
在同步桶中我有:
如您所见,版本ID为“null”。有没有办法制作100%完全相同的副本,包括版本ID?这对我们的备份/开发服务器很重要,因为我们的应用程序依赖于版本ID。 编辑:如果我在同步之前打开版本控制,我会得到版本ID与null不同。但是版本ID与原始版本中的版本不同,目标是保留版本ID。我也尝试了cp
命令,它产生了相同的结果。上述结果也记录在案here:
如果在目标存储桶上启用版本控制,Amazon S3会为要复制的对象生成唯一的版本ID。此版本ID与源对象的版本ID不同。 Amazon S3在响应中的x-amz-version-id响应标头中返回复制对象的版本ID。
如果您未在目标存储桶上启用版本控制或暂停版本控制,则Amazon S3生成的版本ID始终为空。
所以看起来aws没有提供保存版本ID的方法?如果是这样,是否有针对此的变通方法或第三方软件?
答案 0 :(得分:1)
否,您无法获得相同的版本ID,因为它们是唯一的,例如存储桶名称。这意味着即使保留了第三方工具,也无法编辑并给您相同的版本ID。 AWS会分配版本ID,并且无法通过API进行更改。
如果未在新存储桶上启用版本控制,则对象版本ID将报告为NULL
。正如您所提到的,这是正确的。您可以做的是存储旧版本ID和新版本ID,并将其视为别名。
这里是AWS Documentation的解释:
您必须在存储桶上明确启用版本控制。默认情况下,禁用版本控制。无论您是否启用了版本控制,存储桶中的每个对象都有一个版本ID。如果您尚未启用版本控制,则Amazon S3会将版本ID的值设置为null。如果您启用了版本控制,则Amazon S3为对象分配唯一的版本ID值。在存储桶上启用版本控制时,存储在存储桶中的对象将保持不变。版本ID(空),内容和权限保持不变。
启用和挂起版本控制是在存储桶级别完成的。启用存储桶的版本控制时,添加到存储桶的所有对象将具有唯一的版本ID。唯一的版本ID是随机生成的,是Unicode,UTF-8编码,URL就绪,不透明的字符串,最长为1024个字节。版本ID的示例为
3/L4kqtJlcpXroDTDmJ+rmSpXd3dIbrHY+MTRCxf3vjVBH40Nr8X8gdRQBpUMLUo
。仅Amazon S3生成版本ID。它们无法编辑。
答案 1 :(得分:1)
没有直接的方法可以这样做。但是您可以通过AWS Copy-Object API ref https://docs.aws.amazon.com/cli/latest/reference/s3api/copy-object.html
来实现遍历每个版本对象,捕获对象ID并复制到目标存储桶。
希望这会有所帮助