更快的s3桶重复

Sea*_*ary 88 amazon-s3 amazon-web-services

我一直试图找到一个比s3cmd更好的复制桶的命令行工具. s3cmd可以复制存储桶而无需下载和上传每个文件.我通常使用s3cmd复制存储桶的命令是:

s3cmd cp -r --acl-public s3://bucket1 s3://bucket2
Run Code Online (Sandbox Code Playgroud)

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

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

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

pyt*_*981 151

AWS CLI似乎完美地完成了这项工作,并且具有成为官方支持工具的好处.

aws s3 sync s3://mybucket s3://backup-mybucket
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

  • 传输许多小文件时,延迟成为关键约束,因此从EC2实例运行此命令至关重要. (12认同)
  • 如果文件数量很高,那就慢了. (10认同)
  • 它支持基于文件修改时间,大小等的非并发同步.当我尝试它时它非常快.我相信直接在S3上复制对象而不将它们下载到本地机器.默认情况下,它不会并行运行,但我确信您可以同时在单独的子文件夹上运行多个同步命令.它足够快,你可能不需要它并行运行.我只是在几分钟内复制了100GB的数据. (4认同)
  • 现在它支持并发同步:-) http://docs.aws.amazon.com/cli/latest/topic/s3-config.html#max-concurrent-requests (3认同)

dea*_*rds 65

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

  1. 选择第一个存储桶中的所有文件/文件夹
  2. 单击操作>复制
  3. 创建一个新存储桶并选择它
  4. 单击操作>粘贴

它仍然相当慢,但你可以不管它,让它做它的事情.

  • 不幸的是,这个过程与浏览器有关.:(来自[文档](http://docs.aws.amazon.com/AmazonS3/latest/UG/MakingaCopyofanObject.html):"在您启动复制过程后,您必须在副本正在进行时保持浏览器打开". (11认同)
  • 我今天刚用这个方法.它不会将文件拉到本地计算机 - 它可以直接复制并且速度更快. (9认同)
  • 它仍然获取文件列表.如果列表太长(在我的情况下有数十万个文件),那么它的速度很慢.超时/挂起极有可能 (6认同)
  • 我试图在一个包含800万个文件的存储桶中执行此操作.不知道要花几个月的时间来选择所有的复选框...... (3认同)

小智 24

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

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

请访问https://github.com/cobbzilla/s3s3mirror查看,或从https://registry.hub.docker.com/u/pmoust/s3s3mirror/下载Docker容器


Tom*_*ime 8

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

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

要提高同步速度:
- aws s3 sync从AWS实例运行(FreeBSD上的c3.large就可以了;-))
- 使用以下命令更新〜/ .aws/config:
- max_concurrent_requests = 128
-max_queue_size = 8096

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

有关更通用的解决方案,请考虑 - AWS DataPipeLine或S3跨区域复制.


Geo*_*ord 2

我不知道还有其他 S3 命令行工具,但如果这里没有出现任何问题,那么编写您自己的工具可能是最简单的。

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

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