Amazon web services 更快的s3存储桶复制

Amazon web services 更快的s3存储桶复制,amazon-web-services,amazon-s3,Amazon Web Services,Amazon S3,我一直在努力寻找一个更好的命令行工具来复制存储桶s3cmd可以复制存储桶,而无需下载和上载每个文件。我通常使用s3cmd运行复制bucket的命令是: s3cmd cp -r --acl-public s3://bucket1 s3://bucket2 这是可行的,但速度非常慢,因为它通过API一次复制一个文件。如果s3cmd能够以并行模式运行,我将非常高兴 是否有其他选项可作为命令行工具或代码使用,以复制比s3cmd更快的存储桶 编辑:看起来正是我要找的。可惜它不起作用。还有其他选项吗?我不

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

s3cmd cp -r --acl-public s3://bucket1 s3://bucket2
这是可行的,但速度非常慢,因为它通过API一次复制一个文件。如果
s3cmd
能够以并行模式运行,我将非常高兴

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


编辑:看起来正是我要找的。可惜它不起作用。还有其他选项吗?

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

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


查看源代码(我承认我对python一无所知),看起来他们还没有将bucket-to-bucket代码并行化,但也许您可以使用标准的上传/下载并行代码作为起点来实现这一点。

因为这是谷歌在这个主题上的第一次尝试,添加了额外的信息

“Cyno”对s3cmd进行了更新版本的修改,现在支持并行bucket-to-bucket同步。也正是我在等待的


拉动请求位于,其版本位于

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

  • 选择第一个bucket中的所有文件/文件夹
  • 单击操作>复制
  • 创建一个新的bucket并选择它
  • 单击操作>粘贴

  • 它仍然相当慢,但是您可以让它自己去做它自己的事情。

    AWS CLI似乎可以完美地完成这项工作,并且作为一个官方支持的工具,它还具有额外的优势

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

    默认情况下支持并发传输。看

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

    aws configure set default.s3.max_concurrent_requests 200
    

    我尝试过使用AWS web控制台克隆两个bucket,即
    s3cmd
    和AWS CLI。尽管这些方法大部分时间都有效,但速度却慢得令人痛苦

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


    请访问查看,或从下载Docker容器以获取临时解决方案使用aws cli在存储桶之间同步:

    aws s3同步
    速度取决于:
    -对S3端点的API调用的延迟
    -并发进程中进行的API调用的数量

    要提高同步速度:
    -从aws实例运行
    aws s3 sync
    (FreeBSD上的c3.large可以;-)
    -更新~/.aws/config时使用:
    --
    max\u concurrent\u requests=128

    --
    max\u queue\u size=8096

    通过以下配置和实例类型,我能够在474秒内同步bucket(309GB,72K文件,us-east-1)


    对于更通用的解决方案,考虑AWS DATAPIPLIN或S3跨区域复制。< > P>简单的<代码> AWS S3 CP S3://[原始桶] S3://[备份桶] -递归< /代码>工作良好(假设您有AW-CLI设置)

    是。我一直在玩弄这个想法,用ruby用事件机以事件方式编写它,或者用JRuby线程编写它。然而,s3cmd已经相当完整,我宁愿使用它。我一直在与s3cmd的开发人员交谈,他有两个解决方案可能会解决性能问题。我不知道为什么这个问题会一再被解决,因为似乎很多开发人员都遇到过这个问题。无论如何,我以高度并行的方式解决了这个问题,下面是链接:谢谢jonathan.s3cmd-modification为我节省了数天的复制时间。这是在将源存储桶的内容复制到目标计算机时将其复制到我的计算机上吗?有很多网络活动,而且浏览器检查器非常慢,因此很难进行分析。在我的机器上输出600K/s。这样在亚马逊网络内启动传输就会快得多。。。我要去试试。我今天刚用过这个方法。它不会把文件拉到本地机器上,而是直接拷贝,速度快得多。它仍然会获取文件列表。如果列表太长(在我的例子中有成千上万个文件),那么它的速度就非常慢。超时/挂起极有可能是由于此过程与浏览器相关:(From:“启动复制过程后,必须在复制过程中保持浏览器打开。”我正试图在一个包含800万个文件的存储桶上进行此操作。我不知道选择所有复选框需要多少个月…它支持基于文件修改时间、大小等的非并发同步。我尝试时速度非常快。我相信这些对象是直接在S3上复制的,而无需下载到本地机器上。它没有默认情况下,sn不会并行运行,但我相信您可以在不同的子文件夹上同时运行多个同步命令。它的速度足够快,您可能不需要它并行运行。我只是在几分钟内复制了100GB的数据。如果文件数太多,则速度会非常慢。传输许多小文件时,延迟会降低mes是关键约束,因此从EC2实例运行此命令是必不可少的。我使用此命令构建docker,现在运行得非常好,它确实支持并发同步:-)如果您有大量文件要传输,这是迄今为止用于此项工作的最佳工具。遗憾的是,它在答案列表中的位置太低了……有些人注意:需要Java 6/7来编译。我正在使用