Pourquoi mon appel d'API TransactWriteItems échoue-t-il dans Amazon DynamoDB ?

Lecture de 5 minute(s)
0

Mon appel d'API TransactWriteItems échoue et je veux connaître la cause racine de ce problème.

Solution

Il existe un certain nombre de raisons pour lesquelles une demande TransactWriteItems peut échouer ou être rejetée par Amazon DynamoDB.

Une condition dans l'une des expressions de condition n'est pas remplie

Si une condition que vous avez définie pour l'une des opérations dans votre demande TransactWriteItems n'est pas remplie, toutes les opérations échouent. TransactWriteItems est une opération d'écriture synchrone qui regroupe jusqu'à 25 demandes d'action. Par conséquent, soit toutes les demandes d'action réussissent, soit toutes les demandes d'action échouent.

Si vous rencontrez ce problème, vous recevez un message d'erreur similaire à celui-ci :

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

Pour résoudre ce problème, assurez-vous que toutes les conditions que vous avez définies pour votre demande sont satisfaites.

La table dans la demande TransactWriteItems se trouve dans une autre région ou un autre compte

Les demandes TransactWriteItems vous permettent de travailler avec des éléments dans différentes tables. Cependant, vous ne pouvez pas travailler avec des tables qui se trouvent dans des régions ou des comptes différents. Assurez-vous que vous travaillez avec des tables qui se trouvent dans la même région que le compte à partir duquel vous faites la demande TransactWriteItems.

Plus d'une action dans l'opération TransactWriteItems traite le même élément

Lorsque plus d'une action dans l'opération TransactWriteItems traite le même élément, la demande échoue avec un message similaire à celui-ci :

« Transaction request cannot include multiple operations on one item » (La demande de transaction ne peut pas inclure plusieurs opérations sur un même élément)

Ainsi, par exemple, si TransactWriteItems essaie d'exécuter une opération ConditionCheck et Put sur le même élément, la demande échoue. Vous pouvez surveiller cette exception TransactionConflict en utilisant la métrique TransactionConflict pour votre table DynamoDB dans Amazon CloudWatch.

La capacité allouée est insuffisante pour terminer la transaction

Comme toute autre opération, une table DynamoDB peut être limitée lorsque vous appelez l'opération TransactWriteItems. Pour plus d'informations sur la résolution de ce problème, consultez Pourquoi ma table Amazon DynamoDB à la demande est-elle limitée ? et Pourquoi ma table Amazon DynamoDB est-elle limitée ?

Une erreur de validation (ValidationError) s'est produite

Si la taille d'un élément dépasse 400 Ko ou si un index secondaire local (LSI) devient trop grand, une erreur ValidationError se produit. De même, des erreurs de validation peuvent se produire en raison des modifications apportées par la transaction. Cela signifie que l'entrée ne satisfait pas à une ou plusieurs contraintes spécifiées par le service DynamoDB. L'erreur de validation est accompagnée de l'un de ces messages, selon la contrainte qui n'est pas satisfaite :

  • Une ou plusieurs valeurs de paramètre ne sont pas valides.
  • L'expression de mise à jour tente de mettre à jour la clé d'index secondaire au-delà des limites de taille autorisées.
  • L'expression de mise à jour tente de mettre à jour la clé d'index secondaire vers un type non pris en charge.
  • Un opérande dans l'expression de mise à jour possède un type de données incorrect.
  • L'élément à mettre à jour a dépassé la taille maximale autorisée.
  • Vous essayez de stocker un nombre dont la magnitude est supérieure à la plage prise en charge, ou un dépassement de nombre.
  • Il y a une incompatibilité de type pour l'attribut à mettre à jour.
  • Les niveaux d'imbrication ont dépassé les limites prises en charge.
  • Le chemin du document fourni dans l'expression de mise à jour n'est pas valide pour la mise à jour.
  • L'expression fournie fait référence à un attribut qui n'existe pas dans l'élément.

DynamoDB limite la taille de chaque élément que vous pouvez stocker dans une table. Si votre application a besoin de stocker plus de données dans un élément que la limite de taille ne le permet, compressez un ou plusieurs des attributs les plus grands. Ou, divisez l'élément en plusieurs éléments, indexés par des clés de tri. Vous pouvez également stocker l'élément en tant qu'objet dans Amazon Simple Storage Service (Amazon S3). Stockez ensuite l'identifiant de l'objet Amazon S3 dans votre élément DynamoDB. Pour plus d'informations, consultez Bonnes pratiques pour le stockage d'éléments et d'attributs de grande taille.

La taille cumulée des éléments d'une transaction dépasse 4 Mo

Les opérations TransactWriteItems ne peuvent pas dépasser 4 Mo. Il s'agit d'une limite stricte. Pour plus d'informations, consultez Transactions DynamoDB.

Une erreur utilisateur s'est produite

Une erreur utilisateur, telle qu'un format de données invalide, peut se produire pour un certain nombre de raisons. Par exemple, vous pouvez recevoir une erreur 4xx pour ResourceNotFoundException parce que l'opération TransactWriteItems ne peut pas trouver la table ou l'index DynamoDB sous-jacent. Ou encore, la table ou l'index DynamoDB peut ne pas être ACTIVE (ACTIF).

Remarque : lorsque vous utilisez le kit AWS SDK pour Java, DynamoDB répertorie les raisons d'annulation dans la propriété CancellationReasons. Cette propriété n'est pas définie pour les autres langues. Les raisons d'annulation des transactions sont répertoriées dans l'ordre des éléments demandés. Si un élément ne comporte aucune erreur, il répertorie un code NONE et un message nul. Pour plus d'informations, consultez TransactWriteItems.


Informations connexes

Erreurs courantes

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a 2 ans