我使用 AWS Command Line Interface (AWS CLI) 同步命令在 Amazon Simple Storage Service (Amazon S3) 上傳輸資料。但是,傳輸需要很長時間才能完成。
解決方案
sync 命令會比較來源儲存貯體和目標儲存貯體,以判斷哪些來源檔案不存在於目標儲存貯體中。sync 命令還會判斷與目標儲存貯體中的檔案相比修改了哪些來源檔案。接著,它會將新的或更新的來源檔案複製到目的地儲存貯體。
來源儲存貯體和目標儲存貯體中的物件數量可能會影響 sync 命令完成程序所需的時間。傳輸大小可能會影響同步的持續時間或您從 Amazon S3 請求產生的成本。
刪除標記也會影響清單效能,所以最佳實務是將刪除標記的數量降至最低。因為 sync 命令會在後端執行 List API 呼叫,刪除標記也會影響 sync 命令的效能。
若要在執行 sync 命令時改善傳輸時間,請實作下列實務。
執行 AWS CLI 的多個執行個體
若要複製大量資料,請執行 AWS CLI 的多個執行個體,以平行執行個別的同步操作。例如,您可以針對不同的字首執行平行同步作業:
aws s3 sync s3://source-AWSDOC-EXAMPLE-BUCKET/folder1 s3://destination-AWSDOC-EXAMPLE-BUCKET/folder1
aws s3 sync s3://source-AWSDOC-EXAMPLE-BUCKET/folder2 s3://destination-AWSDOC-EXAMPLE-BUCKET/folder2
**注意:**如果您在執行 AWS CLI 命令時收到錯誤,請確定您使用的是最新版本的 AWS CLI。
或者,針對個別排除和包括篩選條件執行平行同步作業。例如,下列作業會依照以數字 0 到 4 開頭的索引鍵名稱,以及數字 5 到 9 的索引鍵名稱來分隔要同步的檔案:
注意:即使您使用排除和包括篩選條件,sync 命令仍會審核來源儲存貯體中的所有檔案。此審核有助於識別要將哪些來源檔案複製到目的地儲存貯體。如果您有多個針對不同索引鍵名稱字首的同步作業,則每個 sync 作業都會審核所有來源檔案。但是,由於排除和包括篩選條件,只有包括在篩選條件中的檔案才會複製到目的地儲存貯體。
aws s3 sync s3://source-AWSDOC-EXAMPLE-BUCKET/ s3://destination-AWSDOC-EXAMPLE-BUCKET/ --exclude "*" --include "0*" --include "1*" --include "2*" --include "3*" --include "4*"
aws s3 sync s3://source-AWSDOC-EXAMPLE-BUCKET/ s3://destination-AWSDOC-EXAMPLE-BUCKET/ --exclude "*" --include "5*" --include "6*" --include "7*" --include "8*" --include "9*"
如需最佳化工作負載效能的詳細資訊,請參閱最佳實務設計模式:最佳化 Amazon S3 效能。
修改 max_concurrent_requests 的 AWS CLI 組態值
若要盡可能改善效能,請修改 max_concurrent_requests 的值。此值可設定一次可傳送至 Amazon S3 的請求數量。預設值為 10,不過您可以將其增加到更高的值。但是,請注意下列限制:
(選擇性) 檢查執行個體組態
如果您使用 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體執行同步作業,請使用下列最佳實務:
相關資訊
如何提高在 S3 儲存貯體和 EC2 執行個體之間複製資料的傳輸速率?
將大量資料從一個 Amazon S3 儲存貯體傳輸到另一個儲存貯體的最佳方式是什麼?