Direkt zum Inhalt

Wie behebe ich Probleme mit Sammelaufträgen in Amazon S3?

Lesedauer: 7 Minute
0

Wenn ich eine Sammelauftragsaufgabe in Amazon Simple Storage Service (Amazon S3) für Objekte in meinem Bucket erstelle, gibt Amazon S3 eine Fehlermeldung zurück. Oder der Amazon-S3-Batch-Operations-Auftrag schlägt fehl.

Lösung

Um Auftragsfehler nachzuverfolgen, fordere die Auftragsdetails oder einen Abschlussbericht an. Nachdem du die Ursache ermittelt und das Problem behoben hast, reiche den S3-Batch-Operations-Auftrag erneut ein.

Hinweis: Wenn du beim Ausführen von AWS Command Line Interface (AWS CLI)-Befehlen Fehlermeldungen erhältst, findest du weitere Informationen dazu unter Problembehandlung bei der AWS CLI. Stelle außerdem sicher, dass du die neueste Version von AWS CLI verwendest.

Das Dateiformat des Manifests (.csv oder .json) ist falsch

S3 Batch Operations unterstützt die Inventarmanifestdateien .csv und .json. Wenn du die Manifestdatei nicht ordnungsgemäß formatierst, musst du in Amazon S3 einen neuen Batch-Auftrag erstellen und das richtige Format angeben.

Wenn du das Manifest angibst, führe die folgenden Aktionen aus:

  • Verwende für den Bericht in Amazon S3 Inventory einen Bericht im .csv-Format und gib die Datei manifest.json an, die mit dem Inventarbericht verknüpft ist.
  • Füge bei .csv-Dateien den Bucket-Namen und den Objektschlüssel in jede Zeile der Manifest-Datei ein. Du kannst auch die Objektversion einbeziehen. Wenn du Versions-IDs in das Manifest aufnimmst, musst du IDs für alle Objekte angeben.
    Hinweis: Du musst Objektschlüssel per URL kodieren.
  • Wenn sich die Objekte in einem versionierten Bucket befinden, musst du die Versions-IDs für die Objekte angeben. Andernfalls schlägt der Sammelauftrag fehl. Oder Amazon S3 wendet den Sammelauftrag möglicherweise auf die falsche Version des Objekts an.

Die Manifest-Datei gibt mehrere Bucket-Namen an oder enthält mehrere Kopfzeilen

Wenn nicht alle Objekte, die in der Manifestdatei aufgeführt sind, im selben Bucket vorhanden sind, erhältst du die folgende Fehlermeldung:

„Gründe für den Fehler: Pro Job darf es nicht mehr als 1 Bucket geben. JOB_ID"

Vergewissere dich, dass deine Manifestdatei nur einen Bucket-Namen angibt und keine Kopfzeilen enthält.

Beispiel für eine Manifestdatei, die mehrere Kopfzeilen enthält:

bucket,keymy-batch-bucket,object001.txt
my-batch-bucket,object002.txt
my-batch-bucket,object003.txt
my-batch-bucket,object004.txt

Die IAM-Rolle hat keine Berechtigung, die Manifestdatei zu lesen

Wenn die AWS-Identity-and-Access-Management(IAM)-Rolle keine Berechtigung hat, das Manifest zu lesen, erhältst du eine der folgenden Fehlermeldungen:

„Reason for failure Reading the manifest is forbidden: AccessDenied“ von der AWS CLI.

-oder-

„Warning: Unable to get the manifest object's ETag. Specify a different object to continue“ von der Amazon-S3-Konsole.

Die IAM-Rolle, die den S3-Batch-Operations-Auftrag erstellt, muss über die GetObject-Leseberechtigung für die Manifestdatei verfügen. Überprüfe die Metadaten des Objekts auf Zugriffskonflikte mit der Inhaberschaft des S3-Objekts. Suche auch nach nicht unterstützten Schlüsseln des AWS Key Management Service (AWS KMS), die die Manifest-Datei verschlüsseln.

