ValidationException: ExpressionAttributeValues contains invalid value
TL;DR — Ein Wert in ExpressionAttributeValues ist leer, hat einen nicht unterstützten Typ, oder ein :platzhalter aus deiner Expression wurde nie definiert. Prüfe, dass jeder :value vorhanden und nicht leer ist.
Was es bedeutet
Häufige Nachrichten:
ValidationException: ExpressionAttributeValues contains invalid value: One or more parameter values were invalid: An AttributeValue may not contain an empty string for key :s
ValidationException: Value provided in ExpressionAttributeValues unused in expressions: keys: {:x}
ValidationException: An expression attribute value used in expression is not defined; attribute value: :vWarum es passiert
- Leerer String / leeres Binary — historisch hat DynamoDB
""zurückgewiesen. Leere Strings sind jetzt für Nicht-Schlüssel-Attribute erlaubt (und leere Lists/Maps sind in Ordnung), aber leere Werte in Schlüssel-Attributen und leere Sets sind weiterhin ungültig. - Undefinierter Platzhalter — deine Expression referenziert
:v, aberExpressionAttributeValueshat kein:v. - Ungenutzter Platzhalter — du hast
:xdefiniert, aber keine Expression verwendet ihn (DynamoDB weist die gesamte Anfrage zurück). - Falscher Typ — die Übergabe eines rohen JS-Objekts/
undefined/NaNoder (mit dem Low-Level-Client) des falschen{S}-/{N}-Wrappers. - Ein leeres Set, das an eine
ADD-/DELETE-Operation übergeben wird — diese Klauseln nehmen Set- (oder, beiADD, Zahlen-)Operanden, und ein Set kann nie leer sein.
So behebst du es
- Jeder
:valuein der Expression muss inExpressionAttributeValuesdefiniert sein, und jeder definierte Wert muss benutzt werden — halte beides exakt synchron. - Sichere gegen leer/
undefinedab. Übergib:vnicht, wenn die Quelleundefinedist; lass stattdessen die Klausel weg. Bei Sets muss mindestens ein Element drin sein. - Nimm den Document Client (
@aws-sdk/lib-dynamodb), damit native JS-Werte für dich gemarshallt werden — das beseitigt die meisten Fehler bei Typ-Wrappern. - Gleich die Map gegen den Expression-String ab. Gib beides vor dem Aufruf nebeneinander aus — jedes
:tokenin der Expression muss als Key inExpressionAttributeValuesauftauchen, und jeder Key der Map muss in der Expression vorkommen. - Bei Low-Level-Clients validier die Wire-Typen. Ein leeres Set
{SS: []}oder ein fehlender Typ-Wrapper an einem Schlüsselattribut scheitert auch dann, wenn der Platzhalter definiert ist.
Beispiel
import {DynamoDBClient} from '@aws-sdk/client-dynamodb';
import {DynamoDBDocumentClient, UpdateCommand} from '@aws-sdk/lib-dynamodb';
const doc = DynamoDBDocumentClient.from(new DynamoDBClient({}));
const email = getEmail(); // could be undefined
const names = {'#e': 'email'};
const values = {':e': email};
if (email == null) throw new Error('email required'); // don't send :e = undefined
await doc.send(
new UpdateCommand({
TableName: 'Users',
Key: {pk: 'USER#1'},
UpdateExpression: 'SET #e = :e',
ExpressionAttributeNames: names,
ExpressionAttributeValues: values
})
);Weg in DynoTable
DynoTables Update-Editor bindet Werte während des Tippens und weist leere Platzhalter zurück, bevor der Request deinen Rechner verlässt. Öffne das Item mit ⌘K, bearbeite ein Feld und sieh dir die erzeugte ExpressionAttributeValues-Map in der Request-Vorschau an — Abweichungen fallen sofort auf statt später als 400 in CloudWatch.
For SDK code you cannot run inline, paste the expression into the Expression Builder and diff its :value map against yours. Wechsle Profile mit ⌘P to test against the same table that threw the error; Verbindung testen on Einstellungen → Profile confirms credentials and region. Setup: Mit AWS verbinden, Installation. Empty sets and undefined JS values are the most common causes — guard both before the call leaves your process.
Quellen
- PutItem — Amazon DynamoDB API Reference (verifiziert 2026-07-13)
- Constraints in Amazon DynamoDB (verifiziert 2026-07-13)
Verwandte Fehler
Referenzen
- PutItem — Amazon DynamoDB API Reference
- Constraints in Amazon DynamoDB — Amazon DynamoDB Developer Guide
- Using update expressions in DynamoDB — Amazon DynamoDB Developer Guide
Zuletzt verifiziert am 2026-07-13 gegen die offizielle, oben verlinkte AWS-Dokumentation.