TransactWriteItems DynamoDB avec l'AWS CLI
aws dynamodb transact-write-items regroupe jusqu'à 100 écritures en une seule opération tout-ou-rien — soit chaque action est validée, soit aucune ne l'est. Les actions vont dans --transact-items sous forme de tableau JSON mêlant Put, Update, Delete et ConditionCheck, chacune avec une condition optionnelle.
Code
aws dynamodb transact-write-items \
--transact-items '[
{
"Update": {
"TableName": "Music",
"Key": {"Artist": {"S": "Arturo Sandoval"}, "SongTitle": {"S": "Cubano Chant"}},
"UpdateExpression": "SET #upd0 = #upd0 - :one",
"ConditionExpression": "#upd0 >= :one",
"ExpressionAttributeNames": {"#upd0": "Awards"},
"ExpressionAttributeValues": {":one": {"N": "1"}}
}
},
{
"Update": {
"TableName": "Music",
"Key": {"Artist": {"S": "Arturo Sandoval"}, "SongTitle": {"S": "A Mis Abuelos"}},
"UpdateExpression": "SET #upd0 = if_not_exists(#upd0, :zero) + :one",
"ExpressionAttributeNames": {"#upd0": "Awards"},
"ExpressionAttributeValues": {":one": {"N": "1"}, ":zero": {"N": "0"}}
}
}
]'En cas de succès, la commande n'imprime rien et se termine avec le code 0. Si une condition échoue, toute la transaction est annulée :
An error occurred (TransactionCanceledException) when calling the TransactWriteItems
operation: Transaction cancelled, please refer cancellation reasons for specific
reasons [ConditionalCheckFailed, None]Explication
--transact-items— jusqu'à 100 actionsPut/Update/Delete/ConditionCheck, 4 Mo au total, valeurs en DynamoDB JSON. Les actions peuvent s'étendre sur plusieurs tables (même compte + même Region), mais deux actions ne peuvent pas cibler le même élément — cela seul annule la transaction.- Les raisons d'annulation voyagent dans le message d'erreur dans l'ordre des actions — les codes incluent
ConditionalCheckFailed,TransactionConflict(une autre transaction a touché un élément en cours de route — sûr à réexécuter),ProvisionedThroughputExceededetValidationError;Nonemarque les actions innocentes. Ici, la condition de la première mise à jour (Awards >= 1) a échoué ; la seconde action était correcte. ConditionCheck— affirme une condition sur un élément que la transaction ne modifie pas et met son veto sur toute la transaction si elle échoue.--client-request-token— passe un token fixe pour rendre les réexécutions idempotentes pendant 10 minutes ; réexécuter la commande exacte après un timeout ne peut alors pas appliquer les écritures deux fois.- Coût — les écritures transactionnelles facturent environ 2× les WCU des écritures simples (préparation + validation). Pour de l'atomicité sur un seul élément, une écriture conditionnelle est l'outil moins cher.
- Astuce : garde le tableau d'actions dans un fichier et passe
--transact-items file://transaction.json.
À faire visuellement
Les expressions de condition et de mise à jour à l'intérieur de chaque action sont la partie délicate — le DynamoDB Expression Builder les assemble avec les maps de noms/valeurs et copie des commandes prêtes à exécuter.
Pour éditer des éléments et examiner les expressions générées dans une interface graphique — télécharge DynoTable.
Exemples liés
- TransactWriteItems DynamoDB en Node.js — la même transaction avec AWS SDK v3.
- TransactWriteItems DynamoDB en Python — la même transaction avec boto3.
- BatchWriteItem DynamoDB avec l'AWS CLI — des écritures en masse quand tu n'as pas besoin d'atomicité.
- Transactions DynamoDB — isolation, idempotence, et quand les transactions valent le coup.
- DynamoDB TransactionCanceledException — chaque code de raison d'annulation, décodé.
- "Too many actions in a TransactWriteItems call" — les limites de 100 actions et 4 Mo par transaction.
- "Transaction request cannot include multiple operations on one item" — une action par élément, par transaction.
References
- TransactWriteItems — Amazon DynamoDB API Reference
- transact-write-items — AWS CLI Command Reference
- Amazon DynamoDB transactions: how it works — Amazon DynamoDB Developer Guide
- DynamoDB read and write operations (capacity unit consumption) — Amazon DynamoDB Developer Guide
Dernière vérification le 2026-07-13 par rapport à la documentation officielle AWS liée ci-dessus.