DynamoDB は画像を保存できますか?
はい、ただし小さいものだけです。アイテム全体が 400 KB の上限に収まるなら、DynamoDB は画像を base64 エンコードした Binary(B)属性として保存できます。400 KB はたいていのメディアファイルには小さすぎるので、AWS はより大きな画像を Amazon S3 に置き、DynamoDB にはオブジェクトのメタデータと S3 への参照だけを持たせることを推奨しています。
小さな画像の保存はどう動くか
画像を base64 でエンコードし、Binary 属性に保存します。DynamoDB は 400 KB のアイテム上限に対して生のバイト長を数えるので、サムネイルやアイコンは収まりますが、写真の原寸はふつう収まりません。
推奨されるパターン
400 KB を超えるものについては:
- 画像を Amazon S3 にアップロードします。
- その S3 キー、サイズ、コンテンツタイプ、その他のメタデータを DynamoDB に保存します。
- DynamoDB からメタデータを読み、その後 S3 からオブジェクトを取得します。
DynamoDB と S3 はトランザクションを共有しないので、失敗時に孤立したオブジェクトを片付けるのはアプリの仕事です。
インライン化のコスト
1 秒あたり 1 回のアップロードと 10 回の閲覧、us-east-1 のオンデマンドで、両方の形を料金計算ツールに通してみます。
| 月あたり | 380 KB の画像をインライン | 119 バイトのポインター |
|---|---|---|
| 書き込み | $624.15 | $1.64 |
| 読み取り(結果整合性) | $156.04 | $1.64 |
| リクエスト合計 | $780.19 | $3.29 |
同じトラフィックが 238 倍のコストになり、それをすべて生んでいるのはキャパシティの切り上げです。書き込みユニットは 1 KB をカバーするので、画像は 380 個分、ポインターは 1 個分を課金されます。読み取りは 4 KB 単位に丸められるので、結果整合性の読み取り 1 回あたり画像は 47.5 読み取りユニット、ポインターは 0.5 です。
そこにストレージが積み上がります。1 秒あたり 1 回の 380 KB のアップロードは月に 952 GB を追加し、DynamoDB の GB 月あたり $0.25 では $238.09、S3 Standard の $0.023 では $21.90 になります。そして翌月のアップロードが同じだけまた積み上がります。
これらの数字が指しているポインターのアイテムはこれで、119 バイトです。
{
"pk": "IMG#2026-07-28#a1b2c3",
"s3Key": "uploads/2026/07/28/a1b2c3.jpg",
"contentType": "image/jpeg",
"bytes": 389120,
"width": 1920,
"height": 1080,
"uploadedAt": 1785283200
}さらに詳しく
アイテムサイズの上限を参照し、アイテムサイズ計算ツールでアイテムを計測してください。バイナリ属性を調べるには DynoTable をダウンロードしてください。
料金の出典
- Amazon DynamoDB pricing — リクエストユニットとストレージの料率。AWS Price List API から計算ツールに同期しています。
- Amazon S3 pricing — S3 Standard ストレージ、us-east-1 の最初の 50 TB で GB 月あたり $0.023(2026-07-28 に Price List API から取得)。
参考資料
- Best practices for storing large items and attributes in DynamoDB — Amazon DynamoDB Developer Guide
- Supported data types and naming rules in Amazon DynamoDB — Amazon DynamoDB Developer Guide
- Quotas in Amazon DynamoDB — Amazon DynamoDB Developer Guide
最終検証日 2026-07-13、上記にリンクした公式 AWS ドキュメントに照らして確認しました。
2026-07-28 に、AWS Price List API から同期した us-east-1 の料率を使い、当サイトの料金計算ツールで算出しました。入力: オンデマンド、1 秒あたり 1 回の書き込み、1 秒あたり 10 回の結果整合性の読み取り、上記の 119 バイトのアイテムに対する 380 KB、無料利用枠オフ。