Durch die Nutzung von AWS re:Post stimmt du den AWS re:Post Nutzungsbedingungen

Warum schlägt mein TransactWriteItems-API-Aufruf in Amazon DynamoDB fehl?

Lesedauer: 5 Minute
0

Mein TransactWriteItems-API-Aufruf schlägt in Amazon DynamoDB fehl. Ich möchte die Ursache des Problems wissen.

Lösung

Der TransactWriteItems-API-Aufruf kann aus verschiedenen Gründen fehlschlagen oder von DynamoDB abgelehnt werden. Schritte zur Problembehandlung findest du in den folgenden Auflösungen. 

Der Bedingungsausdruck enthält eine Bedingung, die nicht erfüllt ist

Wenn eine Bedingung, die du für eine der Operationen im TransactWriteItems-Aufruf festgelegt hast, nicht erfüllt ist, schlagen alle Operationen fehl. Der TransactWriteItems-Aufruf ist eine synchrone Schreiboperation, die bis zu 25 Aktionsaufrufe gruppiert. Entweder sind alle Aktionsaufrufe erfolgreich oder alle Aktionsaufrufe schlagen fehl.

Wenn dein Aufruf aufgrund dieses Problems fehlschlägt, erhältst du eine Fehlermeldung ähnlich der folgenden:

"message": "Transaction cancelled, please refer cancellation reasons for specific reasons [ConditionalCheckFailed, None, None, None] (Service: AmazonDynamoDBv2; Status Code: 400; Error Code: TransactionCanceledException;..."

Um dieses Problem zu lösen, stelle sicher, dass alle Bedingungen, die du für deinen Aufruf festgelegt hast, erfüllt sind.

Die Tabelle, mit der du arbeitest, befindet sich in einer anderen Region oder in einem anderen Konto

TransactWriteItems-Aufrufe ermöglichen es dir, mit Elementen in verschiedenen Tabellen zu arbeiten. Du kannst jedoch nur mit Tabellen arbeiten, die sich in derselben AWS-Region und in demselben AWS-Konto befinden, von dem aus der Aufruf gesendet wurde. Um dieses Problem zu lösen, arbeitest du nur mit Tabellen, die sich in derselben AWS-Region wie das AWS-Konto befinden, von dem aus du den TransactWriteItems-Aufruf stellst.

Dasselbe Element wird durch mehrere Aktionen in der TransactWriteItems-Operation behandelt

Wenn mehr als eine Aktion in der TransactWriteItems-Operation dasselbe Element verarbeitet, schlägt der Aufruf fehl und du erhältst eine Fehlermeldung ähnlich der folgenden:

„Der Transaktionsaufruf kann nicht mehrere Operationen für ein Element enthalten“

