更快的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控制台,则可以:
- select第一个桶中的所有文件/文件夹
- 单击操作>复制
- 创build一个新的桶并select它
- 点击操作>粘贴
它还是相当的慢,但你可以放弃它,让它做它的事情。
我试过使用AWS Web控制台,s3cmd和AWS CLI克隆两个存储桶。 尽pipe这些方法大部分时间都在使用,但是它们的速度很慢。
然后我find了s3s3mirror–一个同步两个S3存储桶的专门工具。 它是multithreading的,比我尝试的其他方法快很多。 我迅速将GB数据从一个AWS区域移动到另一个区域。
我不知道任何其他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跨区域复制。