如何對 Amazon S3 Batch Operations 問題進行疑難排解?
當我為儲存貯體中的物件建立 Amazon Simple Storage Service (Amazon S3) Batch Operations 作業時,Amazon S3 傳回錯誤。或者,Amazon S3 Batch Operations 作業失敗。
解決方法
若要追蹤作業失敗,請要求作業的詳細資訊或完成報告。確定原因並解決問題後,請重新提交 S3 Batch Operations 作業。
**注意:**如果您在執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤訊息,請參閱對 AWS CLI 錯誤進行疑難排解。此外,請確定您使用的是最新的 AWS CLI 版本。
資訊清單 .csv 或 .json 檔案格式不正確
S3 Batch Operations 支援 .csv 和 .json 庫存資訊清單檔案。如果您沒有正確格式化資訊清單檔案,那麼您必須在 Amazon S3 中建立新的批次作業,並指定正確的格式。
指定資訊清單時,請執行下列動作:
- 對於 Amazon S3 庫存清單報告,請使用 .csv 格式的報告,並指定與庫存清單報告相關聯的 manifest.json 檔案。
- 對於 .csv 檔案,請在資訊清單檔案的每一列中,加入儲存貯體名稱和物件金鑰。您也可以加入物件版本。如果您在資訊清單檔案中加入版本 ID,則必須為所有物件指定 ID。
**注意:**您必須對物件金鑰進行 URL 編碼。 - 如果物件位於版本控制儲存貯體中,則必須為物件指定版本 ID。否則,批次作業將會失敗。或者,Amazon S3 可能會將批次作業套用至不正確的物件版本。
資訊清單檔案會指定多個儲存貯體名稱,或包含多個標題列
如果資訊清單檔案列出的所有物件不在同一個儲存貯體中,那麼您會收到以下錯誤訊息:
「失敗的原因: Cannot have more than 1 bucket per Job.JOB_ID」
請確認您的資訊清單檔案僅指定一個儲存貯體名稱,且不包含標題列。
包含多個標題列的資訊清單檔案範例:
bucket,keymy-batch-bucket,object001.txt my-batch-bucket,object002.txt my-batch-bucket,object003.txt my-batch-bucket,object004.txt
IAM 角色沒有讀取資訊清單檔案的權限
如果 AWS Identity and Access Management (IAM) 角色沒有讀取資訊清單的權限,您會收到下列其中一個錯誤:
來自 AWS CLI 的「失敗原因:禁止讀取資訊清單: AccessDenied」。
- 或 -
來自 Amazon S3 主控台的「警告: 無法取得資訊清單物件的 ETag。請指定其他物件以繼續」。
建立 S3 Batch Operations 作業的 IAM 角色必須具有資訊清單檔案的 GetObject 讀取權限。檢查物件的中繼資料,查看是否有存取權與 S3 物件擁有權不相符。另外,請檢查是否有使用不支援的 AWS Key Management Service (AWS KMS) 金鑰加密資訊清單檔案。
**注意:**S3 Batch Operations 支援使用 AWS KMS 加密的 .csv 庫存清單報告。S3 Batch Operations 不支援使用 AWS KMS 加密的 .csv 資訊清單檔案。如需更多資訊,請參閱使用 Amazon S3 主控台設定庫存。
批次作業位於不同的區域
S3 Batch Operations 複製作業必須與目標儲存貯體位於相同 AWS 區域。例如,如果目標儲存貯體位於 us-west-2 區域,請在建立批次作業時,在「區域」選擇 us-west-2。
您的 S3 庫存清單報告缺少目標儲存貯體
S3 Batch Operations 產生的清單檔案必須擁有目標儲存貯體。Amazon S3 儲存貯體政策也必須允許 s3:PutObject 動作。如果該作業將報告傳送至另一個 AWS 帳戶,請確認目標儲存貯體允許 IAM 角色執行 s3:PutObject 動作。
缺少 IAM 角色的信任政策
IAM 角色的信任政策定義了其他主體承擔該角色所需的條件。若要允許 S3 Batch Operations 主體承擔 IAM 角色,請將信任政策附加到該角色。
政策範例:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "batchoperations.s3.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
**注意:**請務必指定 IAM 角色,而非 IAM 使用者。
IAM 角色缺少建立批次作業的權限
若要建立 S3 Batch Operations 作業,請授予 IAM 角色 s3:CreateJob 權限。建立作業的實體也必須具有 iam:PassRole 權限,才能傳遞您為批次作業指定的 IAM 角色。如需詳細資訊,請參閱 IAM JSON 政策元素: 資源。
IAM 角色缺少執行批次作業的權限
請確定您授予 IAM 角色正確的權限,以在批次作業中執行特定作業。
具有複製作業必要權限的 IAM 政策範例:
{ "Version": "2012-10-17", "Statement": [ { "Action": [ "s3:PutObject", "s3:PutObjectAcl", "s3:PutObjectTagging" ], "Effect": "Allow", "Resource": "arn:aws:s3:::{{DestinationBucket}}/*" }, { "Action": [ "s3:GetObject", "s3:GetObjectAcl", "s3:GetObjectTagging", "s3:ListBucket" ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::{{SourceBucket}}", "arn:aws:s3:::{{SourceBucket}}/*" ] }, { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:GetObjectVersion" ], "Resource": [ "arn:aws:s3:::{{ManifestBucket}}/*" ] }, { "Effect": "Allow", "Action": [ "s3:PutObject" ], "Resource": [ "arn:aws:s3:::{{ReportBucket}}/*" ] } ] }
AWS Organizations SCP 拒絕存取
如果您使用 Organizations,請確認服務控制政策 (SCP) 中沒有拒絕存取 Amazon S3 的 Deny 陳述式。否則在建立批次作業時,您可能會收到 Access Denied 錯誤。
明確拒絕所有 S3 動作的 SCP 範例:
{ "Version": "2012-10-17", "Statement": [ { "Principal": "*", "Effect": "Deny", "Action": "s3:*", "Resource": "*" } ] }
若要套用限制性政策,請將 S3 Batch Operations 承擔的 IAM 角色新增至允許清單。
限制性政策範例:
{ "Version": "2012-10-17", "Statement": [ { "Principal": "*", "Effect": "Deny", "Action": "s3:*", "Resource": "*", "Condition": { "StringNotLike": { "aws:userId": [ "AROAEXAMPLEID:*", "AIDAEXAMPLEID", "111111111111" ] } } } ] }
資訊清單中缺少物件的版本 ID
如果 S3 Batch Operations 作業在資訊清單中找到版本 ID 欄位空白的物件,則您會收到下列錯誤:
「Error: BUCKET_NAME,prefix/file_name,failed,400,InvalidRequest,Task failed due to missing VersionId」
如果資訊清單格式在作業過程中使用版本 ID,則版本 ID 欄位不能為空白字串。反之,版本 ID 欄位必須是 Null 字串。若要解決此問題,請將空白版本 ID 轉換為 Null 字串。
**注意:**S3 Batch Operations 僅對指定物件失敗,而不是整個作業失敗。
由於您使用物件鎖定保留,Amazon S3 未提供作業報告
如果您在治理模式或合規模式下,在目的地儲存貯體上設定 S3 物件鎖定保留,那麼您會收到下列錯誤:
「Error: Reasons for failure.無法將作業報告寫入您的儲存貯體。請檢查您的權限。」
Amazon S3 不支援具有保留模式組態的目的地儲存貯體使用物件鎖定。當您設定保留模式時,儲存貯體將受到單寫多讀 (WORM) 保護。若要解決此問題,請選擇沒有物件鎖定保留的目的地儲存貯體。
**注意:**失敗的只是完成報告,而非作業。作業成功完成,且所有物件均已處理。
ETag 版本不相符
如果 Amazon S3 主控台或 AWS CLI 上的 ETag 值與儲存貯體中的 Etag 不相符,您會收到下列錯誤:
「讀取資訊清單時發生錯誤。Caused by: ETag mismatch.Expected ETag: 69f52a4e9f797e987155d9c8f5880897」
當您在 S3 Batch Operations 作業中選取資訊清單時,您可以指定資訊清單物件金鑰、ETag 和選用的版本 ID。請確定 ETag 值與 S3 儲存貯體中,資訊清單物件最新版本的 ETag 相符。在 Amazon S3 主控台的 Batch Operations 索引標籤上,檢查資訊清單檔案屬性中的資訊清單物件 ETag。在 AWS CLI 中,檢查資訊清單規格傳遞的 ETag 的值。
**注意:**如果您將 S3 Batch Operations 作業建立為現有作業的複本,請在複製的資訊清單中更新 ETag。
HTTP 500 和 503 錯誤
如果 Amazon S3 無法處理請求,則您會收到 500 Internal Error 狀態碼。如果 對 S3 儲存貯體的請求數量較多,那麼您會收到 503 Slow Down 狀態碼。若要解決這些問題,請參閱如何對 Amazon S3 的 HTTP 500 或 503 錯誤進行疑難排解?
**注意:**最佳實務是在向 Amazon S3 發出請求的應用程式中,建立重試邏輯。
相關內容
已提問 3 年前
已提問 2 年前
已提問 1 年前
AWS 官方已更新 1 年前