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

Lesedauer: 4 Minute
0

Mein TransactWriteItems-API-Aufruf schlägt fehl und ich möchte die Grundursache des Problems herausfinden.

Auflösung

Es gibt eine Reihe von Gründen, warum eine TransactWriteItems-Anforderung fehlschlagen oder von Amazon DynamoDB abgelehnt werden kann.

Eine Bedingung in einem der Bedingungsausdrücke ist nicht erfüllt

Wenn eine Bedingung, die Sie für einen der Vorgänge in Ihrer TransactWriteItems-Anforderung festgelegt haben, nicht erfüllt ist, schlagen alle Vorgänge fehl. TransactWriteItems ist ein synchroner Schreibvorgang, der bis zu 25 Aktionsanforderungen gruppiert. Entweder sind alle Aktionsanforderungen erfolgreich, oder alle Aktionsanforderungen schlagen fehl.

Wenn dieses Problem auftritt, wird eine Fehlermeldung ähnlich der Folgenden angezeigt:

"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 beheben, stellen Sie sicher, dass alle Bedingungen, die Sie für Ihre Anforderung festgelegt haben, erfüllt wurden.

Die Tabelle in der TransactWriteItems-Anforderung befindet sich in einer anderen Region oder einem anderen Konto

TransactWriteItems-Anforderungen ermöglichen es Ihnen, mit Elementen über verschiedene Tabellen hinweg zu arbeiten. Sie können jedoch nicht mit Tabellen arbeiten, die sich in verschiedenen Regionen oder Konten befinden. Stellen Sie sicher, dass Sie mit Tabellen arbeiten, die sich in derselben Region wie das Konto befinden, von dem aus Sie die TransactWriteItems-Anforderung stellen.

Mehrere Aktionen in der TransactWriteItems-Operation behandeln dasselbe Element

Wenn mehrere Aktionen in der TransactWriteItems-Operation dasselbe Element verarbeiten, schlägt die Anforderung mit einer Meldung ähnlich der Folgenden fehl:

„Transaktionsanforderung kann nicht mehrere Vorgänge für ein Element beinhalten“

Wenn TransactWriteItems beispielsweise versucht, einen ConditionCheck- und Put-Vorgang für dasselbe Element auszuführen, schlägt die Anforderung fehl. Sie können diese TransactionConflict-Ausnahme überwachen, indem Sie die Metrik TransactionConflict für Ihre DynamoDB-Tabelle in Amazon CloudWatch verwenden.

Es gibt nicht genügend bereitgestellte Kapazität, um die Transaktion abzuschließen

Wie bei jedem anderen Vorgang kann eine DynamoDB-Tabelle beim Aufrufen des TransactWriteItems-Vorgangs gedrosselt werden. Weitere Informationen zur Behebung dieses Problems finden Sie unter Warum wird meine Amazon-DynamoDB-Tabelle bei Bedarf gedrosselt? und warum wird meine Amazon-DynamoDB-Tabelle gedrosselt?

Es ist ein ValidationError aufgetreten

Wenn eine Elementgröße 400 KB überschreitet oder ein lokaler sekundärer Index (LSI) zu groß wird, tritt ein ValidationError auf. Ebenso können Validierungsfehler aufgrund von Änderungen durch die Transaktion auftreten. Dies bedeutet, dass die Eingabe eine oder mehrere vom DynamoDB-Service angegebene Einschränkungen nicht erfüllt. Der Überprüfungsfehler wird von einer der folgenden Meldungen angezeigt, je nachdem, welche Einschränkung nicht erfüllt wurde:

  • Ein oder mehrere Parameterwerte sind ungültig.
  • Der Aktualisierungsausdruck versucht, den sekundären Indexschlüssel über die zulässigen Größenbeschränkungen hinaus zu aktualisieren.
  • Der Aktualisierungsausdruck versucht, den sekundären Indexschlüssel auf einen nicht unterstützten Typ zu aktualisieren.
  • Ein Operand im Akutalisierungsausdruck hat einen falschen Datentyp.
  • Das zu aktualisierende Element hat die maximal zulässige Größe überschritten.
  • Sie versuchen, eine Zahl mit einer Größe zu speichern, die größer als der unterstützte Bereich ist, oder einen Zahlenüberlauf.
  • Es gibt eine Typinübereinstimmung für das zu aktualisierende Attribut.
  • Verschachtelungsebenen haben die unterstützten Grenzwerte überschritten.
  • Der im Aktualisierungsausdruck angegebene Dokumentpfad ist für die Aktualisierung ungültig.
  • Der angegebene Ausdruck bezieht sich auf ein Attribut, das im Element nicht vorhanden ist.

DynamoDB begrenzt die Größe jedes Elements, das Sie in einer Tabelle speichern können. Wenn Ihre Anwendung mehr Daten in einem Element speichern muss, als die Größenbeschränkung zulässt, komprimieren Sie eines oder mehrere der größeren Attribute. Oder teilen Sie das Element in mehrere Elemente auf, die durch Sortierschlüssel indiziert sind. Sie können den Artikel auch als Objekt in Amazon Simple Storage Service (Amazon S3) speichern. Speichern Sie dann die Amazon-S3-Objektkennung in Ihrem DynamoDB-Element. Weitere Informationen finden Sie unter Bewährte Methoden für das Speichern großer Elemente und Attribute.

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

TransactWriteItems-Vorgänge dürfen 4 MB nicht überschreiten. Das ist die maximal zulässige Obergrenze. Weitere Informationen finden Sie unter Amazon-DynamoDB-Transaktionen.

Es ist ein Benutzerfehler aufgetreten

Ein Benutzerfehler, wie ein ungültiges Datenformat, kann aus einer Reihe von Gründen auftreten. Beispielsweise erhalten Sie möglicherweise einen 4xx-Fehler für ResourceNottFoundException, weil der TransactWriteItems-Vorgang die zugrunde liegende DynamoDB-Tabelle oder den Index nicht finden kann. Oder die DynamoDB-Tabelle oder der Index ist möglicherweise nicht AKTIV.

Hinweis: Wenn Sie das AWS SDK für Java verwenden, führt DynamoDB die Stornierungsgründe in der CancellationReasons-Eigenschaft auf. Diese Eigenschaft ist nicht für andere Sprachen festgelegt. Die Gründe für Stornierungen von Transaktionen werden in der Reihenfolge der angeforderten Artikel aufgeführt. Wenn ein Element keinen Fehler aufweist, werden ein NONE-Code und eine Null-Meldung angezeigt. Weitere Informationen finden Sie unter TransactWriteItems.


Relevante Informationen

Häufige Fehler

AWS OFFICIAL
AWS OFFICIALAktualisiert vor 2 Jahren