Hinweis: S3 Batch Operations unterstützt .csv-Inventarberichte, die mit AWS KMS verschlüsselt sind. S3 Batch Operations unterstützt keine .csv-Manifest-Dateien, die mit AWS KMS verschlüsselt sind. Weitere Informationen findest du unter Korrigieren des Inventars mithilfe der Amazon S3-Konsole.

Der Sammelauftrag befindet sich in einer anderen Region

Kopieraufträge in S3 Batch Operations müssen sich in derselben AWS-Region befinden wie der Ziel-Bucket. Wenn sich der Ziel-Bucket beispielsweise in der Region us-west-2 befindet, wähle bei der Erstellung des Batch-Auftrags us-west-2 als Region aus.

Der Ziel-Bucket für den S3-Inventarbericht fehlt

Es muss einen Ziel-Bucket für das Manifest geben, das S3 Batch Operations generiert. Die Amazon S3-Bucket-Richtlinie muss auch die Aktion s3:PutObject zulassen. Wenn der Auftrag den Bericht an ein anderes AWS-Konto sendet, musst du sicherstellen, dass es der Ziel-Bucket der IAM-Rolle erlaubt, die Aktion s3:PutObject auszuführen.

Die Vertrauensrichtlinie der IAM-Rolle fehlt

Die Vertrauensrichtlinie für eine IAM-Rolle definiert die erforderlichen Bedingungen, unter denen andere Prinzipale die Rolle übernehmen können. Damit der S3-Batch-Operations-Prinzipal die IAM-Rolle übernehmen kann, füge der Rolle eine Vertrauensrichtlinie hinzu.

Beispiel für eine Richtlinie:

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

**Hinweis:**Stelle sicher, dass du eine IAM-Rolle und keinen IAM-Benutzer angibst.

Der IAM-Rolle fehlen die Berechtigungen zum Erstellen eines Batch-Auftrags

Um einen Auftrag in S3 Batch Operations zu erstellen, erteile der IAM-Rolle die Berechtigung s3:CreateJob. Die Entität, die den Auftrag erstellt, muss außerdem über die iam:PassRole-Berechtigung verfügen, um die IAM-Rolle zu übergeben, die du für den Batch-Auftrag angibst. Weitere Informationen findest du unter Richtlinienelemente von IAM JSON: Ressource.

Der IAM-Rolle fehlen die Berechtigungen zum Ausführen von Batch-Auftragsvorgängen

Vergewissere dich, dass du der IAM-Rolle die richtigen Berechtigungen zum Ausführen bestimmter Vorgänge in einem Batch-Auftrag gewährst.

Beispiel für eine IAM-Richtlinie mit den erforderlichen Berechtigungen für den Kopiervorgang:

{
    "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}}/*"
            ]
        }
    ]
}

Die SCP von AWS Organizations verweigert den Zugriff

Wenn du Organizations verwendest, stelle sicher, dass die Service-Kontrollrichtlinie (SCP) keine Verweigerungs-Anweisungen enthält, die den Zugriff auf Amazon S3 verweigern. Ansonsten erhältst du möglicherweise die Fehlermeldung Zugriff verweigert, wenn du einen Batch-Auftrag erstellst.

Beispiel für eine SCP, die ausdrücklich alle S3-Aktionen verweigert:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Principal": "*",
            "Effect": "Deny",
            "Action": "s3:*",
            "Resource": "*"
        }
    ]
}

Um eine restriktive Richtlinie anzuwenden, füge die von S3 Batch Operations übernommene IAM-Rolle zur Zulassungsliste hinzu.

Beispiel für eine restriktive Richtlinie:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Principal": "*",
            "Effect": "Deny",
            "Action": "s3:*",
            "Resource": "*",
            "Condition": {
                "StringNotLike": {
                    "aws:userId": [
                        "AROAEXAMPLEID:*",
                        "AIDAEXAMPLEID",
                        "111111111111"
                    ]
                }
            }
        }
    ]
}

