复制S3 Bucket包括版本

时间:2016-10-18 12:22:52

标签: amazon-web-services amazon-s3 copy version

有没有办法复制包含对象版本的S3存储桶?

我读到一种复制存储桶的方法是使用命令行工具

aws s3 sync s3://<source> s3://<dest>

但是,在源存储桶中,我有:

enter image description here

在同步桶中我有:

enter image description here

如您所见,版本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的方法?如果是这样,是否有针对此的变通方法或第三方软件?

2 个答案:

答案 0 :(得分:1)

  1. 否,您无法获得相同的版本ID,因为它们是唯一的,例如存储桶名称。这意味着即使保留了第三方工具,也无法编辑并给您相同的版本ID。 AWS会分配版本ID,并且无法通过API进行更改。

  2. 如果未在新存储桶上启用版本控制,则对象版本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并复制到目标存储桶。

希望这会有所帮助