ValidationException: Invalid UpdateExpression
TL;DR — Deine UpdateExpression ist fehlerhaft. In neun von zehn Fällen ist es ein direkt benutztes reserviertes Wort (etwa status, name, size) — ersetz es durch einen #platzhalter in ExpressionAttributeNames. Die Meldung nennt das genaue Token.
Was es bedeutet
Typische Meldungen:
ValidationException: Invalid UpdateExpression: Attribute name is a reserved keyword; reserved keyword: status
ValidationException: Invalid UpdateExpression: Syntax error; token: "=", near: "SET status ="
ValidationException: Invalid UpdateExpression: An expression attribute value used in expression is not defined; attribute value: :sDynamoDB parst die Expression-Zeichenkette und weist alles ab, was keine gültige Grammatik ist oder einen undefinierten Platzhalter referenziert.
Warum es passiert
- Reserviertes Schlüsselwort roh verwendet. DynamoDB hat Hunderte reservierter Wörter —
status,name,size,count,data,year. Direkt in einer Expression verwendet, verursachen sie einen Syntaxfehler. Der Reserved-Words-Checker testet deine Attributnamen gegen die vollständige Liste und gibt die Alias-Map aus. - Fehlender
ExpressionAttributeNames-Eintrag für einen referenzierten#name. - Fehlender
ExpressionAttributeValues-Eintrag für einen referenzierten:value. - Falsche Verb-Grammatik — Klauseln falsch gemischt (
SET,REMOVE,ADD,DELETEhaben jeweils eine eigene Syntax) oder ein verirrtes=. - Attributname mit Sonderzeichen (Punkte, Bindestriche), das ohne Platzhalter verwendet wird.
So behebst du es
- Aliase jeden Attributnamen über
ExpressionAttributeNames(#status) — das umgeht die Liste reservierter Wörter vollständig, sodass alles zu aliasieren eine sichere Angewohnheit ist. - Definiere jeden
:value, den du referenzierst, inExpressionAttributeValues. - Verwende die richtige Klausel.
SETzum Schreiben/Überschreiben,REMOVEzum Löschen eines Attributs,ADDfür atomare Zahlen-/Set-Inkremente,DELETEzum Entfernen aus einem Set. - Prüfe auf reservierte Wörter, bevor du deployst. Füge deine Attributnamen in den Reserved-Words-Checker ein — er markiert jeden Namen auf der AWS-Liste und gibt die
#alias-Map aus, die du brauchst. - Baue die Expression einmal, kopiere sie überall hin. Ein von Hand bearbeiteter String driftet; generiere die vollständige
UpdateExpressionplus beide Attribut-Maps aus einer Quelle, damit die Platzhalter gepaart bleiben.
Beispiel
import {DynamoDBClient} from '@aws-sdk/client-dynamodb';
import {DynamoDBDocumentClient, UpdateCommand} from '@aws-sdk/lib-dynamodb';
const doc = DynamoDBDocumentClient.from(new DynamoDBClient({}));
await doc.send(
new UpdateCommand({
TableName: 'Orders',
Key: {pk: 'ORDER#1'},
// #status aliases the reserved word "status"
UpdateExpression: 'SET #status = :s, updatedAt = :t',
ExpressionAttributeNames: {'#status': 'status'},
ExpressionAttributeValues: {':s': 'SHIPPED', ':t': Date.now()}
})
);Zuerst in DynoTable prüfen
When an update fails in your app, reproduce it in DynoTable bevor du change production code. Öffne die Tabelle mit ⌘K, select the item, and use the inline update editor — DynoTable aliases reserved attribute names automatically and shows the generated UpdateExpression with both attribute maps. Staging (⌘S) lets you preview the edit and catch syntax errors before commit.
For batch fixes, paste the failing expression into the Expression Builder and compare its output to what your SDK sends. Profilwechsel (⌘P) keeps test runs on the same account as the error; use Verbindung testen on Einstellungen → Profile to confirm the profile matches. Siehe Mit AWS verbinden und Installation for profile setup. Cross-check attribute names in the reserved words checker when the error names a specific token like status or data. Aliasing every attribute name — not just reserved ones — is a safe habit that prevents this class of error entirely.
Quellen
- Using update expressions in DynamoDB (verifiziert 2026-07-13)
- Reserved words in DynamoDB (verifiziert 2026-07-13)
Verwandte Fehler
- ExpressionAttributeValues contains invalid value
- ValidationException (Übersicht)
- Code-Beispiel: UpdateItem in Node.js · in Python (boto3) — eine gültige UpdateExpression mit #names und :values.
- Learn: Update-Expressions · Expression-Namen & -Werte
Referenzen
- Using update expressions in DynamoDB — Amazon DynamoDB Developer Guide
- Reserved words in DynamoDB — Amazon DynamoDB Developer Guide
- Expression attribute names (aliases) in DynamoDB — Amazon DynamoDB Developer Guide
Zuletzt verifiziert am 2026-07-13 gegen die oben verlinkte offizielle AWS-Dokumentation.