如何以最低的成本在两个S3存储桶之间移动文件?

Modified on: Sat, 17 Aug 2019 01:40:02 +0800

我在Amazon S3存储桶中有数百万个文件,如果可能的话,我希望以最低的成本或无成本将这些文件移动到其他存储桶和文件夹。所有铲斗都在同一区域。

我怎么能这样做?

最佳答案

数百万是一个很大的数字 - 我稍后会再回过头来看。

无论您的方法如何,底层机制都需要直接从一个存储桶复制到另一个存储桶 - 这样(因为您的存储桶位于同一区域),您不会对带宽产生任何费用。任何其他方法效率都很低(例如下载和重新上载文件)。

通过使用'PUT copy'来完成存储桶之间的复制 - 这是一个包含'x-amz-copy-source'标头的PUT请求 - 我相信这被归类为COPY请求。这将复制文件,默认情况下复制关联的元数据。如果要同时设置ACL,则必须包含具有正确值的'x-amz-acl'(否则,它将默认为私有)。我们将向您收取COPY请求(0.01美元/ 1,000美元请求)。您可以在复制后删除不需要的文件(不收取DELETE请求)。 (有一点我不太清楚,COPY请求是否也会产生GET请求,因为必须首先从源桶获取对象 - 如果有,则额外收费0.01美元/ 10,000请求)。

以上费用似乎是不可避免的 - 对于100万件物品,你看到的价格大约是10美元(或11美元)。因为最终你必须在目标存储桶上实际创建文件,其他方法(例如tar-gzipping文件,Amazon Import / Export等)将不会绕过这个成本。尽管如此,如果您有超过几百万个要转移的对象,那么在与亚马逊联系时可能是值得的。

考虑到上述(不可避免的价格),接下来要考虑的是时间,这将是复制“数百万个文件”的一个重要因素。所有可以在存储桶之间执行直接复制的工具都会产生相同的费用。不幸的是,每个文件需要一个请求(要复制),一个删除请求,可能需要一个读取ACL数据的请求(如果您的文件有不同的ACL)。最好的速度将来自任何可以运行最平行的操作。

有一些命令行方法可能非常可行:

  • s3cmd-modification(特定的拉取请求)包括并行的cp和mv命令,应该是对你来说是个不错的选择。
  • AWS控制台可以直接执行复制 - 但我不能说它的平行程度。
  • Tim Kay的aws脚本可以复制 - 但它不是并行的 - 您需要编写脚本运行你想要的完整副本(在这种情况下可能不是最佳选择 - 虽然,这是一个很棒的脚本)。
  • CloudBerry S3 ExplorerBucket ExplorerCloudBuddy应该都能够执行任务,虽然我不知道每个堆栈的效率如何。我相信虽然大多数这些的多线程功能需要购买该软件。
  • 使用其中一个可用的SDK编写自己的脚本。

s3fs可能有用 - 它非常平行,支持同一个存储桶之间的副本 - 不支持不同存储桶之间的副本,但可能支持不同存储桶之间的移动。

我将从s3cmd-modification开始,看看你是否取得了成功,或者联系亚马逊寻求更好的解决方案。

作者:cyberx86

相关问答

添加新评论