我想將所有物件從一個 Amazon Simple Storage Service (Amazon S3) 儲存貯體複製到或移至另一個儲存貯體。
簡短說明
若要將物件從一個 S3 儲存貯體複製到另一個儲存貯體,請選擇下列其中一個選項:
- 從 AWS Command Line Interface (AWS CLI) 執行 sync 命令
- 針對包含大量物件的儲存貯體使用 S3 批次操作
sync 命令適用於尺寸不會過大的儲存貯體。但是執行 sync 命令來複製包含數百萬物件的大型儲存貯體時,成本可能十分昂貴,而且複製作業可能會逾時。如果在複製儲存貯體時遇到逾時,請使用 Amazon CloudWatch 指標來計算儲存貯體中物件的大小和數量。如果您的 S3 儲存貯體中有數百萬個物件,最佳實務是使用 S3 Batch Operations 來複製您的物件。
**注意:**若要將物件從儲存貯體複製到其他 AWS 帳戶擁有的儲存貯體,請使用 AWS Identity and Access Management (IAM) 來設定跨帳戶權限。請確定您的 IAM 角色具有來源物件的 s3:GetObjectTagging 權限,以及目標物件的 s3:PutObjectTagging 權限。
若要提高同步效能並更快地複製物件,請執行下列一項或多項動作:
解決方法
注意: 如果您在執行 AWS CLI 命令時收到錯誤,請參閱對 AWS CLI 錯誤進行疑難排解。此外,請確定您使用的是最新的 AWS CLI 版本。
在 S3 儲存貯體之間複製物件
若要將物件從一個儲存貯體複製到另一個儲存貯體,請完成下列步驟:
-
如果您在 Amazon Simple Storage Service Glacier 儲存類別中封存了 S3 物件,請還原物件。
-
執行下列 sync 命令,但是使用您的 S3 儲存貯體名稱取代 example_source_bucket 和 example_target_bucket:
aws s3 sync s3://example_source_bucket s3://example_target_bucket
**注意:**sync 命令僅會複製尚未存在於目的地儲存貯體中的物件。若要明確複製每個物件,請使用 cp 命令而非 sync 命令。在已建立版本的儲存貯體上使用 sync 命令時,系統只會複製每個物件的目前版本。此行為預設會保留物件中繼資料。
-
(選用) 如果遇到逾時,請使用 CloudWatch get-metric-statistics 命令來計算儲存貯體大小和物件數量。
若要計算儲存貯體的大小,請執行下列命令:
aws cloudwatch get-metric-statistics --namespace AWS/S3 --metric-name BucketSizeBytes --dimensions Name=BucketName,Value=example_source_bucket Name=StorageType,Value=StandardStorage --start-time 2021-05-11T00:00 --end-time 2021-05-11T00:10 --period 3600 --statistics Average --unit Bytes --output json
若要計算儲存貯體中的物件數量,請執行下列命令:
aws cloudwatch get-metric-statistics --namespace AWS/S3 --metric-name NumberOfObjects --dimensions Name=BucketName,Value=example_source_bucket Name=StorageType,Value=AllStorageTypes --start-time 2021-05-11T00:00 --end-time 2021-05-11T00:10 --period 600 --statistic Average --output json
如果您的儲存貯體大小較大,而且包含數百萬個物件,請勿使用 sync 命令。反之,請在複製儲存貯體時使用 S3 Batch Operations。
**重要:**當您執行 sync 命令時,系統不會從來源儲存貯體將存取控制清單 (ACL) 複製到目的地儲存貯體。如果來源和目標儲存貯體都具有已啟用的 ACL,則目標物件 ACL 會向執行複製的帳戶授予 FULL_CONTROL。若要對 sync 命令問題進行疑難排解,請參閱為什麼不能在兩個 Amazon S3 儲存貯體之間複製物件?
確認已複製物件
若要確認物件是否已複製,請完成下列步驟:
- 若要驗證來源和目標儲存貯體的內容,請執行下列 ls 命令:
aws s3 ls --recursive s3://example_source_bucket --summarize > bucket-contents-source.txt
aws s3 ls --recursive s3://example_target_bucket --summarize > bucket-contents-target.txt
**注意:**ls 命令在大型儲存貯體上可能會出現逾時。針對大型儲存貯體,請使用 CloudWatch 指標來計算儲存貯體的大小和物件總數,而非使用 ls 命令。但是,因為每天只會提取一次 Amazon CloudWatch 指標,所以 CloudWatch 結果可能會與 ls 命令結果不同。
- 使用先前的 ls 命令輸出的文字檔案來比較來源儲存貯體和目標儲存貯體之間的物件。輸出類似於下列範例:
2017-11-20 21:17:39 15362 s3logo.png
Total Objects: 1 Total Size: 15362
**注意:**如果有應用程式或工作負載對來源儲存貯體進行 API 呼叫,請將這些 API 呼叫更新至目標儲存貯體。如果頻繁進行寫入,您可能需要執行 sync 命令以解決來源儲存貯體與目標儲存貯體之間的差異。
相關資訊
Amazon S3 定價
將物件複製到目錄儲存貯體
在 Amazon S3 中執行大量刪除後,如何針對無回應清單命令進行疑難排解?
如何從另一個 AWS 帳戶複製 Amazon S3 物件?