更快的s3桶重复

时间:2011-01-11 21:48:59

标签: amazon-web-services amazon-s3

我一直在努力寻找一个比s3cmd更好的复制存储桶的命令行工具。 s3cmd可以复制存储桶,而无需下载和上传每个文件。我通常使用s3cmd复制存储桶的命令是:

s3cmd cp -r --acl-public s3://bucket1 s3://bucket2

这很有效,但它很慢,因为它一次通过API复制每个文件。如果s3cmd可以并行运行,我会非常高兴。

还有其他选项可用作命令行工具或人们用来复制比s3cmd更快的存储桶的代码吗?

编辑:看起来s3cmd-modification正是我正在寻找的。太糟糕了它不起作用。还有其他选择吗?

7 个答案:

答案 0 :(得分:140)

AWS CLI似乎完美地完成了这项工作,并且有额外的官方支持工具。

aws s3 sync s3://mybucket s3://backup-mybucket

http://docs.aws.amazon.com/cli/latest/reference/s3/sync.html

默认情况下支持并发传输。见http://docs.aws.amazon.com/cli/latest/topic/s3-config.html#max-concurrent-requests

要快速传输大量小文件,请从EC2实例运行脚本以减少延迟,并增加max_concurrent_requests以减少延迟的影响。例如:

aws configure set default.s3.max_concurrent_requests 200

答案 1 :(得分:62)

如果您不介意使用AWS控制台,您可以:

  1. 选择第一个存储桶中的所有文件/文件夹
  2. 点击操作>复制
  3. 创建一个新存储桶并选择它
  4. 点击操作>粘贴
  5. 它仍然相当慢,但你可以不管它,让它做它的事情。

答案 2 :(得分:23)

我尝试使用AWS Web控制台s3cmd和AWS CLI克隆两个存储桶。虽然这些方法大部分时间都有效,但它们的速度很慢。

然后我发现了s3s3mirror:一个用于同步两个S3存储桶的专用工具。它是多线程的,比我尝试的其他方法快得多。我迅速将Giga字节的数据从一个AWS区域移动到另一个AWS区域。

https://github.com/cobbzilla/s3s3mirror查看,或从https://registry.hub.docker.com/u/pmoust/s3s3mirror/

下载Docker容器

答案 3 :(得分:9)

对于特殊解决方案,请使用aws cli在存储桶之间进行同步:

aws s3 sync速度取决于:
- 对S3端点的API调用的延迟
- 并发

中的API调用量

提高同步速度:
- 从AWS实例运行aws s3 sync(FreeBSD上的c3.large正常;-))
- 用〜:更新〜/ .aws / config    - max_concurrent_requests = 128
   - max_queue_size = 8096

使用以下配置和实例类型我能够在474秒内同步存储桶(309GB,72K文件,us-east-1)。

对于更通用的解决方案,请考虑 - AWS DataPipeLine或S3跨区域复制。

答案 4 :(得分:3)

我不知道任何其他S3命令行工具,但如果这里没有任何内容,那么编写自己的工具可能最简单。

选择您喜欢的语言和Amazon SDK / Toolkit。然后你只需要列出/检索源存储桶内容并复制每个文件(显然并行)

查看s3cmd-modification的来源(我承认我对python一无所知),看起来他们没有并行化桶到桶代码,但也许你可以使用标准的上传/下载并行代码作为这样做的起点。

答案 5 :(得分:3)

由于这是关于Google首次涉及此主题,请添加额外信息。

'Cyno'制作了更新版本的s3cmd-modification,现在支持并行的bucket-to-bucket同步。正是我在等待的东西。

拉取请求位于https://github.com/pcorliss/s3cmd-modification/pull/2,其版本位于https://github.com/pearltrees/s3cmd-modification

答案 6 :(得分:1)

简单的aws s3 cp s3://[original-bucket] s3://[backup-bucket] --recursive很好用(假设您有aws cli设置)

相关问题