ValidationException: Item size has exceeded the maximum allowed size

TL;DR — DynamoDB のアイテムは最大 400 KB(属性名 + 値の合計)です。書き込みがアイテムをその上限より大きくしています。大きなフィールドを外に出し(S3 へ、あるいは複数アイテムに分割し)、代わりに参照を保存してください。

意味

ValidationException: Item size has exceeded the maximum allowed size

上限は 400 KB = 409,600 バイトです。これは アイテム全体 を数えます。すべての属性名とその値を UTF-8 エンコードしたもの、ネストしたマップ/リストのオーバーヘッドも含みます。既存のアイテムを 400 KB 超に成長させる UpdateItem も同じように失敗します(更新の場合、メッセージは「Item size to update has exceeded the maximum allowed size」になります)。

発生する理由

  • 大きな塊をインラインで保存している — base64 の画像、PDF、大きな JSON ドキュメント。
  • 時間とともに増えて 400 KB を超える 際限のないリスト/マップ(追記専用の配列、イベントログ)。
  • 大きなアイテム全体で掛け算される長い属性名。
  • 単一のアイテムに非正規化しすぎている。

修正方法

  1. 大きな値を S3 にオフロードします。 オブジェクトを S3 に保存し、DynamoDB にはキー/URL だけを保持します。上限に近づくものすべてに対する標準的なパターンです。
  2. データを複数のアイテムに分割します。 アイテムコレクション / 垂直パーティションのパターンを使い、1つの論理エンティティをパーティションキーを共有する複数アイテムとして表します。
  3. 増え続けるコレクションに上限を設けます。 単一のアイテムに際限のないリストを蓄積させず、エントリをソートキーで区切った子アイテムに巻き取ります。
  4. S3 が選択肢にないなら、本当に大きなテキストは保存前に 圧縮します(gzip → バイナリ属性)。

例 — 参照パターン

// 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
    }
  })
);

よくある質問

DynamoDB の最大アイテムサイズは? アイテムあたり 400 KB(409,600 バイト)です。すべての属性名とその値を UTF-8 エンコードしたもの、ネストしたマップやリストのオーバーヘッドも数えます。既存のアイテムを 400 KB 超に成長させる UpdateItem も同じエラーで失敗します。

400 KB より大きなデータを DynamoDB に保存するには? 大きな値を S3 にオフロードして DynamoDB にはキーか URL だけを保持するか、パーティションキーを共有する複数のアイテムにデータを分割するか、大きなテキストを圧縮してバイナリ属性にします。単一のアイテムに際限のないリストを蓄積させないでください。

再現方法

400 KB の天井をわずかに超える、410 KB の文字列属性を持つ単一のアイテムです。

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

実際の出力:

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

メッセージは、どれだけ超過しているのかも、どの属性が原因なのかも決して教えてくれません — なので複数のソースから組み立てるアイテムでは、拒否されてから二分探索するのではなく、書き込む前に計測してください。

関連するエラー

参考資料

最終検証日 2026-07-13、上記にリンクした公式 AWS ドキュメントに照らして確認しました。

2026-07-26 に DynamoDB Local 2.x と AWS SDK for JavaScript v3.1095.0 で再現しました — 上記の出力はそのままの逐語です。

Console なしで DynamoDB を扱う

DynamoDB では実行できない本物の SQL(JOINs、GROUP BY、集計)を実行する高速な DynamoDB デスクトップクライアント。ビジュアル編集と、あなた自身の Bedrock キーで動く AI エージェントを備えています。

30日間無料トライアル、クレジットカード不要 — その後は期限のない Free プラン。