【发布时间】:2020-01-22 11:51:33
【问题描述】:
我有一个包含许多对象的 S3 存储桶,想将它们复制到另一个 S3 存储桶。这不是直接同步,因为有几个要求:
- 我想简化对象键,以便将
/images/all/abcdef.png复制到/images/abcdef.png(去掉/all) - 并非所有文件都将被复制。对象键都列在文件中(每行一个键),因为不应复制许多旧键。
使用s3 命令行工具运行它非常慢。我使用了以下脚本:
#!/bin/bash
while read key; do
newkey=$(echo $key | sed 's/all\///g')
aws s3 cp s3://oldbucket/images/$key s3://newbucket/images/$newkey
done < $keys
每个文件需要一两秒钟,因此复制所有文件需要很多天(超过 100 万个对象)。注意我是从外部服务器而不是 AWS 机器运行它,尽管物理上很接近(Linode New Jersey 到 AWS US East 1)。这些对象是从大约 30KB 到 3MB 的图像。
我尝试拆分密钥文件并并行运行,但似乎并没有改变速度,不知道为什么。我也无法添加 S3 快速传输选项,因为原始存储桶有一个“。”在其中(S3 限制)。我想知道是否有更快的方法来做到这一点。
【问题讨论】:
-
您从哪里运行复制命令?它是否来自与存储桶位于同一区域的 Amazon EC2 实例?两个桶是否在同一个区域?物体的典型尺寸是多少? (随时编辑您的问题以添加这些详细信息。)
-
谢谢,更新了详细信息。
-
顺便说一句,我希望你能澄清
s3 cp的运作方式,因为我的印象是它只是推动对象而不下载和上传它们。在这种情况下,同步命令可能更有效,因为我很确定它只是在数据中心内复制,但同步不会处理密钥重命名。
标签: amazon-web-services amazon-s3