ValidationException : Item size has exceeded the maximum allowed size

TL;DR — Un élément DynamoDB peut faire au plus 400 Ko (noms d'attributs + valeurs combinés). Ton écriture pousse un élément au-delà. Déplace le champ volumineux (vers S3, ou réparti sur plusieurs éléments) et stocke plutôt une référence.

Ce que ça signifie

ValidationException: Item size has exceeded the maximum allowed size

La limite est de 400 Ko = 409 600 octets. Elle compte l'élément entier : chaque nom d'attribut plus sa valeur, encodés en UTF-8, y compris la surcharge des maps/listes imbriquées. Un UpdateItem qui fait grossir un élément existant au-delà de 400 Ko échoue de la même façon (en tant que mise à jour, le message indique « Item size to update has exceeded the maximum allowed size »).

Pourquoi ça arrive

  • Stocker de gros blobs en ligne — images en base64, PDF, gros documents JSON.
  • Une liste/map non bornée (tableaux en ajout seul, journaux d'événements) qui grossit au fil du temps jusqu'à franchir les 400 Ko.
  • Des noms d'attributs longs multipliés à travers un gros élément.
  • Trop de dénormalisation dans un seul élément.

Comment le corriger

  1. Décharge les valeurs volumineuses vers S3. Stocke l'objet dans S3 et ne garde que la clé/URL dans DynamoDB. C'est le motif standard pour tout ce qui approche la limite.
  2. Répartis les données sur plusieurs éléments. Utilise le motif collection d'éléments / partition verticale — une entité logique sous forme de plusieurs éléments partageant une clé de partition.
  3. Plafonne les collections qui grossissent. Ne laisse pas un seul élément accumuler une liste non bornée ; répartis les entrées dans des éléments enfants indexés par clé de tri.
  4. Compresse les textes réellement volumineux avant de les stocker (gzip → attribut binaire), si S3 n'est pas une option.

Exemple — motif de référence

// Instead of storing the blob inline, store an S3 pointer:
await doc.send(
  new PutCommand({
    TableName: 'Documents',
    Item: {
      pk: 'DOC#1',
      title: 'Q3 report',
      s3Key: 'documents/DOC#1/report.pdf', // the bytes live in S3
      sizeBytes: 2_400_000
    }
  })
);

FAQ

Quelle est la taille maximale d'un élément dans DynamoDB ? 400 Ko (409 600 octets) par élément, en comptant chaque nom d'attribut plus sa valeur, encodés en UTF-8, y compris la surcharge des maps et listes imbriquées. Un UpdateItem qui fait grossir un élément existant au-delà de 400 Ko échoue avec la même erreur.

Comment stocker des données de plus de 400 Ko dans DynamoDB ? Décharge la valeur volumineuse vers S3 et ne garde que la clé ou l'URL dans DynamoDB, répartis les données sur plusieurs éléments qui partagent une clé de partition, ou compresse le texte volumineux dans un attribut binaire. Ne laisse pas un seul élément accumuler une liste non bornée.

Reproduire l'erreur

Un seul élément portant un attribut chaîne de 410 Ko, juste au-dessus du plafond de 400 Ko :

await client.send(
  new PutItemCommand({
    TableName: 'orders',
    Item: {pk: {S: 'BIG'}, sk: {S: 'META'}, blob: {S: 'x'.repeat(410 * 1024)}}
  })
);

Sortie réelle :

ValidationException: Item size has exceeded the maximum allowed size
HTTP 400

Le message ne t'indique jamais de combien tu dépasses, ni quel attribut en est responsable — donc quand un élément est assemblé à partir de plusieurs sources, mesure avant d'écrire plutôt que de dichotomiser après le rejet.

Erreurs liées

Références

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

Reproduit le 2026-07-26 sur DynamoDB Local 2.x avec l'AWS SDK for JavaScript v3.1095.0 — la sortie ci-dessus est reproduite telle quelle.

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.