更快的s3桶重复

我一直在试图find一个比s3cmd更好的命令行工具来复制桶。 s3cmd可以复制桶而不必下载和上传每个文件。 我通常运行的使用s3cmd复制桶的命令是:

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

这可以起作用,但是每次通过API拷贝一个文件的速度非常慢。 如果s3cmd可以并行运行,我会非常高兴。

是否有其他选项作为命令行工具或代码用于复制比s3cmd更快的存储桶?

编辑:看起来像s3cmd修改正是我要找的。 太糟糕了,这是行不通的。 还有其他的select吗?

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实例运行以减less延迟,并增加max_concurrent_requests以减less延迟的影响。 例如

 aws configure set default.s3.max_concurrent_requests 200 

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

  1. select第一个桶中的所有文件/文件夹
  2. 单击操作>复制
  3. 创build一个新的桶并select它
  4. 点击操作>粘贴

它还是相当的慢,但你可以放弃它,让它做它的事情。

我试过使用AWS Web控制台,s3cmd和AWS CLI克隆两个存储桶。 尽pipe这些方法大部分时间都在使用,但是它们的速度很慢。

然后我find了s3s3mirror–一个同步两个S3存储桶的专门工具。 它是multithreading的,比我尝试的其他方法快很多。 我迅速将GB数据从一个AWS区域移动到另一个区域。

通过https://github.com/cobbzilla/s3s3mirror检查它,或从https://registry.hub.docker.com/u/pmoust/s3s3mirror/下载Docker容器;

我不知道任何其他S3命令行工具,但如果没有在这里出现,它可能是最简单的写你自己的。

select你喜欢的任何语言和Amazon SDK / Toolkit。 那么你只需要列出/检索源桶内容并复制每个文件(显然并行)

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

因为这是谷歌在这个问题上的第一个打击,增加额外的信息。

“Cyno”提出了更新版本的s3cmd-modification,现在支持并行桶到桶同步。 到底是什么,我也在等待。

拉请求在https://github.com/pcorliss/s3cmd-modification/pull/2 ,他的版本在https://github.com/pearltrees/s3cmd-modification

对于adhoc解决scheme,使用aws cli在桶之间进行同步:

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

要增加同步速度:
– 从AWS实例运行aws s3 sync (FreeBSD上的c3.large是可以的;-))
– 更新〜/ .aws /configuration与:
max_concurrent_requests = 128
max_queue_size = 8096

使用以下configuration和实例types,我可以在474秒内同步存储桶(309GB,72K文件,us-east-1)。

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