Amazon DynamoDB
超高速 NoSQL KV
serverless の NoSQL Database で、あらゆる規模でミリ秒の遅延で key によるクエリができます。request または capacity に応じて課金されます。
- コスト$ 安い
- 難易度●●●●●
- 未使用でも課金?少し
- サーバーレス
- 出題試験CLF · SAA · DVA · SOA
たとえるなら番号付きの書類棚のようなものです。番号がわかればすぐに取り出せますが、自由に探し回ることはできません。
DynamoDB はシステムのどこにある?
具体例でステップごとに
- モバイルゲームで、数百万人のプレイヤーのスコアとプロフィールを 1 日中読み書きします。
- playerId をキーにした DynamoDB テーブルを作り、オンデマンドモードを選ぶので、アクセス量を予測する必要はありません。
- プレイヤーがスコアを保存するたびに項目を書き込み、playerId での読み取りはプレイヤー数にかかわらず数ミリ秒です。
- ステージごとのランキングは、グローバルセカンダリインデックスを使って別の切り口で検索します。
- DynamoDB Streams が新しいスコアのたびに Lambda を呼び出し、「抜かれました」という通知を送ります。
いつ使う?
✓ 使うべき場面
アクセスパターンが事前にわかっており、非常に大きな scale が必要な場合: ショッピングカート、session、IoT、ゲーム。
✗ 避けるべき場面
JOIN、任意のクエリ、複雑なレポートが必要 → RDS/Aurora。
よくある使い方
- ショッピングカート、session、ユーザープロファイル
- ミリ秒の遅延が必要なゲームのリーダーボード、IoT、アドテック
- Lambda と組み合わせた serverless バックエンド
- 状態の保存、重複処理を防ぐロック(idempotency)
DynamoDB・RDS・ElastiCache の違い
| データモデル | キーバリュー / ドキュメント | リレーショナルテーブル(SQL) | インメモリキャッシュ |
|---|---|---|---|
| スケーリング | ほぼ無制限に自動拡張 | インスタンスサイズ + レプリカ | ノード数またはサーバーレス |
| 検索 | キーとインデックス | 任意の SQL、JOIN 可 | キー |
| 耐久性 | 高い、複数 AZ に保存 | 高い、バックアップあり | 高速化用、DB の代わりではない |
料金はいくら?
- 課金方式: On-demand: 読み書き request 数(2024年11月の値下げ後、約 $0.125/100 万読み取り単位、約 $0.625/100 万書き込み単位)。または RCU/WCU 時間単位の Provisioned。ストレージ約 $0.25/GB 月。
- 無料枠: Always Free: ストレージ 25 GB + 25 WCU と 25 RCU(provisioned モード)。
Query ではなくテーブル全体の Scan を使う。GSI ごとに書き込みコストが増える。大きな item は多くの単位を消費する。不要なのに Streams、PITR、Global Tables を有効にする。
「キーバリュー」「どの規模でもミリ秒のレイテンシー」「サーバーレス」なら DynamoDB です。マイクロ秒の読み取りなら DAX、期限切れデータの自動削除なら TTL、複数リージョンからの書き込みならグローバルテーブルです。
本番の試験問題に挑戦
1An application running in a private subnet accesses an Amazon DynamoDB table. The data cannot leave the AWS network to meet security requirements. How should this requirement be met?
- AConfigure a network ACL on DynamoDB to limit traffic to the private subnet.
- BEnable DynamoDB encryption at rest using an AWS Key Management Service (AWS KMS) key.
- CAdd a NAT gateway and configure the route table on the private subnet.
- DCreate a gateway VPC endpoint for DynamoDB and configure the endpoint policy.
答えを見る
正解: D
DynamoDB 用のゲートウェイ型 VPC エンドポイントを使えば、通信は AWS のネットワーク内にとどまり、インターネットを通りません。NAT ゲートウェイはインターネットに出ますし、保存時の暗号化は通信経路とは関係ありません。
2A recently created startup built a three-tier web application. The front end has static content. The application layer is based on microservices. User data is stored as JSON documents that need to be accessed with low latency. The company expects regular traffic to be low during the first year, with peaks in traffic when it publicizes new features every month. The startup team needs to minimize operational overhead costs. What should a solutions architect recommend to accomplish this?
- AUse Amazon S3 static website hosting to store and serve the front end. Use AWS Elastic Beanstalk for the application layer. Use Amazon DynamoDB to store user data.
- BUse Amazon S3 static website hosting to store and serve the front end. Use Amazon Elastic Kubernetes Service (Amazon EKS) for the application layer. Use Amazon DynamoDB to store user data.
- CUse Amazon S3 static website hosting to store and serve the front end. Use Amazon API Gateway and AWS Lambda functions for the application layer. Use Amazon DynamoDB to store user data.
- DUse Amazon S3 static website hosting to store and serve the front end. Use Amazon API Gateway and AWS Lambda functions for the application layer. Use Amazon RDS with read replicas to store user data.
答えを見る
正解: C
静的なフロントエンドは S3、処理は API Gateway + Lambda、JSON データは DynamoDB。すべてサーバーレスで従量課金なので、毎月のピークにも自動で対応します。EKS や Elastic Beanstalk では運用すべきサーバーが残ります。
よくある質問
オンデマンドとプロビジョンドキャパシティの違いは何ですか?
オンデマンドは読み書きごとに課金され、トラフィックを予測する必要がないため、予測しにくいワークロードに向いています。プロビジョンドは 1 秒あたりの読み書き数を事前に確保し(Auto Scaling も可能)、トラフィックが安定している場合に安くなります。
DynamoDB のキーはどう設計すればよいですか?
値の種類が多く均等に分散するパーティションキーを選び、1 つのパーティションに負荷が集中しないようにします。さまざまな検索パターンにはソートキーとセカンダリインデックス(GSI、LSI)を使います。テーブルを設計する前に、必要なクエリを洗い出しておきましょう。
AWS 認定試験では DynamoDB について何が問われますか?
オンデマンドとプロビジョンドの選択、GSI と LSI、マイクロ秒単位の読み取りのための DAX、Lambda をトリガーする DynamoDB Streams、古い項目を自動削除する TTL、複数リージョン向けのグローバルテーブル、強力な整合性のある読み込みと結果整合性のある読み込みの違いなどです。