💭

DynamoDB のローカル環境を Docker で構築してみる

2023/12/26に公開

Amazon DynamoDB を利用した API を開発しています。
AWS 上にテストデータを入れた dev table を作成してそのテーブルを呼び出すようにしていました。
無料枠に収まっているとはいえキャパシティを消費してしまっていることからもう少し遊びのあるサンドボックス的な環境が欲しくなったので Docker での構築を試みました。

DynamoDB local とは

そのままローカルで利用することができる DynamoDB です。
ただまるっきり Web サービスの DynamoDB と同じというわけではなく、テーブル名の大文字小文字をローカルでは区別しなかったり、もろもろの速度の部分や制限などの部分で若干異なる部分もあるようです。

https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/DynamoDBLocal.UsageNotes.html

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 との連携、スクリプトによるテーブル生成などもやりたいと思います。

参考

https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/DynamoDBLocal.DownloadingAndRunning.html

https://www.takayasugiyama.com/entry/2021/10/17/064018

Discussion