🏞️
DynamoDB のローカル環境を Docker で構築してみる
Amazon DynamoDB を利用した API を開発しています。
AWS 上にテストデータを入れた dev table を作成してそのテーブルを呼び出すようにしていました。
無料枠に収まっているとはいえキャパシティを消費してしまっていることからもう少し遊びのあるサンドボックス的な環境が欲しくなったので Docker での構築を試みました。
DynamoDB local とは
そのままローカルで利用することができる DynamoDB です。
ただまるっきり Web サービスの DynamoDB と同じというわけではなく、テーブル名の大文字小文字をローカルでは区別しなかったり、もろもろの速度の部分や制限などの部分で若干異なる部分もあるようです。
docker-compose.yml の構成
今回は DynamoDB Local と管理画面である dynamodb-admin を構築します。
version: '3'
services:
dynamodb:
image: amazon/dynamodb-local
container_name: dynamodb-local-example
command: -jar DynamoDBLocal.jar -sharedDb -dbPath . -optimizeDbBeforeStartup
volumes:
- dynamodb:/var/lib/dynamodblocal
ports:
- 8000:8000
dynamodb-admin:
image: aaronshaf/dynamodb-admin
tty: true
ports:
- "8001:8001"
depends_on:
- dynamodb
environment:
DYNAMO_ENDPOINT: http://dynamodb-local-example:8000
volumes:
dynamodb:
driver: local
bin:
driver: local
導入
構築
docker compose build --no-cache
docker compose up -d
確認
dynamodb-admin の管理画面にとんでみます。
http://localhost:8001

試しにテーブルを作成してみる


container_name と DYNAMODB_ENDPOINT をきちんと指定する
個人的にはまった個所です。
depends_on だけの指定でいいと思いきや DYNAMODB_ENDPOINT の設定も必要なようです。設定しないと dynamodb-admin から接続できないです。
今後
dynamodb-admin は、データや、テーブルのメタ情報を生データ形式でみられるので便利ですが、CSV インポートなどをしたい場合は NoSQL Workbench を利用する必要があります。
その他、API サーバーや awscli との連携、スクリプトによるテーブル生成などもやりたいと思います。
参考
Discussion