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 を超える 際限のないリスト/マップ(追記専用の配列、イベントログ)。
- 大きなアイテム全体で掛け算される長い属性名。
- 単一のアイテムに非正規化しすぎている。
修正方法
- 大きな値を S3 にオフロードします。 オブジェクトを S3 に保存し、DynamoDB にはキー/URL だけを保持します。上限に近づくものすべてに対する標準的なパターンです。
- データを複数のアイテムに分割します。 アイテムコレクション / 垂直パーティションのパターンを使い、1つの論理エンティティをパーティションキーを共有する複数アイテムとして表します。
- 増え続けるコレクションに上限を設けます。 単一のアイテムに際限のないリストを蓄積させず、エントリをソートキーで区切った子アイテムに巻き取ります。
- 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メッセージは、どれだけ超過しているのかも、どの属性が原因なのかも決して教えてくれません — なので複数のソースから組み立てるアイテムでは、拒否されてから二分探索するのではなく、書き込む前に計測してください。
関連するエラー
- ItemCollectionSizeLimitExceededException — 10 GB の コレクション 上限(LSI のあるテーブル)。
- ValidationException (overview)
- 学習: アイテムサイズと 400 KB の上限 · アイテムコレクション
参考資料
- Supported data types and naming rules in Amazon DynamoDB — Developer Guide
- BatchWriteItem — Amazon DynamoDB API Reference
- TransactWriteItems — Amazon DynamoDB API Reference
- Error handling with DynamoDB — Amazon DynamoDB Developer Guide
最終検証日 2026-07-13、上記にリンクした公式 AWS ドキュメントに照らして確認しました。
2026-07-26 に DynamoDB Local 2.x と AWS SDK for JavaScript v3.1095.0 で再現しました — 上記の出力はそのままの逐語です。