DynamoDB UpdateItem mit der AWS CLI
Fünf Argumente, drei davon DynamoDB JSON, alle im Streit mit deiner Shell: Das macht aws dynamodb update-item fummelig, nicht das Update selbst. Was die CLI gegenüber jedem anderen Client draufsetzt, ist eine zweite Stelle, an der der Request abgelehnt werden kann — und ein Satz Exit-Codes, präzise genug, um dir zu sagen, welche es war.
Code
aws dynamodb update-item \
--table-name 'Music' \
--key '{"Artist":{"S":"Arturo Sandoval"},"SongTitle":{"S":"Cubano Chant"}}' \
--update-expression 'SET #upd0 = :updValue0, #upd1 = :updValue1 ADD #upd2 :updValue2' \
--expression-attribute-names '{"#upd0":"Genre","#upd1":"Year","#upd2":"Awards"}' \
--expression-attribute-values '{":updValue0":{"S":"Latin Jazz"},":updValue1":{"N":"1994"},":updValue2":{"N":"1"}}' \
--return-values ALL_NEWGegen ein Item ausgeführt, das weder Genre noch Awards hatte, gibt dieser Befehl aus:
{
"Attributes": {
"Artist": {
"S": "Arturo Sandoval"
},
"Awards": {
"N": "1"
},
"Genre": {
"S": "Latin Jazz"
},
"Year": {
"N": "1994"
},
"SongTitle": {
"S": "Cubano Chant"
}
}
}ADD auf einem fehlenden Awards hat bei null begonnen, und die Attribute kamen in der Reihenfolge des Dienstes zurück, nicht in der, in der die Expression sie geschrieben hat. Leite das in nichts Positionsabhängiges weiter.
Erklärung
--key— der vollständige Primary Key, als DynamoDB JSON. Übergibst du bei einer Tabelle mit zusammengesetztem Key nur den Partition Key, bekommst duValidationException: The number of conditions on the keys is invalid, keinen Teiltreffer.--update-expression—SET-,ADD-,REMOVE- undDELETE-Klauseln, über--expression-attribute-namesaliasiert.ADD #upd2 :updValue2ist hier ein atomares Inkrement aufAwards; die vollständige Klauselgrammatik steht in Update Expressions.Zahlen sind gequotete Strings, und die CLI prüft das, bevor DynamoDB es tut. Schreib
{"N":1994}statt{"N":"1994"}und nichts verlässt deinen Rechner:aws: [ERROR]: An error occurred (ParamValidation): Parameter validation failed: Invalid type for parameter ExpressionAttributeValues.:y.N, value: 1994, type: <class 'int'>, valid types: <class 'str'>Der Exit-Code sagt dir, welche Hälfte gescheitert ist. Diese clientseitige Ablehnung endet mit 252. Ein Request, den DynamoDB tatsächlich beantwortet und abgelehnt hat, endet mit 254:
aws: [ERROR]: An error occurred (ValidationException) when calling the UpdateItem operation: Invalid UpdateExpression: Attribute name is a reserved keyword; reserved keyword: YearEine 252 ist immer ein Bug in deinem JSON. Eine 254 kann eine Bedingung sein, von der du bewusst erwartet hast, dass sie fehlschlägt — Skripte sollten also auf die beiden verzweigen, nicht auf „ungleich null".
Ohne
--return-valuesgibt der Befehl überhaupt nichts aus und endet mit 0. Es gibt keine Zeile „1 item updated" zum Greppen, Stille ist also Erfolg.UPDATED_NEWgibt nur die Attribute zurück, die die Expression angefasst hat — die günstige Option, wenn du nur den neuen Zählerwert brauchst.Einmal quoten, dann eine Datei nutzen. Setze jedes JSON-Argument in einfache Anführungszeichen, damit die Shell
"und$in Ruhe lässt, und verschiebe alles Lange in--expression-attribute-values file://values.json, statt es zweimal zu escapen.Upsert-Semantik —
update-itemerzeugt das Item, wenn der Key fehlt; so istAwardsoben aufgetaucht. Ergänze--condition-expression "attribute_exists(Artist)", um es auf reines Aktualisieren zu beschränken.
Nichts hier baut die Expression für dich
Von den fünf auf dieser Site dokumentierten Clients generiert genau einer eine UpdateExpression: das expression-Paket des Go-SDK. Node, Python und Java geben dir alle den String zum Selbstschreiben. Die CLI ist der schlimmste der vier Fälle, denn du schreibst zusätzlich beide Alias-Maps und das DynamoDB JSON von Hand — in einer Shell, die dieselben Zeichen interpretieren will.
Der DynamoDB Expression Builder schließt diese Lücke: Stell die Klauseln im Browser zusammen, kopiere einen fertig gequoteten aws dynamodb update-item-Befehl. Um dieselbe Änderung gegen eine echte Tabelle vorzunehmen, ohne ein einziges Anführungszeichen zu escapen, lade DynoTable herunter.
Verwandte Leitfäden
- DynamoDB Update Expressions —
SET,ADD,REMOVE,DELETEund Idiome. - ReturnValues verstehen — was dir jede
--return-values-Option liefert. - „Attribute name is a reserved keyword" — warum die Alias-Map hier nicht optional ist.
- „Invalid UpdateExpression"-Syntaxfehler — die häufigen SET/ADD-Syntaxfehler, entschlüsselt.
Referenzen
- UpdateItem — Amazon DynamoDB API Reference
- update-item — AWS CLI Command Reference
- Update expressions — Amazon DynamoDB Developer Guide
Zuletzt verifiziert am 2026-07-28 gegen die oben verlinkte offizielle AWS-Dokumentation.