我在 Amazon Simple Storage Service (Amazon S3) Glacier 或 Amazon S3 Glacier Deep Archive 儲存類別中有大量物件。我想在大規模作業中,啟動所有這些物件的還原作業。
解決方法
要還原大量的 Amazon S3 Glacier 儲存類別物件,您可以使用下列其中一個選項:
- Amazon S3 Batch Operations
- 您使用 AWS Command Line Interface (AWS CLI) 建立的自訂指令碼
**注意:**如果您在執行 AWS CLI 命令時收到錯誤訊息,請確定您使用的是最新版本的 AWS CLI。
使用 S3 批次作業
建立 Amazon S3 Batch Operations 任務,以啟動所有物件的還原作業。您可以在自訂物件清單或 Amazon S3 庫存報告上執行 S3 啟動還原物件任務。
**注意:**建立任務之前,請務必檢閱 Amazon S3 Batch Operations 的定價。
開始建立 S3 Batch Operations 任務之前,請確認符合下列要求:
- 您擁有具有啟動還原權限的 AWS Identity and Access Management (IAM) 使用者或角色。此外,IAM 使用者或角色必須擁有 Amazon S3 Batch Operations 的信任政策。
- 您有 CSV 清單或 Amazon S3 庫存報告,可作為您要還原之物件的清單檔案。清單檔案必須儲存在 S3 儲存貯體。不支援使用伺服器端加密的清單檔案 (客戶提供的金鑰或 AWS Key Management Service 金鑰)。如需有關每種格式需求的詳細資訊,請參閱指定清單檔案。
要使用 Amazon S3 主控台建立批次作業任務以啟動還原,請執行以下操作:
1. 開啟 Amazon S3 主控台。
2. 在導覽窗格中,選擇批次作業。
3. 選擇建立任務。
4. 針對區域,選取您要在其中建立任務的 AWS 區域。
5. 在選擇清單檔案下,輸入以下內容:
針對清單檔案格式,選取 S3 庫存報告或 CSV 作為檔案格式。
針對清單檔案物件的路徑,輸入清單檔案的 S3 路徑 (範例:s3://awsexamplebucket/manifest.csv)。
6. 選擇下一步。
7. 在選擇作業下,輸入以下內容:
針對作業,選取還原。
針對還原來源,選取 Glacier 或 Glacier Deep Archive。
針對還原副本可用的天數,輸入您使用案例的天數。
針對還原方案,選取大量擷取或標準擷取。如需有關各方案的詳細資訊,請參閱封存擷取選項。
注意:S3 批次作業不支援快速擷取方案。
8. 選擇下一步。
9. 在設定其他選項下,輸入以下內容:
針對描述,您可以選擇輸入任務的描述。或者,您可以將此欄位留空。
針對優先順序,輸入指示任務優先順序的數字。
針對產生完成報告,選擇以將此選項保持選取的狀態。
針對完成報告範圍,根據您的使用案例,選取僅失敗的任務或所有任務。
針對完成報告目的地的路徑,輸入您要將報告傳送至的路徑。
針對權限,選取從現有 IAM 角色選擇。然後,選取擁有啟動還原權限以及 S3 批次作業的信任政策的 IAM 角色。
10. 選擇下一步。
11. 在檢閱頁面上,檢閱任務的詳細資訊。然後,選擇建立任務。
12. 建立任務之後,任務的狀態會從新建變更為準備中。然後,狀態會變更為等待您的確認。要執行任務,您必須選取任務,然後選擇確認並執行。在您確認之前,不會執行任務。
13. (選用) 如果您選取產生完成報告,則會在任務完成之後檢閱報告。您可以在指定的完成報告目的地路徑找到報告。
如需每個任務狀態的描述,請參閱任務狀態。
如需失敗任務的詳細資訊,請參閱追蹤任務失敗。
使用自訂的 AWS CLI 指令碼
您可以使用 AWS CLI restore-object 命令,還原您的 Amazon S3 Glacier 物件。不過,命令一次只能還原一個 S3 Glacier 物件,且不支援大量還原動作。因此,請使用下列自訂解決方法,使用可用擷取選項,從 S3 Glacier 儲存類別還原大量資料。
注意:您必須先在測試或開發環境中測試這些自訂指令碼,才能在生產環境中進行使用。自訂命令會逐一還原 S3 Glacier 儲存類別中的所有物件。如果您有非常多的物件,命令可能會逾時。您可以使用字首參數執行自訂命令,以縮減物件數量。
針對 Linux 或 Unix 系統,執行下列命令,以遞迴方式還原儲存貯體中的所有 S3 Glacier 物件:
aws s3api list-objects --bucket <bucket-name> --prefix <prefix> --query 'Contents[?StorageClass==`GLACIER`][Key]' --output text | xargs -I {} sh -c "aws s3api restore-object --bucket <bucket-name> --key \"{}\" --restore-request Days=5,GlacierJobParameters={Tier=Standard} || true"
請務必執行以下操作:
- 將 ** <bucket-name>** 取代為 S3 儲存貯體名稱。
- 將 ** <prefix>** 取代為 S3 資料夾路徑。
針對 Windows 系統,請執行以下操作:
1. 執行下列命令,以列出儲存貯體中的所有 S3 Glacier 物件:
aws s3api list-objects --bucket <bucket-name> --prefix <prefix> --query "Contents[?StorageClass==`GLACIER`][Key]" --output text > list.txt
您執行此命令後,物件清單會儲存在名為 ** list.txt** 的檔案中。
2. 執行下列命令,以還原 S3 Glacier 物件:
for /F "tokens=*" %i in (list.txt) do @aws s3api restore-object --bucket <bucket-name> --key "%i" --restore-request Days=5,GlacierJobParameters={Tier=Standard} || true"
**注意:**先前的自訂 AWS CLI 指令碼會因 LIST 和資料擷取請求,產生額外費用。由於 list-objects-v2 是分頁操作,因此可能會發出多個 API 呼叫,以擷取結果的整個資料集。如需詳細資訊,請參閱 Amazon S3 定價。
相關資訊
建立 S3 Batch Operations 任務
在 Amazon S3 物件上執行大規模批次作業
管理 S3 Batch Operations 任務