スキップしてコンテンツを表示

Amazon S3 Batch Operations の問題をトラブルシューティングする方法を教えてください。

所要時間3分
0

バケット内のオブジェクトに対し Amazon Simple Storage Service (Amazon S3) Batch Operations ジョブを作成する際、Amazon S3 がエラーを返したり、Amazon S3 Batch Operations ジョブが失敗したりします。

解決策

ジョブの障害を追跡するには、そのジョブの詳細または完了レポートをリクエストします。原因を特定して問題を解決した後、S3 Batch Operations ジョブを再送信します。

注: AWS コマンドラインインターフェイス (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 がバッチジョブを誤ったバージョンのオブジェクトに適用する可能性もあります。

マニフェストファイルが複数のバケット名を指定していたり、ファイルに複数のヘッダー行が含まれていたりする

マニフェストファイル内のすべてのオブジェクトが同じバケットに配置されていない場合、次のエラーメッセージが表示されます。

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

マニフェストファイルではバケット名を 1 つだけ指定しており、ヘッダー行が含まれていないことを確認してください。

複数のヘッダー行を含むマニフェストファイルの例

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) ロールにマニフェストを読み取るためのアクセス許可がない場合、次のいずれかのエラーが発生します。

「Reason for failure Reading the manifest is forbidden: AccessDenied" (AWS CLI)

または、

「Warning: Unable to get the manifest object's ETag.Specify a different object to continue (マニフェストオブジェクトの ETag を取得できません。別のオブジェクトを選択して続行してください)」 (Amazon S3 コンソール)

S3 Batch Operations ジョブを作成する IAM ロールには、マニフェストファイルに対する GetObject 読み取りアクセス許可が必要です。オブジェクトのメタデータで、S3 Object Ownership とアクセスの不一致がないかを確認します。さらに、マニフェストファイルを暗号化する 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 バッチオペレーションが生成するマニフェストのターゲットバケットが必要です。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 ロールを渡すための権限である iam:PassRole も必要です。詳細については、「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 のサービスコントロールポリシーによりアクセスが拒否される

AWS Organizations を使用している場合は、サービスコントロールポリシーに Amazon S3 へのアクセスを拒否する Deny ステートメントが存在しないことを確認します。存在する場合、バッチジョブの作成時に Access Denied エラーが発生する可能性があります。

すべての 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 が欠けている

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 の実行失敗は、ジョブ全体ではなく、指定されたオブジェクトに対してのみ発生します。

Object Lock 保持の使用が原因で、Amazon S3 がジョブレポートを配信しない

ガバナンスモードまたはコンプライアンスモードである宛先バケットに S3 Object Lock 保持を構成した場合、次のエラーが発生します。

"Error: Reasons for failure.The job report could not be written to your bucket.Check your permissions (ジョブレポートをバケットに書き込めませんでした。アクセス許可を確認してください)」

Amazon S3 は、保持モードが設定された宛先バケットでの Object Lock をサポートしていません。保持モードを設定すると、バケットは write-once-read-many (WORM) で保護されます。この問題を解決するには、Object Lock 保持を設定していない宛先バケットを選択します。

注: 完了レポートのみで障害が発生します。ジョブは失敗しません。ジョブは正常に完了し、すべてのオブジェクトが処理されます。

ETag のバージョンが一致しない

Amazon S3 コンソールまたは AWS CLI の ETag 値がバケットの ETag 値と一致しない場合、次のエラーが発生します。

"Error reading the manifest.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公式更新しました 2ヶ月前
コメントはありません

関連するコンテンツ