如何將所有物件從一個 Amazon S3 儲存貯體複製到另一個儲存貯體?
我想將所有物件從一個 Amazon Simple Storage Service (Amazon S3) 儲存貯體複製到或移至另一個儲存貯體。我想在 S3 儲存貯體之間遷移物件。
簡短描述
若要將物件從一個 S3 儲存貯體複製到另一個儲存貯體,請執行下列步驟:
1. 建立新的 S3 儲存貯體。
2. 安裝和設定 AWS Command Line Interface (AWS CLI)。
3. 在 S3 儲存貯體之間複製物件。
**注意:**在大型儲存貯體 (包含 1,000 萬個物件或更多) 上使用 aws s3 ls 或 aws s3 sync 命令可能會很昂貴,從而導致逾時。如果您因大型儲存貯體而遇到逾時,則請考慮使用 Amazon CloudWatch 指標來計算儲存貯體中物件的大小和數量。此外,請考慮使用 S3 Batch Operations 來複製物件。
4. 確認已複製物件。
5. 將現有的 API 呼叫更新為目標儲存貯體名稱。
在開始之前,請考慮下列事項:
- 如果您的 S3 儲存貯體中有許多物件 (超過 1,000 萬個物件),請考慮使用 S3 Batch Operations。您可以使用 S3 Batch Operations 來自動化複製程序。
- 若要跨 AWS 帳戶複製物件,請在儲存貯體上設定正確的跨帳戶許可和相關的 AWS Identity and Access Management (IAM) 角色。
- 如果您使用 AWS CLI 第 2 版跨儲存貯體複製物件,您的 IAM 角色還必須具有適當的許可。請確保您的 IAM 角色可以存取來源物件的 s3:GetObjectTagging 和目標物件的 s3:PutObjectTagging。
- 為了提高同步程序的效能,請調校 AWS CLI 以使用更高的並行。您還可以針對不同的前綴分割同步命令,以優化您的 S3 儲存貯體效能。如需有關優化工作負載效能的詳細資訊,請參閱最佳實務設計模式: 優化 Amazon S3 效能。
解決方法
建立新的 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 命令,來解決來源儲存貯體與目標儲存貯體之間的差異。
相關資訊
相關內容
- 已提問 1 年前lg...
- 已提問 9 個月前lg...
- 已提問 9 個月前lg...
- 已提問 1 年前lg...
- AWS 官方已更新 6 個月前
- AWS 官方已更新 6 個月前
- AWS 官方已更新 9 個月前