Pourquoi mon appel d'API TransactWriteItems échoue-t-il dans Amazon DynamoDB ?
Mon appel d'API TransactWriteItems échoue dans Amazon DynamoDB. Je souhaite connaître la cause racine du problème.
Résolution
La requête d’API TransactWriteItems peut échouer ou être rejetée par DynamoDB pour diverses raisons. Consultez les résolutions suivantes pour connaître les étapes de dépannage.
L'expression de condition contient une condition qui n'est pas satisfaite
Si une condition que vous avez définie pour l'une des opérations de votre requête TransactWriteItems n'est pas satisfaite, toutes les opérations échouent. La requête TransactWriteItems est une opération d'écriture synchrone qui regroupe jusqu'à 25 requêtes d'action. Soit toutes les requêtes d'action aboutissent, soit toutes les requêtes d'action échouent.
Si votre requête échoue en raison de ce problème, un message d'erreur similaire au message suivant s’affiche :
"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 requête sont satisfaites.
La table que vous utilisez se trouve dans une autre région ou dans un autre compte
Les requêtes TransactWriteItems vous permettent de travailler avec des éléments de différentes tables. Toutefois, vous ne pouvez utiliser que des tables situées dans la même région AWS et dans le même compte que ceux qui ont envoyé la requête. Pour résoudre ce problème, utilisez uniquement des tables situées dans la même région AWS que le compte AWS à partir duquel vous effectuez la requête TransactWriteItems.
Le même élément est géré par plusieurs actions dans l'opération TransactWriteItems
Si plusieurs actions de l'opération TransactWriteItems gèrent le même élément, la requête échoue et un message d'erreur similaire au message suivant s'affiche :
« Transaction request cannot include multiple operations on one item »
Par exemple, si TransactWriteItems essaie d'exécuter à la fois une opération ConditionCheck et une opération Put sur le même élément, la requête échoue avec une exception TransactionConflictException. Vous pouvez surveiller cette exception à l'aide de la métrique TransactionConflict pour votre table DynamoDB dans Amazon CloudWatch.
Conflit entre des requêtes TransactWriteItems simultanées
Un conflit se produit entre plusieurs requêtes simultanées au niveau de l'élément pour un élément au sein de plusieurs transactions. Des conflits de transaction peuvent survenir pour les raisons suivantes :
- Une requête PutItem, UpdateItem ou DeleteItem pour un élément est en conflit avec une requête TransactWriteItems qui inclut le même élément.
- Un élément figurant dans une requête TransactWriteItems fait partie d'une autre requête TransactWriteItems.
Si une requête PutItem, UpdateItem ou DeleteItem est rejetée pour cette raison, elle échoue avec une erreur TransactionConflictException. Toutefois, si une requête au niveau de l'élément dans TransactWriteItems ou TransactGetItems est rejetée pour une raison différente, elle échoue avec une exception TransactionCanceledException.
La capacité provisionnée est insuffisante pour terminer la transaction
Si vous invoquez la requête TransactWriteItems alors que la capacité provisionnée est insuffisante, la table DynamoDB est limitée. Pour plus d'informations sur la limitation, consultez les sections Pourquoi ma table DynamoDB à la demande est-elle limitée ? et Pourquoi ma table provisionnée Amazon DynamoDB est-elle limitée ?
Les transactions échouent en raison de l'exception IDempotentParameterMismatch
Vous pouvez inclure un jeton client facultatif dans votre requête TransactWriteItems pour vous assurer que les requêtes sont idempotentes. Les transactions idempotentes peuvent contribuer à éviter les erreurs d'application lorsque la même opération est soumise plusieurs fois en raison d'un délai d’expiration de la connexion ou d'autres problèmes de connectivité.
Un jeton client est valide pendant 10 minutes après la fin de la requête qui l'utilise. Si la requête contenant ce jeton se répète dans la fenêtre de 10 minutes mais modifie certains paramètres au cours de la transaction, DynamoDB renvoie une exception IdempotentParameterMismatch.
Une erreur de validation 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 de validation s’affiche. DynamoDB limite la taille de chaque élément que vous pouvez stocker dans une table. Si votre application doit stocker plus de données dans un élément que la taille limite ne le permet, compressez un ou plusieurs des attributs les plus volumineux. Vous pouvez également diviser le grand élément en plusieurs éléments de plus petite taille, indexés par des clés de tri. Vous pouvez également stocker l'élément en tant qu'objet dans un compartiment Amazon Simple Storage Service (Amazon S3). Puis, vous pouvez stocker l'identifiant d'objet Amazon S3 dans votre élément DynamoDB. Pour plus d'informations, consultez la section Bonnes pratiques de stockage d'objets et d'attributs volumineux.
Des erreurs de validation peuvent également survenir en raison de modifications apportées par la transaction. Cela signifie que les paramètres de la requête ne satisfont pas à une ou plusieurs contraintes spécifiées par le service DynamoDB. Pour plus d'informations sur les types de contraintes et les messages d'erreur associés, consultez la documentation de Class TransactionCanceledException.
La taille totale des éléments d'une transaction est supérieure à 4 Mo
L'opération TransactWriteItems ne peut pas dépasser 4 Mo. Il s'agit d'une limite stricte. Pour plus d'informations, consultez la section Transactions DynamoDB.
Une erreur 4xx s'est produite
Une erreur utilisateur, telle qu'un format de données non valide, peut survenir pour plusieurs raisons. Par exemple, vous pouvez recevoir une erreur 4xx pour une erreur ResourceNotfoundException car l'opération TransactWriteItems ne trouve pas la table ou l'index DynamoDB sous-jacent. Il se peut également que la table ou l'index DynamoDB n'ait pas le statut ACTIF.
Remarque : Lorsque vous utilisez le kit SDK AWS 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 du kit SDK. Les raisons d'annulation des transactions sont répertoriées dans l'ordre des éléments demandés.
Une erreur 5xx s'est produite
Les transactions peuvent également échouer en raison d'erreurs système enregistrées comme des erreurs 5xx. Ces erreurs s'affichent lorsque le service n'est pas en mesure de répondre à la requête. Ces erreurs peuvent survenir pour diverses raisons, telles que des problèmes de réseau transitoires dans le parc, des problèmes d'infrastructure, des problèmes liés aux nœuds de stockage, etc. Pour plus d'informations, consultez la section Résolution des erreurs internes au serveur dans Amazon DynamoDB.
Informations connexes
Contenus pertinents
- demandé il y a 8 moislg...
- demandé il y a 2 anslg...
- demandé il y a 2 anslg...
- demandé il y a 2 anslg...
- AWS OFFICIELA mis à jour il y a 7 mois
- AWS OFFICIELA mis à jour il y a 2 ans
- AWS OFFICIELA mis à jour il y a 4 mois
- AWS OFFICIELA mis à jour il y a un mois