Importformatkontingente und Validierung
Importkontingente
Der DynamoDB-Import aus Amazon S3 kann bis zu 50 gleichzeitige Importaufgaben mit einer Gesamtgröße von 15 TB gleichzeitig in den Regionen us-east-1, us-west-2 und eu-west-1 unterstützen. In allen anderen Regionen werden bis zu 50 gleichzeitige Importaufgaben mit einer Gesamtgröße von 1 TB unterstützt. Jede Importaufgabe kann bis zu 50 000 Amazon-S3-Objekte in allen Regionen aufnehmen. Diese Standardkontingente werden auf jedes Konto angewendet. Wenn Sie der Meinung sind, dass Sie diese Kontingente ändern müssen, wenden Sie sich bitte an Ihr Kontoteam, das diese Anträge fallweise prüft. Weitere Informationen zu den DynamoDB-Grenzwerten finden Sie unter Servicekontingente.
Validierungsfehler
Während des Importvorgangs kann DynamoDB beim Parsen Ihrer Daten auf Fehler stoßen. Für jeden Fehler gibt DynamoDB ein CloudWatch-Protokoll aus und zählt die Gesamtzahl der aufgetretenen Fehler. Wenn das Amazon-S3-Objekt selbst fehlerhaft formatiert ist oder sein Inhalt kein DynamoDB-Element bilden kann, können wir die Verarbeitung des verbleibenden Teils des Objekts überspringen.
Anmerkung
Wenn die Amazon-S3-Datenquelle über mehrere Elemente mit demselben Schlüssel verfügt, werden die Elemente überschrieben, bis eines übrig bleibt. Dies kann den Anschein erwecken, als sei 1 Element importiert worden und die anderen seien ignoriert worden. Die doppelten Elemente werden in zufälliger Reihenfolge überschrieben, nicht als Fehler gezählt und nicht an CloudWatch-Protokolle ausgegeben.
Sobald der Import abgeschlossen ist, können Sie die Gesamtzahl der importierten Elemente, die Gesamtzahl der Fehler und die Gesamtzahl der verarbeiteten Elemente anzeigen. Zur weiteren Fehlerbehebung können Sie auch die Gesamtgröße der importierten Elemente und die Gesamtgröße der verarbeiteten Daten überprüfen.
Es gibt drei Kategorien von Importfehlern: API-Validierungsfehler, Datenvalidierungsfehler und Konfigurationsfehler.
API-Validierungsfehler
API-Validierungsfehler sind Fehler auf Elementebene aus der Sync-API. Häufige Ursachen sind Berechtigungsprobleme, fehlende erforderliche Parameter und Fehler bei der Parametervalidierung. Details dazu, warum der API-Aufruf fehlgeschlagen ist, sind in den von der ImportTable-Anforderung ausgelösten Ausnahmen enthalten.
Datenvalidierungsfehler
Datenvalidierungsfehler können entweder auf Element- oder Dateiebene auftreten. Während des Imports werden Elemente basierend auf DynamoDB-Regeln validiert, bevor sie in die Zieltabelle importiert werden. Wenn die Validierung eines Elements fehlschlägt und das Element nicht importiert wird, überspringt die Importaufgabe dieses Element und fährt mit dem nächsten Element fort. Am Ende der Aufgabe wird der Importstatus auf FAILED gesetzt, zusammen mit FailureCode, ItemValidationError und der FailureMessage „Einige der Elemente haben die Validierungsprüfungen nicht bestanden und wurden nicht importiert. Weitere Details finden Sie in den CloudWatch-Fehlerprotokollen.“
Häufige Ursachen für Datenvalidierungsfehler sind Objekte, die nicht analysierbar sind, Objekte im falschen Format (Eingabe gibt DYNAMODB_JSON an, das Objekt befindet sich jedoch nicht in DYNAMODB_JSON) und die Nichtübereinstimmung des Schemas mit den angegebenen Quelltabellenschlüsseln.
Konfigurationsfehler
Konfigurationsfehler sind in der Regel Workflowfehler aufgrund der Berechtigungsvalidierung. Der Import-Workflow überprüft einige Berechtigungen, nachdem die Anforderung angenommen wurde. Wenn es Probleme beim Aufrufen einer der erforderlichen Abhängigkeiten wie Amazon S3 oder CloudWatch gibt, markiert der Prozess den Importstatus als FAILED. failureCode und failureMessage weisen auf den Grund für den Fehler hin. Gegebenenfalls enthält die Fehlermeldung auch die Anforderungs-ID, mit der Sie den Grund für den Fehler in CloudTrail untersuchen können.
Häufige Konfigurationsfehler sind die falsche URL für den Amazon S3-Bucket und eine fehlende Berechtigung für den Zugriff auf den Amazon-S3-Bucket, CloudWatch-Protokolle und AWS KMS-Schlüssel, die zum Entschlüsseln des Amazon-S3-Objekts verwendet werden. Weitere Informationen finden Sie unter Verwenden von Datenschlüsseln.
Validieren von Amazon-S3-Quellobjekten
Um S3-Quell-Objekte zu validieren, führen Sie die folgenden Schritte aus.
Überprüfen Sie das Datenformat und den Komprimierungstyp
Stellen Sie sicher, dass alle übereinstimmenden Amazon-S3-Objekte unter dem angegebenen Präfix dasselbe Format haben (DYNAMODB_JSON, DYNAMODB_ION, CSV)
Stellen Sie sicher, dass alle übereinstimmenden Amazon-S3-Objekte unter dem angegebenen Präfix auf dieselbe Weise komprimiert werden (GZIP, ZSTD, NONE)
Anmerkung
Die Amazon-S3-Objekte müssen nicht die entsprechende Erweiterung (.csv/.json/.ion/.gz/.zstd usw.) haben, da das im ImportTable-Aufruf angegebene Eingabeformat Vorrang hat.
Überprüfen Sie, ob die Importdaten dem gewünschten Tabellenschema entsprechen
Stellen Sie sicher, dass jedes Element in den Quelldaten über den Primärschlüssel verfügt. Ein Sortierschlüssel ist für Importe optional.
Stellen Sie sicher, dass der mit dem Primärschlüssel und einem beliebigen Sortierschlüssel verknüpfte Attributtyp mit dem Attributtyp in der Tabelle und im GSI-Schema übereinstimmt, wie in den Parametern zur Tabellenerstellung angegeben.
Fehlerbehebung
CloudWatch-Protokolle
Bei fehlgeschlagenen Importaufgaben werden detaillierte Fehlermeldungen in CloudWatch-Protokollen veröffentlicht. Um auf diese Protokolle zuzugreifen, rufen Sie zuerst ImportArn aus der Ausgabe ab, sowie describe-import mit diesem Befehl:
aws dynamodb describe-import --import-arn arn:aws:dynamodb:us-east-1:ACCOUNT:table/target-table/import/01658528578619-c4d4e311 }
Beispielausgabe:
aws dynamodb describe-import --import-arn "arn:aws:dynamodb:us-east-1:531234567890:table/target-table/import/01658528578619-c4d4e311" { "ImportTableDescription": { "ImportArn": "arn:aws:dynamodb:us-east-1:ACCOUNT:table/target-table/import/01658528578619-c4d4e311", "ImportStatus": "FAILED", "TableArn": "arn:aws:dynamodb:us-east-1:ACCOUNT:table/target-table", "TableId": "7b7ecc22-302f-4039-8ea9-8e7c3eb2bcb8", "ClientToken": "30f8891c-e478-47f4-af4a-67a5c3b595e3", "S3BucketSource": { "S3BucketOwner": "ACCOUNT", "S3Bucket": "my-import-source", "S3KeyPrefix": "import-test" }, "ErrorCount": 1, "CloudWatchLogGroupArn": "arn:aws:logs:us-east-1:ACCOUNT:log-group:/aws-dynamodb/imports:*", "InputFormat": "CSV", "InputCompressionType": "NONE", "TableCreationParameters": { "TableName": "target-table", "AttributeDefinitions": [ { "AttributeName": "pk", "AttributeType": "S" } ], "KeySchema": [ { "AttributeName": "pk", "KeyType": "HASH" } ], "BillingMode": "PAY_PER_REQUEST" }, "StartTime": 1658528578.619, "EndTime": 1658528750.628, "ProcessedSizeBytes": 70, "ProcessedItemCount": 1, "ImportedItemCount": 0, "FailureCode": "ItemValidationError", "FailureMessage": "Some of the items failed validation checks and were not imported. Please check CloudWatch error logs for more details." } }
Rufen Sie die Protokollgruppe und die Import-ID aus der obigen Antwort ab und verwenden Sie sie, um die Fehlerprotokolle abzurufen. Die Import-ID ist das letzte Pfadelement des Felds ImportArn. Der Name der Protokollgruppe lautet /aws-dynamodb/imports. Der Name des Fehler-Protokollstreams ist import-id/error. In diesem Beispiel wäre es 01658528578619-c4d4e311/error.
Fehlender Schlüssel pk im Element
Wenn das S3-Quellobjekt nicht den Primärschlüssel enthält, der als Parameter angegeben wurde, schlägt der Import fehl. Zum Beispiel, wenn Sie den Primärschlüssel für den Import als Spaltenname „pk“ definieren.
aws dynamodb import-table —s3-bucket-source S3Bucket=my-import-source,S3KeyPrefix=import-test.csv \ —input-format CSV --table-creation-parameters '{"TableName":"target-table","KeySchema": \ [{"AttributeName":"pk","KeyType":"HASH"}],"AttributeDefinitions":[{"AttributeName":"pk","AttributeType":"S"}],"BillingMode":"PAY_PER_REQUEST"}'
Die Spalte „pk“ fehlt im Quellobjekt import-test.csv, das die folgenden Inhalte hat:
title,artist,year_of_release The Dark Side of the Moon,Pink Floyd,1973
Dieser Import schlägt aufgrund eines Fehlers bei der Elementvalidierung wegen des fehlenden Primärschlüssels in der Datenquelle fehl.
Beispiel für CloudWatch-Fehlerprotokoll:
aws logs get-log-events —log-group-name /aws-dynamodb/imports —log-stream-name 01658528578619-c4d4e311/error { "events": [ { "timestamp": 1658528745319, "message": "{\"itemS3Pointer\":{\"bucket\":\"my-import-source\",\"key\":\"import-test.csv\",\"itemIndex\":0},\"importArn\":\"arn:aws:dynamodb:us-east-1:531234567890:table/target-table/import/01658528578619-c4d4e311\",\"errorMessages\":[\"One or more parameter values were invalid: Missing the key pk in the item\"]}", "ingestionTime": 1658528745414 } ], "nextForwardToken": "f/36986426953797707963335499204463414460239026137054642176/s", "nextBackwardToken": "b/36986426953797707963335499204463414460239026137054642176/s" }
Dieses Fehlerprotokoll zeigt an, dass „ein oder mehrere Parameterwerte ungültig waren: Der Schlüssel pk im Element fehlt“. Da dieser Importauftrag fehlgeschlagen ist, existiert jetzt die Tabelle „Zieltabelle“ und ist leer, da keine Elemente importiert wurden. Das erste Element wurde verarbeitet, und das Objekt hat die Elementvalidierung nicht bestanden.
Um das Problem zu beheben, löschen Sie zuerst die „Zieltabelle“, wenn sie nicht mehr benötigt wird. Verwenden Sie dann entweder einen Primärschlüsselspaltennamen, der im Quellobjekt vorhanden ist, oder aktualisieren Sie die Quelldaten wie folgt:
pk,title,artist,year_of_release Albums::Rock::Classic::1973::AlbumId::ALB25,The Dark Side of the Moon,Pink Floyd,1973
Zieltabelle existiert
Wenn Sie eine Importaufgabe starten und eine Antwort wie folgt erhalten:
An error occurred (ResourceInUseException) when calling the ImportTable operation: Table already exists: target-table
Um diesen Fehler zu beheben, müssen Sie einen Tabellennamen wählen, der noch nicht existiert, und den Import wiederholen.
Der angegebene Bucket existiert nicht
Wenn der Quell-Bucket nicht existiert, schlägt der Import fehl und die Details der Fehlermeldung werden in CloudWatch protokolliert.
Beispiel-Importbeschreibung:
aws dynamodb —endpoint-url $ENDPOINT describe-import —import-arn "arn:aws:dynamodb:us-east-1:531234567890:table/target-table/import/01658530687105-e6035287" { "ImportTableDescription": { "ImportArn": "arn:aws:dynamodb:us-east-1:ACCOUNT:table/target-table/import/01658530687105-e6035287", "ImportStatus": "FAILED", "TableArn": "arn:aws:dynamodb:us-east-1:ACCOUNT:table/target-table", "TableId": "e1215a82-b8d1-45a8-b2e2-14b9dd8eb99c", "ClientToken": "3048e16a-069b-47a6-9dfb-9c259fd2fb6f", "S3BucketSource": { "S3BucketOwner": "531234567890", "S3Bucket": "BUCKET_DOES_NOT_EXIST", "S3KeyPrefix": "import-test" }, "ErrorCount": 0, "CloudWatchLogGroupArn": "arn:aws:logs:us-east-1:ACCOUNT:log-group:/aws-dynamodb/imports:*", "InputFormat": "CSV", "InputCompressionType": "NONE", "TableCreationParameters": { "TableName": "target-table", "AttributeDefinitions": [ { "AttributeName": "pk", "AttributeType": "S" } ], "KeySchema": [ { "AttributeName": "pk", "KeyType": "HASH" } ], "BillingMode": "PAY_PER_REQUEST" }, "StartTime": 1658530687.105, "EndTime": 1658530701.873, "ProcessedSizeBytes": 0, "ProcessedItemCount": 0, "ImportedItemCount": 0, "FailureCode": "S3NoSuchBucket", "FailureMessage": "The specified bucket does not exist (Service: Amazon S3; Status Code: 404; Error Code: NoSuchBucket; Request ID: Q4W6QYYFDWY6WAKH; S3 Extended Request ID: ObqSlLeIMJpQqHLRX2C5Sy7n+8g6iGPwy7ixg7eEeTuEkg/+chU/JF+RbliWytMlkUlUcuCLTrI=; Proxy: null)" } }
Der FailureCode lautet S3NoSuchBucket. Die FailureMessage enthält Details wie die Anforderungs-ID und den Service, der den Fehler ausgelöst hat. Da der Fehler erkannt wurde, bevor die Daten in die Tabelle importiert wurden, wird keine neue DynamoDB-Tabelle erstellt. In einigen Fällen, wenn diese Fehler nach dem Start des Datenimports auftreten, wird die Tabelle mit teilweise importierten Daten beibehalten.
Um diesen Fehler zu beheben, stellen Sie sicher, dass der Quell-Bucket aus Amazon S3 vorhanden ist, und starten Sie den Importvorgang neu.