Die Versions-ID für ein Objekt fehlt im Manifest

Wenn der S3 Batch-Operations-Auftrag ein Objekt im Manifest findet, das ein leeres Versions-ID-Feld enthält, erhältst du die folgende Fehlermeldung:

„Error: BUCKET_NAME,prefix/file_name,failed,400,InvalidRequest,Task failed due to missing VersionId"

Wenn das Manifest-Format während des Vorgangs Versions-IDs verwendet, darf das Versions-ID-Feld keine leere Zeichenfolge enthalten. Stattdessen muss das Versions-ID-Feld eine Null-Zeichenfolge sein. Um dieses Problem zu beheben, wandle die leeren Versions-IDs in Null-Zeichenfolgen um.

Hinweis: S3 Batch Operations schlagen nur für das angegebene Objekt fehl, nicht für den gesamten Auftrag.

Amazon S3 erstellt keinen Auftragsbericht, da du Object-Lock-Aufbewahrung verwendest

Wenn du die S3 Object-Lock-Aufbewahrung für einen Ziel-Bucket entweder im Governance-Modus oder im Compliance-Modus konfigurierst, wird dieser Fehler angezeigt:

„Error: Reasons for failure. The job report could not be written to your bucket. Check your permissions.“

Amazon S3 unterstützt Object Lock für Ziel-Buckets mit Aufbewahrungsmodus-Konfigurationen nicht. Wenn du den Aufbewahrungsmodus konfigurierst, ist der Bucket durch write-once-read-many (WORM) geschützt. Um dieses Problem zu beheben, wähle einen Ziel-Bucket ohne Object-Lock-Aufbewahrung.

Hinweis: Nur der Abschlussbericht schlägt fehl, nicht der Auftrag. Der Auftrag wird erfolgreich abgeschlossen und alle Objekte werden verarbeitet.

Die ETag-Versionen stimmen nicht überein

Wenn der ETag-Wert auf der Amazon-S3-Konsole oder in der AWS CLI nicht mit dem ETag im Bucket übereinstimmt, erhältst du die folgende Fehlermeldung:

„Error reading the manifest. Caused by: ETag mismatch. Expected ETag: 69f52a4e9f797e987155d9c8f5880897“

Wenn du das Manifest im S3 Batch-Operations-Auftrag auswählst, kannst du den Manifest-Objektschlüssel, das ETag und die optionale Versions-ID angeben. Stelle sicher, dass der ETag-Wert mit dem ETag der neuesten Version des Manifestobjekts im S3 Bucket übereinstimmt. Überprüfe auf der Registerkarte Batch Operations der Amazon-S3-Konsole das ETag des Manifest-Objekts in den Eigenschaften der Manifest-Datei. Überprüfe im AWS CLI den Wert des ETags, den die Manifest-Spezifikation übergibt.

Hinweis: Wenn du einen S3-Auftrag für Batch Operations als Klon eines vorhandenen Jobs erstellst, aktualisiere das ETag im geklonten Manifest.

HTTP-500-Fehler und HTTP-503-Fehler

Wenn Amazon S3 die Anfrage nicht verarbeiten kann, wird der Statuscode 500 Interner Fehler ausgegeben. Du erhältst den Statuscode 503 Slow Down, wenn die Anzahl der Anfragen an deinen S3 Bucket hoch ist. Informationen zur Behebung dieser Probleme findest du unter Wie behebe ich einen HTTP-500-Fehler oder HTTP-503-Fehler bei Amazon S3?

Hinweis: Es ist eine bewährte Methode, Wiederholungslogik in Anwendungen zu integrieren, die Anfragen an Amazon S3 stellen.

AWS OFFICIALAktualisiert vor 3 Monaten