Attribute name is a reserved keyword
TL;DR — Du hast einen Attributnamen verwendet, der eines der reservierten Wörter von DynamoDB ist (es gibt ~570 — status, name, size, type, data, year, count und viele mehr), direkt in einer Expression. Ersetze ihn durch einen ExpressionAttributeNames-Platzhalter — #status gemappt auf status — und der Request geht durch.
Was es bedeutet
ValidationException: 1 validation error detected: Invalid UpdateExpression: Attribute name is a reserved keyword; reserved keyword: status
ValidationException: 1 validation error detected: Invalid KeyConditionExpression: Attribute name is a reserved keyword; reserved keyword: nameDynamoDB führt eine Liste reservierter Wörter, die nicht wörtlich in einer Expression erscheinen dürfen (UpdateExpression, ConditionExpression, FilterExpression, KeyConditionExpression, ProjectionExpression). Wenn dein Attribut zufällig eines davon ist, weist der Parser die Expression zurück. Es ist eine ValidationException (HTTP 400), nicht wiederholbar, bis du den Namen mit einem Alias versiehst. Die Meldung nennt das genaue reservierte Wort.
Warum es passiert
- Ein gängiger Attributname kollidiert mit einem reservierten Wort —
status,name,size,type,data,year,count,timestamp,source,regionund hunderte weitere sind reserviert. - Eine
ProjectionExpression, die einen reservierten Attributnamen direkt auflistet. - Eine
FilterExpression/ConditionExpression, die auf einen reservierten Namen verweist (#status = :sfunktioniert;status = :snicht). - Ein Attributname, der mit einer Zahl beginnt oder ein Leerzeichen, einen Punkt oder einen Bindestrich enthält — auch diese erfordern einen
ExpressionAttributeNames-Alias und erzeugen einen verwandten Validierungsfehler.
So behebst du es
- Versieh den Namen mit
ExpressionAttributeNamesals Alias. Mappe einen#platzhalterauf den echten Namen und verwende den Platzhalter in der Expression:await doc.send( new UpdateCommand({ TableName: 'Orders', Key: {pk: 'ORDER#1'}, UpdateExpression: 'SET #status = :s', ExpressionAttributeNames: {'#status': 'status'}, ExpressionAttributeValues: {':s': 'shipped'} }) ); - Ein Platzhalter muss mit
#beginnen, gefolgt von alphanumerischen Zeichen/Unterstrich, und jedes verwendete#namemuss definiert sein (und jedes definierte verwendet werden). - Setze Aliase defensiv — jeden Attributnamen in deinen Expressions mit einem Alias zu versehen, erspart dir, jemals wissen zu müssen, welche Wörter reserviert sind.
- Versieh Namen, die einen wörtlichen Punkt enthalten, mit einem einzigen Platzhalter — ein Attribut, das wörtlich
Safety.Warningheißt, braucht einen Alias für den ganzen Namen ({'#sw': 'Safety.Warning'}), weil ein nicht aliassierter.als Dokumentpfad-Trenner gelesen wird. Für einen echten verschachtelten Pfad versieh stattdessen jedes Segment mit einem Alias (#pr.#5star).
FAQ
Wie behebe ich "Attribute name is a reserved keyword" in DynamoDB? Versieh das Attribut mit ExpressionAttributeNames als Alias. Mappe einen Platzhalter wie #status auf den echten Namen "status" und verwende #status in der Expression statt des wörtlichen Wortes. Der Platzhalter muss mit # beginnen und jeder, den du definierst, muss verwendet werden.
Welche DynamoDB-Attributnamen sind reserviert? Es gibt rund 570 reservierte Wörter, darunter alltägliche Namen wie status, name, size, type, data, year, count, timestamp und region. Statt die Liste auswendig zu lernen, versieh jeden Attributnamen in deinen Expressions mit ExpressionAttributeNames als Alias.
Verwandte Fehler
- Invalid UpdateExpression syntax — fehlerhafte Expression-Struktur.
- ValidationException (Überblick)
- Code-Beispiel: UpdateItem in Node.js · in Python (boto3) — reservierte Wörter mit #-Platzhaltern aliassiert.
- Learn: Expression-Namen & -Werte · Update-Expressions
Referenzen
- Reserved words in DynamoDB — Amazon DynamoDB Developer Guide
- Expression attribute names (aliases) in DynamoDB — Amazon DynamoDB Developer Guide
- Constraints in Amazon DynamoDB — Amazon DynamoDB Developer Guide
- Query — Amazon DynamoDB API Reference
Zuletzt verifiziert am 2026-07-13 gegen die oben verlinkte offizielle AWS-Dokumentation.