Cloud Service
Amazon DynamoDB
フルマネージドのサーバーレスNoSQL。一桁ミリ秒の応答とほぼ無限のスケールを、運用なしで実現する。
中級SAA-C03DVA-C02SAP-C02パフォーマンス効率信頼性コスト最適化
最終更新: 2026-05-31公式ドキュメント ↗
TL;DR要点だけ先に
- 1.サーバー管理ゼロで一桁ミリ秒・ほぼ無限に伸びるNoSQL。
- 2.PKをハッシュして自動でパーティション分割しスケールする。
- 3.アクセスパターン駆動でキー設計、スパイクはオンデマンド。

解決する課題
- アクセスが急増しても落ちない/遅くならないDBが欲しい
- DBの容量計画・シャーディングを自分でやりたくない
- ミリ秒の応答を安定して出したい
主要概念と用語
- テーブル / 項目(Item)/ 属性(Attribute)
- パーティションキー(PK): データの分散先を決める最重要キー
- ソートキー(SK): 同一PG内の並び/範囲検索
- GSI / LSI: 別の属性で検索するためのインデックス
- 容量モード: オンデマンド / プロビジョンド
- DynamoDB Streams: 変更をイベントとして流す(Lambda連携)
- TTL / DAX: 自動失効 / マイクロ秒キャッシュ
仕様・制限・クォータ
- 1項目最大400KB
- 結果整合性(デフォルト)と強い整合性を選べる
- マルチAZへ自動複製、グローバルテーブルで多リージョン化
内部の仕組み
DynamoDBはPKをハッシュして内部パーティションへ分散します。アクセスが増えると自動でパーティションを分割しスケール。ゆえにPK設計=性能設計で、特定キーに偏るとホットパーティションで詰まります。
設計の鉄則
RDBの正規化ではなくアクセスパターン駆動設計。「どう問い合わせるか」を先に決めてキー/インデックスを設計する(シングルテーブル設計が定番)。
設計パターン / ベストプラクティス
- アクセスパターンを列挙 → PK/SK と GSI を設計
- スパイクが読めないなら オンデマンド 容量
- 変更駆動の処理は Streams → Lambda
- 読み取りが激しいなら DAX でキャッシュ
運用・監視・トラブルシュート
- メトリクス:
ConsumedRead/WriteCapacityThrottledRequests - スロットルはホットパーティション or 容量不足を疑う
- 大量読み取りの Scan は避け、Query で絞る
コスト
- 読み書きキャパシティ(オンデマンド/プロビジョンド)+ストレージ
- 定常負荷はプロビジョンド+Auto Scalingが安いことも
セキュリティ
- 保存時暗号化はデフォルト(KMS)
- IAMで項目/属性レベルまで条件付与可能
- VPCからはゲートウェイ型VPCエンドポイントで到達
Well-Architected の観点
- パフォーマンス効率: 一桁ミリ秒・自動スケール
- 信頼性: マルチAZ複製・グローバルテーブル
- コスト最適化: 容量モードの使い分け
試験で問われるポイント
頻出
- アクセスパターン駆動のキー設計、ホットパーティション回避
- 別属性検索=GSI(作成後も追加可)/ LSIは作成時のみ
- スパイク=オンデマンド、変更連携=Streams
📝 DynamoDB ミニ確認テスト第 1 問 / 全 3 問
DynamoDBのテーブル設計で最も重要な考え方は?
関連サービス・比較
| 観点 | DynamoDB | RDS/Aurora |
|---|---|---|
| モデル | NoSQL(キーバリュー/ドキュメント) | リレーショナル(SQL) |
| スケール | 水平・ほぼ無限・自動 | 縦+リードレプリカ |
| クエリ | キー中心(JOINなし) | 柔軟なSQL/JOIN |
| 運用 | サーバーレス | マネージド(設定多め) |
ハンズオン / CLI例
# オンデマンド課金でテーブル作成(PK=userId, SK=createdAt)
aws dynamodb create-table \
--table-name Orders \
--attribute-definitions AttributeName=userId,AttributeType=S AttributeName=createdAt,AttributeType=S \
--key-schema AttributeName=userId,KeyType=HASH AttributeName=createdAt,KeyType=RANGE \
--billing-mode PAY_PER_REQUEST
# 1ユーザーの注文を範囲検索(Scanではなく Query)
aws dynamodb query --table-name Orders \
--key-condition-expression "userId = :u" \
--expression-attribute-values '{":u":{"S":"user-123"}}'
AWS Service
Amazon DynamoDBを実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
データベース
比較で見る軸
クラウド: AWS / カテゴリ: データベース / 難易度: intermediate
導入後に効く点
PKをハッシュして自動でパーティション分割しスケールする。
先に潰すリスク
サービス単体ではなく、権限、ネットワーク、監視、課金、バックアップを含めて設計する必要がある。
数字・仕様の読み方
- クラウド
- AWS
- カテゴリ
- データベース
- 難易度
- intermediate
- 関連資格
- SAA-C03 / DVA-C02 / SAP-C02
- 設計柱
- performance / reliability / cost
判断チェックリスト
- 自社の用途が「データベース / performance」に近いか確認する。
- 強みである「サーバー管理ゼロで一桁ミリ秒・ほぼ無限に伸びるNoSQL。」が本当に評価軸になるか確認する。
- 注意点の「サービス単体ではなく、権限、ネットワーク、監視、課金、バックアップを含めて設計する必要がある。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。
他クラウドの同等サービス
役割が近いサービスです。設計の置き換えや比較検討の参考に。