如何將所有物件從一個 Amazon S3 儲存貯體複製到另一個儲存貯體?

2 分的閱讀內容
0

我想將所有物件從一個 Amazon Simple Storage Service (Amazon S3) 儲存貯體複製到或移至另一個儲存貯體。我想在 S3 儲存貯體之間遷移物件。

簡短描述

若要將物件從一個 S3 儲存貯體複製到另一個儲存貯體,請執行下列步驟:

1.    建立新的 S3 儲存貯體。

2.    安裝和設定 AWS Command Line Interface (AWS CLI)。

3.    在 S3 儲存貯體之間複製物件。

**注意:**在大型儲存貯體 (包含 1,000 萬個物件或更多) 上使用 aws s3 lsaws s3 sync 命令可能會很昂貴,從而導致逾時。如果您因大型儲存貯體而遇到逾時,則請考慮使用 Amazon CloudWatch 指標來計算儲存貯體中物件的大小和數量。此外,請考慮使用 S3 Batch Operations 來複製物件。

4.    確認已複製物件。

5.    將現有的 API 呼叫更新為目標儲存貯體名稱。

在開始之前,請考慮下列事項:

解決方法

建立新的 S3 儲存貯體

1.    開啟 Amazon S3 主控台

2.    選擇建立儲存貯體

3.    為您的新儲存貯體選擇 DNS 合規名稱

4.    選取您的 AWS 區域。

提示: 為避免跨區域流量導致的效能問題,請在與來源儲存貯體相同的區域中建立目標儲存貯體。

5.    (選用) 選擇從現有儲存貯體中複製設定,以鏡像來源儲存貯體的組態。

安裝並設定 AWS CLI

1.    安裝 AWS CLI

2.    透過執行下列命令設定 AWS CLI:

aws configure

**注意:**如果您在執行 AWS CLI 命令時收到錯誤,請確定您使用的是最新版本的 AWS CLI

3.    輸入您的存取金鑰 (存取金鑰 ID 和私密存取金鑰)

4.    按 Enter 以跳過預設區域和預設輸出選項。如需有關 Amazon S3 區域參數的詳細資訊,請參閱 AWS 服務端點

注意: AWS CLI 輸出是 JSON、文字或表格,但並非所有命令都支援每種類型的輸出。如需詳細資訊,請參閱從 AWS CLI 控制命令輸出

在 S3 儲存貯體之間複製物件

1.    如果您在 Amazon Simple Storage Service Glacier 儲存類別中封存了 S3 物件,請還原物件

2.    使用 AWS CLI 執行下列 sync 命令,在來源儲存貯體與目標儲存貯體之間複製物件:

aws s3 sync s3://DOC-EXAMPLE-BUCKET-SOURCE s3://DOC-EXAMPLE-BUCKET-TARGET

**注意:**更新 sync 命令,以包含您的來源和目標儲存貯體名稱。

sync 命令使用 CopyObject API 在 S3 儲存貯體之間複製物件。sync 命令列出來源儲存貯體和目標儲存貯體,以識別在來源儲存貯體中但不在目標儲存貯體中的物件。此命令還會識別來源儲存貯體與目標儲存貯體中,具有不同 LastModified 日期的物件。在版本控制儲存貯體上使用 sync 命令時,只會複製物件的目前版本 – 不會複製之前的版本。依預設,此行為會保留物件中繼資料。

如果來源儲存貯體已啟用存取控制清單 (ACL),則 ACL 不會複製到目標儲存貯體。不論是否在目標儲存貯體上啟用 ACL,情況都是如此。如果來源和目標儲存貯體都已啟用 ACL,則目標物件 ACL 會向執行複製的帳戶授予 FULL_CONTROL。如果操作失敗,您可以再次執行 sync 命令,而無需複製之前複製的物件。若要對 sync 操作問題進行疑難排解,請參閱為什麼不能在兩個 Amazon S3 儲存貯體之間複製物件?

3.    (選用) 如果遇到逾時,請使用 cloudwatch get-metric-statistics 命令來計算儲存貯體中的物件數量:

$ aws cloudwatch get-metric-statistics --namespace AWS/S3 --metric-name NumberOfObjects --dimensions Name=BucketName,Value=DOC-EXAMPLE-BUCKET-SOURCE Name=StorageType,Value=AllStorageTypes --start-time 2021-05-11T00:00 --end-time 2021-05-11T00:10 --period 600 --statistic Average --output json

4.    (選用) 如果遇到逾時,請使用 cloudwatch get-metric-statistics 命令來擷取您的儲存貯體大小:

$ aws cloudwatch get-metric-statistics --namespace AWS/S3 --metric-name BucketSizeBytes --dimensions Name=BucketName,Value=DOC-EXAMPLE-BUCKET-SOURCE Name=StorageType,Value=StandardStorage --start-time 2021-05-11T00:00 --end-time 2021-05-11T00:10 --period 3600 --statistics Average --unit Bytes --output json

**注意:**Listcalls 可能非常昂貴,從而導致命令逾時。針對大型儲存貯體,請考慮使用 Amazon CloudWatch 指標,來計算儲存貯體的大小和物件總數。但是,由於 Amazon CloudWatch 指標每天僅提取一次,因此,報告的物件計數和儲存貯體大小可能與 list 命令結果不同。

確認已複製物件

1.    透過執行下列命令,驗證來源和目標儲存貯體的內容:

aws s3 ls --recursive s3://DOC-EXAMPLE-BUCKET-SOURCE --summarize > bucket-contents-source.txt

aws s3 ls --recursive s3://DOC-EXAMPLE-BUCKET-TARGET --summarize > bucket-contents-target.txt

注意: 更新 list 命令,以包含您的來源和目標儲存貯體名稱。

2.    透過使用儲存至 AWS CLI 目錄中檔案的輸出,比較來源儲存貯體和目標儲存貯體中的物件。請參閱下列範例輸出:

$ aws s3 ls --recursive s3://DOC-EXAMPLE-BUCKET --summarize
2017-11-20 21:17:39      15362 s3logo.png

  Total Objects: 1        Total Size: 15362

將現有的 API 呼叫更新為目標儲存貯體名稱

更新任何現有的應用程式或工作負載,以便其使用目標儲存貯體名稱。如果您頻繁寫入,可能需要執行 sync 命令,來解決來源儲存貯體與目標儲存貯體之間的差異。

相關資訊

Amazon S3 定價

將物件複製到資料夾

在 Amazon S3 中執行大型删除操作後,list 命令沒有回應。如何對此問題進行疑難排解?

AWS 官方
AWS 官方已更新 2 年前