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