La taille de l'expression a dépassé la taille maximale autorisée

TL;DR — DynamoDB limite toute chaîne d'expression à 4 Ko (les paramètres d'expression : UpdateExpression, ConditionExpression, FilterExpression, ProjectionExpression). La tienne a dépassé cette limite — généralement une mise à jour auto-générée sur un gros élément, ou un énorme filtre IN (…) / OR. Réduis l'expression, pas l'élément.

Ce que ça signifie

ValidationException: 1 validation error detected: Invalid ConditionExpression: Expression size has exceeded the maximum allowed size; expression size: 27785

Le nombre d'octets en fin de message est la taille mesurée de ton expression ; il diffère donc à chaque requête.

Le plafond de 4 Ko porte sur la longueur de la chaîne d'expression elle-même, indépendamment de la taille de 400 Ko de l'élément. Un élément bien en dessous de 400 Ko peut quand même dépasser le budget d'expression si le SDK construit une clause par attribut (les noms de placeholders verbeux s'accumulent vite). C'est une ValidationException HTTP 400 — non réessayable sans modifier l'expression.

Le budget d'expression a des limites voisines que tu peux atteindre en premier : chaque placeholder #name/:value est plafonné à 255 octets, la combinaison ExpressionAttributeNames + ExpressionAttributeValues à 2 Mo, une seule expression à 300 opérateurs/fonctions, et un comparateur IN à 100 opérandes.

Pourquoi ça arrive

  • Une UpdateExpression auto-générée sur un élément large — un ORM/mapper émet SET #a0 = :v0, #a1 = :v1, … pour chaque attribut, et les noms de placeholders + séparateurs dépassent 4 Ko.
  • Une énorme FilterExpression — un long attr IN (:0, :1, …) ou une chaîne de conditions reliées par OR.
  • Des écritures conditionnelles en masse avec de nombreux attribute_not_exists/comparaisons dans une seule ConditionExpression.
  • Des éditions de gros éléments dans la console — enregistrer un gros élément ré-émet une grande expression de mise à jour/condition.

Comment le corriger

  1. Ne mets à jour que ce qui a changé. Construis l'UpdateExpression à partir du diff, pas de l'élément entier — la plupart des mises à jour ne touchent qu'une poignée d'attributs.
  2. Raccourcis les noms de placeholders. #a/:v battent les longs noms descriptifs ; ce qui compte, c'est la longueur de la chaîne d'expression, donc des noms plus courts gagnent une vraie marge.
  3. Découpe un filtre géant en requêtes plus étroites, ou restructure pour que le filtre soit inutile (une meilleure clé/index signifie moins de conditions reliées par OR).
  4. Divise une écriture surdimensionnée en plusieurs mises à jour plus petites, ou modélise l'élément pour qu'un seul changement logique ne réécrive pas tout.
  5. Réduis l'imbrication — les chemins de map profondément imbriqués gonflent la longueur de l'expression ; aplatis là où tu peux.

Tu surveilles la taille de l'élément et de la mise à jour ensemble ? L'application de bureau DynoTable fait apparaître les attributs de chaque élément, pour qu'il soit évident quand une mise à jour toucherait bien plus que nécessaire.

Depuis DynoTable

DynoTable construit ses expressions de mise à jour à partir des champs que tu changes réellement — pas de tous les attributs de l'élément — ce qui garde les expressions bien en dessous de 4 Ko. Ouvre un élément avec ⌘K, modifie des champs précis, et relève la longueur de la chaîne d'expression générée.

Sers-toi de l'Expression Builder pour surveiller la taille de l'expression à mesure que tu ajoutes des clauses. Le calculateur de taille d'élément aide quand des éléments larges pilotent des mises à jour générées automatiquement. Change de profil avec ⌘P ; vois Se connecter à AWS et Installation.

Sources

Erreurs liées

Références

Dernière vérification le 2026-07-13 par rapport à la documentation officielle AWS liée ci-dessus.

Travaille avec DynamoDB sans la Console

Un client de bureau rapide pour DynamoDB qui exécute le vrai SQL que DynamoDB ne peut pas — JOINs, GROUP BY, agrégations — avec édition visuelle et un agent IA sur tes propres clés Bedrock.

Essai gratuit de 30 jours, sans carte bancaire — ensuite la formule Gratuit, sans limite de durée.