帶有 aws cli 的 xargs(亞馬遜 s3 副本)
我正在嘗試加快在我的帳戶中的 2 個 S3 儲存桶之間複製數百個文件的過程。
Bucket1 dt=2017-01-01/ file1, file2, file3 ... file100 .. .. dt=2017-01-31/
每個文件大約為 300-400 MB,在某些情況下甚至為 1 GB。
現在,我需要將它們複製到第二個儲存桶,即具有相同結構的儲存桶 2。
我嘗試使用 aws cli 命令,但這很慢 -
aws s3 cp s3://Bucket1/ s3://Bucket2/ --recursive
接下來,我嘗試使用帶有 & - 的腳本啟動並行程序
while read line do aws s3 cp s3://Bucket1/${line} s3://Bucket2/${line} --recursive & done < date-list Contents of date-list dt=2017-01-01/ dt=2017-01-02/ .. ..
即使這也不是太大的改進,我也沒有看到所有文件夾都被複製了。在 2017-01-05 之後,它有點停止了。想知道為什麼。
在尋找可能的解決方案時,我發現了 AWS 的這個部落格,他們似乎在使用 xargs https://aws.amazon.com/blogs/apn/getting-the-most-out-of-the-amazon-s3-命令行/
所以我修改了腳本以使用 xargs 代替 -
while read line do echo ${line} | xargs -n1 -P100 -I {} aws s3 cp s3://Bucket1/{} s3://Bucket2/{} --recursive done < date-list
有沒有辦法可以觸發特定月份所有日子的並行副本?然後,也許以後,整年。現在,它每天都在複製,考慮到全年+需要複製的數據,它仍然很慢。
真的很感激任何指示。
根據 Amazon 的說法,您通過 AWS CLI 進行並行呼叫是正確的。 亞馬遜絕對推薦它作為一種性能優化技術。
您是否嘗試在配置中或呼叫腳本時設置最大並發請求?
這是我的一個班輪:
$ seq 0 93 | xargs -I {} date -d "2017-01-01 {} days" +%Y-%m-%d | xargs -I {} -P31 aws s3 cp s3://source_bucket/dt={}/ s3://dest_bucket/dt={}/ --recursive --no-progress
您可以使用命令設置總天數
seq
(約 3 個月 93 天)並使用-P
標誌設置並行呼叫數(一次約 30 天)。我使用該
--no-progress
選項而不是該--quiet
選項,因為我可以將命令的輸出通過管道傳輸到成功傳輸的日誌文件。