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 actions Put / 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), ProvisionedThroughputExceeded et ValidationError ; None marque 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 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

References

Dernière vérification le 2026-07-13 par rapport à la documentation officielle AWS liée ci-dessus.

Travaille avec DynamoDB sans la Console

DynoTable est un client de bureau rapide pour DynamoDB — parcours les tables, exécute des requêtes de style SQL et édite les items en local.