Écriture conditionnelle DynamoDB avec l'AWS CLI

Une écriture conditionnelle attache un --condition-expression à put-item, update-item ou delete-item : DynamoDB l'évalue par rapport à l'élément actuel et n'applique l'écriture que si elle est vérifiée — de façon atomique, sans course lecture-modification-écriture. C'est la primitive de verrouillage optimiste de DynamoDB. Cet exemple protège une mise à jour avec une vérification de version.

Code

aws dynamodb update-item \
  --table-name 'Music' \
  --key '{"Artist":{"S":"Arturo Sandoval"},"SongTitle":{"S":"Cubano Chant"}}' \
  --update-expression 'SET #upd0 = :updValue0, #version = :newVersion' \
  --condition-expression 'attribute_exists(#cond0) AND #version = :expectedVersion' \
  --expression-attribute-names '{"#upd0":"Genre","#version":"Version","#cond0":"Artist"}' \
  --expression-attribute-values '{":updValue0":{"S":"Latin Jazz"},":expectedVersion":{"N":"7"},":newVersion":{"N":"8"}}'

En cas de succès la commande n'affiche rien et se termine avec le code 0. Si un autre écrivain est arrivé en premier, la condition échoue :

An error occurred (ConditionalCheckFailedException) when calling the UpdateItem operation:
The conditional request failed

Explication

  • --condition-expression — vérifié par rapport à l'élément stocké de façon atomique avec l'écriture. Fonctions disponibles : attribute_exists, attribute_not_exists, attribute_type, contains, begins_with, size, plus les comparateurs (=, <>, <, >, <=, >=, BETWEEN, IN) et AND/OR/NOT.
  • Les deux idiomes de base :
    • attribute_exists(#key) sur une mise à jour = « mettre à jour uniquement, ne jamais créer ». Sans lui, update-item sur une clé manquante crée silencieusement l'élément (le bug d'upsert accidentel).
    • attribute_not_exists(#key) sur une insertion = « créer uniquement, ne jamais écraser » — montré sur la page PutItem.
  • Verrouillage optimiste — lis l'élément (version 7), puis écris avec #version = :expectedVersion tout en passant à 8. Deux écrivains concurrents ne peuvent pas gagner tous les deux ; le perdant se termine avec un code non nul et ConditionalCheckFailedException, relit, et réessaie sur la nouvelle version.
  • --return-values-on-condition-check-failure ALL_OLD — demande à DynamoDB d'attacher l'élément actuel à l'échec (valeurs valides ALL_OLD | NONE ; aucune capacité de lecture consommée). Les SDK exposent cet élément sur l'exception ; la sortie d'erreur par défaut de la CLI n'affiche que le message, donc les scripts relisent généralement avec get-item après un échec.
  • Une écriture conditionnelle échouée facture quand même la tentative d'écriture — n'utilise pas les conditions comme sonde d'existence gratuite.

À faire visuellement

Les expressions de condition sont exactement ce que construit le DynamoDB Expression Builder — choisis la fonction, obtiens l'expression + les cartes de noms/valeurs sous forme de commande CLI prête à l'emploi.

Pour éditer des éléments avec des expressions générées et vérifiables au lieu de placeholders entre guillemets shell — 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.