Storage

如何以最低成本在兩 個 S3 儲存桶之間移動文件?

  • March 21, 2018

我在 Amazon S3 儲存桶中有數百萬個文件,我想以最低成本或盡可能免費將這些文件移動到其他儲存桶和文件夾。所有儲存桶都在同一個區域中。

我怎麼能做到?

百萬是一個很大的數字——我稍後再談。

無論您採用哪種方法,底層機制都需要直接從一個儲存桶複製到另一個儲存桶 - 這樣(因為您的儲存桶位於同一區域)您不會產生任何頻寬費用。任何其他方法都是低效的(例如下載和重新上傳文件)。

桶之間的複制是通過使用“PUT copy”完成的——這是一個包含“x-amz-copy-source”標頭的 PUT 請求——我相信這被歸類為 COPY 請求。這將復製文件和預設情況下關聯的元數據。如果您想同時設置 ACL,則必須包含一個具有正確值的“x-amz-acl”(否則,它將預設為私有)。您需要為您的 COPY 請求付費( $ 0.01/1,000 requests). You can delete the unneeded files after they have been copied (DELETE requests are not charged). (One point I am not quite clear on is whether or not a COPY request also incurs the charge of a GET request, as the object must first be fetched from the source bucket - if it does, the charge will be an additional $ 0.01/10,000 個請求)。

上述費用似乎是不可避免的 - 對於您正在查看的一百萬個物體 $ 10 (or $ 11)。由於最終您必須在目標儲存桶上實際創建文件,因此其他方法(例如 tar-gzip 壓縮文件、Amazon Import/Export 等)將無法繞過此成本。儘管如此,如果您有超過幾百萬件物品要轉移,那麼聯繫亞馬遜可能是值得的。

鑑於上述情況(不可避免的代價),接下來要研究的是時間,這將是複制“數百萬個文件”時的一個重要因素。所有可以在儲存桶之間執行直接複製的工具都將產生相同的費用。不幸的是,每個文件需要一個請求(複製),一個刪除請求,可能還有一個讀取 ACL 數據的請求(如果您的文件具有不同的 ACL)。最好的速度將來自任何可以執行最多並行操作的東西。

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

  • s3cmd-modification(特定的拉取請求)包括並行 cp 和 mv 命令,應該是您的不錯選擇。
  • AWS 控制台可以直接執行複制——但我不能說它有多並行。
  • Tim Kay 的 aws腳本可以進行複制 - 但它不是並行的 - 您需要編寫腳本來執行所需的完整副本(在這種情況下可能不是最佳選擇 - 儘管它是一個很棒的腳本)。
  • CloudBerry S3 ExplorerBucket ExplorerCloudBuddy應該都能夠執行任務,雖然我不知道每個的效率如何疊加。我相信雖然其中大多數的多執行緒功能需要購買軟體。
  • 使用可用的 SDK 之一編寫您自己的腳本。

s3fs 有可能工作 - 它非常並行,支持同一個桶之間的副本 - 不支持不同桶之間的副本,但可能支持不同桶之間的移動。

我將從 s3cmd-modification 開始,看看您是否成功或聯繫亞馬遜尋求更好的解決方案。

引用自:https://serverfault.com/questions/349460