DynamoDB のアイテムの最大サイズは?
400 KB です。DynamoDB のアイテム最大サイズは 400 KB です。この合計には、属性名(UTF-8 のバイト長)と、ネストしたリストやマップを含むすべての属性値(バイナリ長)の両方が含まれます。バイナリ値は生のバイト長で測られます。この上限を引き上げる方法はありません。より大きなオブジェクトは Amazon S3 に置くべきです。
400 KB に数えられるもの
アイテムサイズは次の合計です。
- すべての 属性名(UTF-8 バイトで測定)
- すべての 属性値(バイナリ長で測定。文字列は UTF-8、数値はコンパクトに、バイナリは生のバイト)
ネストしたマップやリストの構造にも、要素ごとに小さなオーバーヘッドが加わります。長い属性名は実際に容量を食います。余裕を作るには短くしましょう。
400 KB は 409,600 バイトで、名前もその一部
AWS はバイナリ単位で測ります。「DynamoDB denotes 1 KB = 1024 bytes」。ですから上限は 400,000 ではなく 409,600 バイトです。文字列属性 1 つで PutItem を二分探索すれば、正確な境界を見つけられます。
await client.send(
new PutItemCommand({
TableName: 'sizes',
Item: {pk: {S: 'A'}, a: {S: 'x'.repeat(n)}}
})
);成功する最大の n は 409,596 です。キー名(pk、2 バイト)、キーの値(A、1 バイト)、属性名(a、1 バイト)を足すと、ちょうど 409,600 に着地します。あと 1 バイト足すとこうなります。
ValidationException: Item size has exceeded the maximum allowed size
HTTP 400では、その属性名を a から attributeName に変え、他は何も変えずにやってみます。収まる最大の値は 409,584 に下がります。ちょうど 12 バイト少なく、12 バイトはその名前が増えた分の長さです。
AWS 自身のガイダンスもこの計算から導かれます。「We recommend that you choose shorter attribute names rather than long ones」。
属性の多いアイテムでは 400 KB の予算が見た目より窮屈なのも、そのためです。すべての名前は、そのアイテムが存在する限り、書き込みのたびにも読み取りのたびにも代償を払います。
なぜ重要か
アイテムサイズはキャパシティのコストを決めます。読み取りは 4 KB 刻み、書き込みは 1 KB 刻みで課金されます(キャパシティユニットを参照)。大きなアイテムは、ハードな上限に近づくリスクに加えて、操作あたりのコストも高くなります。
上限に達したら
データを複数のアイテムに分割するか、大きなバイナリを Amazon S3 に移して DynamoDB には参照を格納しましょう。
さらに詳しく
任意のアイテムをアイテムサイズ計算ツールで測り、アイテムサイズ上限のガイドを読んでください。編集しながらアイテムサイズを確認するには DynoTable をダウンロードしてください。
参考資料
- Constraints in Amazon DynamoDB — Amazon DynamoDB Developer Guide
- DynamoDB item sizes and formats — Amazon DynamoDB Developer Guide
- Local secondary indexes — Amazon DynamoDB Developer Guide
最終検証日 2026-07-13、上記にリンクした公式 AWS ドキュメントに照らして確認しました。400 KB の制約は 2026-07-28 に再確認しました。現在はクォータのページではなく Constraints.html に記載されています。
2026-07-28 に、Node v24.18.0 上の @aws-sdk/client-dynamodb 3.1095.0 を用いて DynamoDB Local 3.3.0 に対して測定しました。バイト数は PutItem に対する二分探索から得たもので、ValidationException はエンジンそのままの出力です。