mah*_*off 4 amazon-s3 amazon-web-services
我有一个包含许多对象的 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
Run Code Online (Sandbox Code Playgroud)
每个文件需要一两秒的时间,因此复制所有文件(超过 100 万个对象)需要很多天的时间。注意:我是从外部服务器运行此程序,而不是 AWS 计算机,尽管物理上很接近(Linode 新泽西州到 AWS US East 1)。这些对象是大约 30KB 到 3MB 的图像。
我尝试过拆分密钥文件并并行运行,但似乎没有改变速度,不知道为什么。我也无法添加 S3 快速传输选项,因为原始存储桶有一个“.”。其中(S3 限制)。我想知道是否有更快的方法来做到这一点。
S3P 可能是目前(2020 年)复制 S3 文件最快的方法。我已经维持了高达8GB/秒的速度。
\n(免责声明:我写的。)
\n任意密钥重写
\n除了速度快之外,S3P 特别适合您的任务。S3P 允许您提供用 JavaScript 编写的任意密钥重写规则。例如,要从密钥中删除“/all/”,您可以执行以下操作:
\nnpx s3p cp \\\n --bucket my-bucket\\\n --to-bucket my-to-bucket\\\n --to-key "js:(key) => key.replace(\'/all/\', \'/\')"\nRun Code Online (Sandbox Code Playgroud)\n为什么S3P这么快?
\n我发现的每个工具都受到以下事实的阻碍:它们连续列出 S3 存储桶 - 请求 1000 个项目,等待,请求下一个 1000 个项目。我找到了一种使用 S3 API 并行化列表并显着加速任何涉及列出大量文件的 S3 操作的方法。
\n易于尝试
\n如果安装了 Node.js,您可以轻松尝试 s3p,只需打开终端并运行以下命令即可获取命令列表:
\nnpx s3p \nRun Code Online (Sandbox Code Playgroud)\n注意:虽然您可以从本地计算机运行此程序,并且它\xe2\x80\x99s 仍然非常快,但您\xe2\x80\x99 将通过与 S3 存储桶位于同一区域的大小合适的 EC2 实例获得最大性能(例如m5.xlarge)。
\n| 归档时间: |
|
| 查看次数: |
7261 次 |
| 最近记录: |