使用 AWS re:Post 即表示您同意 AWS re:Post 使用條款

如何對 Amazon S3 Batch Operations 問題進行疑難排解?

3 分的閱讀內容
0

當我為儲存貯體中的物件建立 Amazon Simple Storage Service (Amazon S3) Batch Operations 任務時,Amazon S3 傳回錯誤,或是批次任務失敗。

簡短說明

如果 Amazon S3 Batch Operations 任務遇到問題導致無法成功執行,表示任務失敗。失敗的任務會產生一或多個故障代碼和原因。如要檢視 Amazon S3 Batch Operation 的故障代碼和原因,請要求任務詳細資訊。您也可以在任務完成報告中檢視故障代碼和原因

為避免任務執行大量不成功的操作,Amazon S3 強制執行每個 Batch Operations 任務的任務失敗閾值。Amazon S3 會在執行至少 1,000 個任務後監控任務失敗率。如果任務失敗率超過 50%,表示任務失敗。如要解決此失敗問題,請檢視失敗原因並進行修正。然後,請重新提交任務。

解決方法

清單檔案格式不正確 (.csv 或 JSON)

Amazon S3 Batch Operations 支援 .csv 和 JSON (Amazon S3 庫存報告) 清單檔案。如果清單檔案不正確,您必須在 Amazon S3 建立新的批次任務,並指定正確的格式。

  • 如使用 Amazon S3 庫存報告,請使用 CSV 格式的寶告,並指定與庫存報告相關聯的 manifest.json 檔案。

  • 如使用 .csv 檔案,請在清單檔案的每列中加入儲存貯體名稱和物件金鑰。或者,您可以加入物件版本。如果您在清單檔案中加入版本 ID,您必須指定所有物件的 ID。某則,請勿加入任何版本 ID。物件金鑰必須採用 URL 編碼。

    注意: 如果清單檔案中的物件位於已建立版本的儲存貯體中,您必須為物件指定版本 ID。否則就是批次任務失敗。或者,Amazon S3 可能會將批次任務套用至不正確的物件版本。

如需更多資訊,請參閱指定清單檔案

清單檔案指定多個儲存貯體名稱或包含多個標頭列

有了 S3 Batch Operations,清單檔案列出的所有物件必須位於相同的儲存貯體中。否則,您將收到以下錯誤:

「Reasons for failure: Cannot have more than 1 bucket per Job.JOB_ID」

針對 S3 Batch Operation 任務,請確認您的清單檔案僅指定一個儲存貯體名稱,且不包含任何標頭列。在此範例中,清單檔案包含多個標頭列,因此 Amazon S3 傳回錯誤。

bucket,key
my-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) 角色可建立 S3 Batch Operations 任務,必須擁有清單檔案的 GetObject 讀取權限。檢查物件的中繼資料中是否有存取權與 S3 物件擁有權不相符。.此外,請尋找任何不支援的 AWS Key Management Service (AWS KMS) 金鑰,這些金鑰用於加密清單檔案。

如果 IAM 角色沒有修正權限,您會在建立 S3 Batch Operations 任務時收到這些錯誤:

AWS CLI 錯誤範例

「Reason for failure Reading the manifest is forbidden: AccessDenied」

注意: 如果您在執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤訊息,請參閱 AWS CLI 錯誤疑難排解。此外,請確定您使用的是最新的 AWS CLI 版本

Amazon S3 主控台錯誤範例

「Warning: Unable to get the manifest object's ETag.Specify a different object to continue」

注意: S3 Batch Operations 支援使用 AWS KMS 加密的 CSV 庫存報告。S3 Batch Operations 不支援使用 AWS KMS 加密的 .csv 清單檔案。如需更多資訊,請參閱使用 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 角色,而非 IAM 使用者。

IAM 角色的信任政策定義了其他主體擔任該角色必須符合的條件。如要允許 S3 Batch Operations 服務主體擔任 IAM 角色,請為角色附加信任政策

此信任政策範例授予 Amazon S3 的存取權。這可降低任何與權限升級相關聯的風險:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "batchoperations.s3.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

缺少建立批次任務的 IAM 權限

在您建立並執行 S3 Batch Operations 任務前,請授予 IAM 角色必要權限。如果您的 IAM 角色缺少執行 S3 Batch Operations 任務必要的權限,批次任務就會失敗。

如要建立 S3 Batch Operations 任務,請授予 IAM 角色 s3:CreateJob 權限。建立任務的實體必須也擁有 iam:PassRole 權限。這可讓實體傳遞您為批次任務指定的 IAM 角色。如需更多資訊,請參閱 IAM JSON 政策元素: 資源

缺少來源儲存貯體、S3 庫存報告,或目的地儲存貯體的存取權

確認您在 S3 Batch Operations 使用的 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}}/*"
      ]
    }
  ]
}

如需更多資訊,請參閱授予 Amazon S3 Batch Operations 權限

Organizations SCP 設有限制

如果您使用 AWS Organizations,請確認沒有任何 Deny 陳述式拒絕存取 Amazon S3。例如,您的服務控制政策 (SCP) 明確拒絕所有 S3 動作。在這種情況下,您可能會在建立批次任務時收到存取遭拒錯誤。

此範例政策明確拒絕所有 S3 動作:

{
  "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

如果 Batch Operations 任務遇到清單檔案中的物件版本 ID 欄位為空白,則您會收到此錯誤:

「Error: BUCKET_NAME,prefix/file_name,failed,400,InvalidRequest,Task failed due to missing VersionId」

如果清單檔案格式在操作期間使用版本 ID,則版本 ID 欄位不可為空白字串,而是必須是「null」字串。未建立版本的任務不會遇到此錯誤。這些任務會在每個物件最新版本上操作,而非清單檔案中的版本 ID。如要修正此錯誤,請將空白版本 ID 轉換為 null 字串

注意: 該特定物件的 Batch Operations 失敗,但並非整個任務失敗。

開啟 Amazon S3 物件鎖定保留模式時,未傳遞任務報告

當您在目的地儲存貯體上,以治理模式或合規模式設定物件鎖定保留模式時,您可能會收到此錯誤:

「Error: Reasons for failure.The job report could not be written to your bucket.Please check your permissions.」

Amazon S3 不支援設定保留模式的目的地儲存貯體使用物件鎖定。設定保留模式後,儲存貯體將受到單寫多讀 (WORM) 保護。如要修正此錯誤,請為未設定物件鎖定保留模式的任務完成報告選擇目的地儲存貯體。

注意: 失敗的是完成報告,而非任務。任務成功完成,且所有物件處理完成。

ETag 版本不相符

當您在批次作業任務中指定清單檔案時,您可以指定清單檔案物件金鑰、ETag 和選用的版本 ID。當您指定清單檔案時,請檢查 ETag 的值是否與清單檔案物件在 S3 儲存貯體最新版本的 ETag 相符。在 Amazon S3 主控台的批次作業索引標籤中,檢查清單檔案屬性中的清單檔案物件 ETag。在 AWS CLI 中,檢查清單檔案規格傳遞的 ETag 值。

如果主控台或 AWS CLI 中填入的 ETag 與 S3 儲存貯體中的 ETag 不相符,就會發生此錯誤:

「Error reading the manifest.Caused by: ETag mismatch.Expected ETag: 69f52a4e9f797e987155d9c8f5880897」

請注意此錯誤中的 Expected ETag,並確認 ETag 的兩個版本相符。如需更多資訊,請參閱指定清單檔案

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