É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 failedExplication
--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) etAND/OR/NOT.- Les deux idiomes de base :
attribute_exists(#key)sur une mise à jour = « mettre à jour uniquement, ne jamais créer ». Sans lui,update-itemsur 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 = :expectedVersiontout en passant à 8. Deux écrivains concurrents ne peuvent pas gagner tous les deux ; le perdant se termine avec un code non nul etConditionalCheckFailedException, 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 validesALL_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 avecget-itemaprè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
- Écriture conditionnelle DynamoDB en Node.js — le même verrou optimiste avec l'AWS SDK v3.
- Écriture conditionnelle DynamoDB en Python — le même verrou optimiste avec boto3.
- DynamoDB PutItem avec l'AWS CLI — l'insertion
attribute_not_existsde création uniquement. - Expressions de condition DynamoDB — chaque fonction, avec des motifs.
- Comprendre ReturnValues — ce que chaque option de retour te donne.
- DynamoDB ConditionalCheckFailedException — quand la vérification échouée est attendue, et comment la gérer à moindre coût.
References
- UpdateItem — Amazon DynamoDB API Reference
- update-item — AWS CLI Command Reference
- Condition expressions — 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.