DynamoDB — マネージド NoSQL

概要

Amazon DynamoDB は AWS のフルマネージド NoSQL データベース。 キーバリュー / ドキュメントの両モデルをサポートし、自動スケーリング・無停止運用・SLA 99.999% という非常に強い可用性を提供します。 サーバを意識せずに使えるため、Lambda + DynamoDB のサーバレス構成で「コードだけで動くアプリ」が組めるのが特徴です。

RDB と違ってスキーマ定義はありません。ただし「クエリパターンを先に決めて、それに最適化したキー設計をする」という発想の転換が必要で、そこで詰まる人が多いサービスでもあります。

主な機能

使うべきパターン

使わない方が良いパターン

Terraform 最小サンプル(PK + SK + GSI 付き On-Demand)

resource "aws_dynamodb_table" "orders" {
  name         = "orders"
  billing_mode = "PAY_PER_REQUEST"  # On-Demand

  hash_key  = "user_id"
  range_key = "order_id"

  attribute { name = "user_id";    type = "S" }
  attribute { name = "order_id";   type = "S" }
  attribute { name = "order_date"; type = "S" }

  # GSI: 日付順で検索したい時用
  global_secondary_index {
    name            = "user-date-index"
    hash_key        = "user_id"
    range_key       = "order_date"
    projection_type = "ALL"
  }

  # PITR (誤削除復旧)
  point_in_time_recovery { enabled = true }

  # TTL (任意)
  ttl {
    attribute_name = "expires_at"
    enabled        = true
  }

  # Stream (Lambda トリガで使う場合)
  stream_enabled   = true
  stream_view_type = "NEW_AND_OLD_IMAGES"
}

用語集

PK / SK
Partition Key / Sort Key。複合主キーで item を一意化する。
GSI
Global Secondary Index。テーブル作成後でも追加可能、別の PK/SK でクエリできる。
LSI
Local Secondary Index。同じ PK の中で別の SK を使う。テーブル作成時しか作れない。
RCU / WCU
Read Capacity Unit / Write Capacity Unit。Provisioned モードでの課金単位。
On-Demand / PAY_PER_REQUEST
リクエスト数ベースの従量課金。プロビジョニング不要。
PITR (Point-in-Time Recovery)
過去 35 日間の任意時点に復旧可能なバックアップ機能。
TTL
UNIX タイムスタンプ属性が過去になると item を自動削除する仕組み。
Stream
テーブル変更を順次配信するイベントソース。Lambda トリガで連携可能。
Transactions
最大 100 件 ACID 保証で書き込める仕組み。複数テーブル横断も可。
Conditional Write
「ある条件を満たす時だけ書き込む」操作。楽観的ロック実装の基本。