DynamoDB Conditional Write mit der AWS CLI
Ein bedingter Schreibvorgang hängt eine --condition-expression an put-item, update-item oder delete-item: DynamoDB wertet sie gegen das aktuelle Item aus und wendet den Schreibvorgang nur an, wenn sie zutrifft — atomar, ohne Read-Modify-Write-Race. Es ist DynamoDBs Primitive für optimistisches Locking. Dieses Beispiel sichert ein Update mit einer Versionsprüfung ab.
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"}}'Bei Erfolg gibt der Befehl nichts aus und beendet sich mit 0. Kam ein anderer Writer zuerst, scheitert die Bedingung:
An error occurred (ConditionalCheckFailedException) when calling the UpdateItem operation:
The conditional request failedErklärung
--condition-expression— atomar mit dem Schreibvorgang gegen das gespeicherte Item geprüft. Verfügbare Funktionen:attribute_exists,attribute_not_exists,attribute_type,contains,begins_with,size, plus Vergleichsoperatoren (=,<>,<,>,<=,>=,BETWEEN,IN) undAND/OR/NOT.- Die zwei Standard-Idiome:
attribute_exists(#key)bei einem Update = "nur aktualisieren, nie anlegen". Ohne es legtupdate-itemauf einen fehlenden Schlüssel stillschweigend das Item an (der versehentliche Upsert-Bug).attribute_not_exists(#key)bei einem Put = "nur anlegen, nie überschreiben" — gezeigt auf der PutItem-Seite.
- Optimistisches Locking — lies das Item (Version 7), dann schreibe mit
#version = :expectedVersionund erhöhe auf 8. Zwei gleichzeitige Writer können nicht beide gewinnen; der Verlierer beendet sich mit einem Wert ungleich null undConditionalCheckFailedException, liest neu und wiederholt auf der neuen Version. --return-values-on-condition-check-failure ALL_OLD— bittet DynamoDB, das aktuelle Item an den Fehler anzuhängen (gültige WerteALL_OLD|NONE; keine Lesekapazität verbraucht). Die SDKs geben dieses Item an der Exception aus; die Standard-Fehlerausgabe der CLI druckt nur die Meldung, daher lesen Skripte nach einem Fehler meist mitget-itemneu.- Ein gescheiterter bedingter Schreibvorgang berechnet trotzdem den Schreibversuch — nutze Bedingungen nicht als kostenlose Existenzprüfung.
Visuell erledigen
Bedingungsausdrücke sind genau das, was der DynamoDB Expression Builder baut — wähle die Funktion, erhalte den Ausdruck + Name-/Wert-Zuordnungen als lauffertigen CLI-Befehl.
Um Items mit generierten, überprüfbaren Ausdrücken zu bearbeiten statt mit Shell-gequoteten Platzhaltern — lade DynoTable herunter.
Verwandte Beispiele
- DynamoDB Conditional Write in Node.js — dasselbe optimistische Lock mit AWS SDK v3.
- DynamoDB Conditional Write in Python — dasselbe optimistische Lock mit boto3.
- DynamoDB PutItem mit der AWS CLI — der Create-only-
attribute_not_exists-Put. - DynamoDB-Bedingungsausdrücke — jede Funktion, mit Mustern.
- ReturnValues verstehen — was dir jede Rückgabeoption liefert.
- DynamoDB ConditionalCheckFailedException — wann die gescheiterte Prüfung erwartet wird und wie man sie günstig behandelt.
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
Zuletzt verifiziert am 2026-07-13 gegen die oben verlinkte offizielle AWS-Dokumentation.