Wenn TransactWriteItems beispielsweise versucht, sowohl eine ConditionCheck-Operation als auch eine ](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Put.html)Put[-Operation für dasselbe Element auszuführen, schlägt der Aufruf mit einer TransactionConflictException fehl. Du kannst diese Ausnahme mit der TransactionConflict-Metrik für die DynamoDB-Tabelle in Amazon CloudWatch überwachen.

Konflikt zwischen gleichzeitigen TransactWriteItems-Aufrufen

Ein Transaktionskonflikt tritt aufgrund gleichzeitiger Aufrufe für ein Element auf Elementebene innerhalb mehrerer Transaktionen auf. Transaktionskonflikte können aus den folgenden Gründen auftreten:

  • Ein PutItem-, UpdateItem- oder DeleteItem-Aufruf für ein Element steht in Konflikt mit einem laufenden TransactWriteItems-Aufruf, der dasselbe Element enthält.
  • Ein Element in einem TransactWriteItems-Aufruf ist Teil eines anderen laufenden TransactWriteItems-Aufrufs.

Wenn ein PutItem-, UpdateItem- oder DeleteItem-Aufruf aus diesem Grund abgelehnt wird, schlägt der Aufruf mit einer TransactionConflictException fehl. Wenn jedoch ein Aufruf auf Elementebene in TransactWriteItems oder TransactGetItems aus einem anderen Grund abgelehnt wird, schlägt der Aufruf mit einer TransactionCanceledException fehl.

Die bereitgestellte Kapazität reicht nicht aus, um die Transaktion abzuschließen

Falls du den TransactWriteItems-Aufruf ausführst, wenn nicht genügend bereitgestellte Kapazität vorhanden ist, wird die DynamoDB-Tabelle gedrosselt. Weitere Informationen zur Drosselung findest du unter Warum wird meine On-Demand-DynamoDB-Tabelle gedrosselt?und Warum wird die von Amazon DynamoDB bereitgestellte Tabelle gedrosselt?

Transaktionen schlagen aufgrund einer IdempotentParameterMismatch-Ausnahme fehl

Du kannst dem TransactWriteItems-Aufruf ein optionales Client-Token hinzufügen, um sicherzustellen, dass die Aufrufe idempotent sind. Idempotente Transaktionen können dazu beitragen, Anwendungsfehler zu vermeiden, wenn dieselbe Operation aufgrund eines Verbindungszeitlimits oder anderer Verbindungsprobleme mehrmals abgeschickt wird.

Ein Client-Token ist nach Abschluss des Aufrufs, der es verwendet, 10 Minuten lang gültig. Wenn sich der Aufruf mit diesem Token innerhalb des 10-Minuten-Fensters wiederholt, aber einige Parameter innerhalb der Transaktion ändern, gibt DynamoDB eine IDempotentParameterMismatch-Ausnahme zurück.

Ein ValidationError ist aufgetreten

Wenn ein Element größer als 400 KB wird oder ein lokaler sekundärer Index (LSI) zu groß wird, erhältst du einen ValidationError. DynamoDB begrenzt die Größe jedes Elements, das du in einer Tabelle speichern kannst. Wenn die Anwendung mehr Daten in einem Element speichern muss, als die Größenlimit zulässt, komprimiere eines oder mehrere der größeren Attribute. Oder teile das große Element in mehrere kleinere Elemente auf, die durch Sortierschlüssel indexiert sind. Du kannst das Element auch als Objekt in einem Amazon Simple Storage Service (Amazon S3)-Bucket speichern. Nachdem du dies getan hast, kannst du die Amazon S3-Objektkennung im DynamoDB-Element speichern. Weitere Informationen findest du unter Bewährte Methoden zum Speichern großer Elemente und Attribute.

Validierungsfehler können auch aufgrund von Änderungen auftreten, die durch die Transaktion vorgenommen wurden. Das bedeutet, dass die Parameter in dem Aufruf eine oder mehrere Einschränkungen nicht erfüllen, die vom DynamoDB-Service angegeben werden. Weitere Informationen zu den Einschränkungstypen und den zugehörigen Fehlermeldungen findest du in der Dokumentation zur Klasse TransactionCanceledException.

Die Gesamtgröße der Elemente in einer Transaktion übersteigt 4 MB

Die TransactWriteItems-Operation darf 4 MB nicht überschreiten. Das ist ein fester Limitwert. Weitere Informationen findest du unter DynamoDB-Transaktionen.

Ein 4xx-Fehler ist aufgetreten

Ein Benutzerfehler, z.B. ein ungültiges Datenformat, kann aus einer Reihe von Gründen auftreten. Beispielsweise erhältst du möglicherweise einen 4xx-Fehler für einen ResourceNotFoundException-Fehler, weil die TransactWriteItems-Operation die zugrunde liegende DynamoDB-Tabelle oder den zugrunde liegenden DynamoDB-Index nicht finden kann. Oder die DynamoDB-Tabelle oder der DynamoDB-Index hat möglicherweise nicht den Status AKTIV.

Hinweis: Wenn du AWS SDK für Java verwendest, listet DynamoDB die Stornierungsgründe in der Eigenschaft CancellationReasons auf. Diese Eigenschaft ist nicht für andere SDK-Sprachen festgelegt. Die Gründe für die Stornierung der Transaktion sind in der Reihenfolge der angeforderten Elemente aufgeführt.

Ein 5xx-Fehler ist aufgetreten

Transaktionen können auch aufgrund von Systemfehlern fehlschlagen, die als 5xx-Fehler protokolliert werden. Du erhältst diese Fehler, wenn der Service den Aufruf nicht bearbeiten kann. Diese Fehler können aus verschiedenen Gründen auftreten, z.B. vorübergehende Netzwerkprobleme in der Flotte, Infrastrukturprobleme, Probleme im Zusammenhang mit Speicherknoten und mehr. Weitere Informationen findest du unter Problembehandlung bei internen Serverfehlern in Amazon DynamoDB.

Ähnliche Informationen

Häufige Fehler

TransactWriteItems-API

AWS OFFICIAL
AWS OFFICIALAktualisiert vor 2 Monaten