ValidationException : Invalid UpdateExpression
TL;DR — Ton UpdateExpression est mal formé. Neuf fois sur dix, c'est un mot-clé réservé (comme status, name, size) utilisé directement — remplace-le par un #placeholder dans ExpressionAttributeNames. Le message indique le jeton exact.
Ce que ça signifie
Messages typiques :
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 analyse la chaîne de l'expression et rejette tout ce qui n'est pas une grammaire valide ou qui référence un placeholder non défini.
Pourquoi ça arrive
- Mot-clé réservé utilisé tel quel. DynamoDB a des centaines de mots réservés —
status,name,size,count,data,year. Utilisés directement dans une expression, ils provoquent une erreur de syntaxe. Le vérificateur de mots réservés teste tes noms d'attributs contre la liste complète et émet la map d'alias. - Entrée
ExpressionAttributeNamesmanquante pour un#nameque tu as référencé. - Entrée
ExpressionAttributeValuesmanquante pour une:valueque tu as référencée. - Grammaire de verbe incorrecte — mélange incorrect de clauses (
SET,REMOVE,ADD,DELETEont chacune leur propre syntaxe), ou un=égaré. - Nom d'attribut avec des caractères spéciaux (points, tirets) utilisé sans placeholder.
Comment le corriger
- Aliase chaque nom d'attribut via
ExpressionAttributeNames(#status) — cela contourne entièrement la liste des mots réservés, donc tout aliaser est une habitude sûre. - Définis chaque
:valueque tu référence dansExpressionAttributeValues. - Utilise la bonne clause.
SETpour écrire/écraser,REMOVEpour supprimer un attribut,ADDpour des incréments atomiques de nombre/ensemble,DELETEpour retirer d'un ensemble.
Exemple
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()}
})
);Vérifie d’abord dans DynoTable
Quand une mise à jour échoue dans ton app, reproduis-la dans DynoTable avant de toucher au code de production. Ouvre la table avec ⌘K, sélectionne l'élément, et sers-toi de l'éditeur de mise à jour en ligne — DynoTable aliase automatiquement les noms d'attributs réservés et affiche l'UpdateExpression générée avec ses deux maps d'attributs. Le staging (⌘S) te laisse prévisualiser la modification et attraper les erreurs de syntaxe avant validation.
Pour des corrections en lot, colle l'expression fautive dans l'Expression Builder et compare sa sortie à ce qu'envoie ton SDK. Le changement de profil (⌘P) garde tes essais sur le compte où l'erreur s'est produite ; sers-toi de Test Connection dans Settings → Profiles pour confirmer que le profil correspond. Vois Se connecter à AWS et Installation pour la configuration des profils. Recoupe les noms d'attributs dans le vérificateur de mots réservés quand l'erreur nomme un token précis comme status ou data. Aliaser chaque nom d'attribut — pas seulement les réservés — est une habitude sûre, qui élimine entièrement cette classe d'erreurs.
Sources
- Using update expressions in DynamoDB (vérifié le 2026-07-13)
- Reserved words in DynamoDB (vérifié le 2026-07-13)
Erreurs liées
- ExpressionAttributeValues contains invalid value
- ValidationException (aperçu)
- Exemple de code : UpdateItem en Node.js · en Python (boto3) — un UpdateExpression valide avec des #names et des :values.
- Apprends : Expressions de mise à jour · Noms & valeurs d'expression
Références
- 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
Dernière vérification le 2026-07-13 par rapport à la documentation officielle AWS liée ci-dessus.