我们需要将存储桶的内容复制到不同 AWS 区域的新账户。
该存储桶包含 ±200K 对象,其中大部分已归档(Glacier),其中很大一部分相当大(>10GB)。
首先我们尝试了以下方法:
这对于较小的对象(最多 ~2GB)效果很好,但较大的对象需要比允许的最大 Lambda 持续时间(15 分钟)更长的时间。
要完成其余部分(>10K 对象),我们必须使用一些 VM,但是 VM 被迫位于 VPC 中,并且由于某种原因 boto3 无法处理 VPC 内的跨区域复制命令:
An error occurred (AccessDenied) when calling the UploadPartCopy operation: VPC endpoints do not support cross-region requests
因此我们采取下载和上传每个对象的方法。对于我们需要复制的对象数量来说,这花费的时间太长了。
谁能提供更好的解决方案?
注意#1:AWS 有一个名为“批处理作业”的功能,可能与之相关,但配置起来有点困难,并且由于某种原因需要源存储桶和目标存储桶都启用版本控制(在本例中禁用)。
注意#2:我们在目标帐户上有一个角色,该角色可以访问源帐户,并且调用 S3 请求时请求者会为其付费。
最终我们确实使用了DataSync。需要注意的是,您需要在运行 DataSync 任务之前手动恢复对象。
有关如何操作的 AWS 教程位于此处。