初級読了 1 分

Docker で DynamoDB Local を実行する

DynamoDB Local は本物の DynamoDB エンジンを単一プロセスにしたものです — AWS アカウントもネットワークもリクエスト単位の請求もありません。ローカル開発と統合 テストに使い、本番では同じコードをクラウドに向けてください。

コンテナを起動する

docker run -p 8000:8000 amazon/dynamodb-local

これでエンジンが http://localhost:8000 で公開されます。

docker-compose

ほとんどのプロジェクトは docker-compose.yml に固定して、チーム全員が同じ endpoint を使えるようにします。

services:
  dynamodb:
    image: amazon/dynamodb-local
    command: '-jar DynamoDBLocal.jar -sharedDb -dbPath /data'
    ports:
      - '8000:8000'
    volumes:
      - dynamodb-data:/data
volumes:
  dynamodb-data:

永続化

既定では DynamoDB Local は インメモリ です — コンテナを停止するとすべての テーブルが消えます。2つのフラグでこれを永続化できます。

  • -sharedDb はすべてのクライアントを1つの共有データベースファイルにまとめます (これがないと、認証情報/リージョンの組ごとに独立した DB が作られ、「テーブルは どこへ行った?」というよくある驚きにつながります)。
  • -dbPath /data とマウントしたボリュームを併用すると、そのファイルがディスクに 書き込まれ、docker compose down してもデータが残ります。

SDK をそこに向ける

変わるのは endpoint だけです — 認証情報は任意のダミー値で構いません。

import {DynamoDBClient} from '@aws-sdk/client-dynamodb';

const client = new DynamoDBClient({
  endpoint: 'http://localhost:8000',
  region: 'local',
  credentials: {accessKeyId: 'x', secretAccessKey: 'x'}
});

テーブルを作成する

aws dynamodb create-table \
  --endpoint-url http://localhost:8000 \
  --table-name AppData \
  --attribute-definitions AttributeName=PK,AttributeType=S AttributeName=SK,AttributeType=S \
  --key-schema AttributeName=PK,KeyType=HASH AttributeName=SK,KeyType=RANGE \
  --billing-mode PAY_PER_REQUEST

このような シングルテーブルPK/SK スキーマは よい既定値です。フィクスチャを読み込むときは、 DynamoDB-JSON コンバーター でプレーンな JSON を ワイヤー形式に変換してください。

コンテナが起動し、テーブルが作成されたことを確認します。

aws dynamodb list-tables --endpoint-url http://localhost:8000

GUI で閲覧する

CLI 呼び出しはすぐに面倒になります。一般的な選択肢は、オープンソースの dynamodb-admin の Web UI か、デスクトップクライアントです。 DynoTablelocalhost:8000(または任意の LocalStack の endpoint — DynamoDB Local と LocalStack への接続 を参照)に直接つながり、クラウドのテーブルと同じ UI でローカルのテーブルを閲覧し、 SQL Workbench でクエリし、編集できます — aws CLI のやり取りは不要です。

更新日