跳至內容

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

3 分的閱讀內容
0

當我為儲存貯體中的物件建立 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 發出請求的應用程式中,建立重試邏輯。

AWS 官方已更新 3 個月前