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_NEW

Gegen 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 du ValidationException: The number of conditions on the keys is invalid, keinen Teiltreffer.

  • --update-expressionSET-, ADD-, REMOVE- und DELETE-Klauseln, über --expression-attribute-names aliasiert. ADD #upd2 :updValue2 ist hier ein atomares Inkrement auf Awards; 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: Year

    Eine 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-values gibt der Befehl überhaupt nichts aus und endet mit 0. Es gibt keine Zeile „1 item updated" zum Greppen, Stille ist also Erfolg. UPDATED_NEW gibt 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-Semantikupdate-item erzeugt das Item, wenn der Key fehlt; so ist Awards oben 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

Referenzen

Zuletzt verifiziert am 2026-07-28 gegen die oben verlinkte offizielle AWS-Dokumentation.

Mit DynamoDB ohne die Console arbeiten

Ein schneller DynamoDB-Desktop-Client, der das echte SQL ausführt, das DynamoDB nicht kann — JOINs, GROUP BY, Aggregationen — mit visueller Bearbeitung und einem KI-Agenten auf deinen eigenen Bedrock-Schlüsseln.

30 Tage kostenlos testen, keine Kreditkarte — danach der Kostenlos-Tarif ohne Zeitlimit.