概要
DynamoDB を使うアプリケーション開発で、テストを簡単にするためにDynamoDBをローカルに立てる。
AWS公式が紹介しているDynamoDB Localを使うことにする。
Setting up DynamoDB local (downloadable version) - Amazon DynamoDB
Learn how to set up and use DynamoDB local, a downloadable version of DynamoDB local that enables local, cost-effective development and testing.
Dockerで実行する
こちらのイメージを使用する https://hub.docker.com/r/amazon/dynamodb-local
docker run -p 8000:8000 amazon/dynamodb-local:latest -jar DynamoDBLocal.jar -sharedDb
これで起動する。 aws cliでendpoint-urlを指定して操作できる。
aws dynamodb --endpoint-url http://localhost:8000 list-tables
データを入れる
aws cliコンテナをDynamoDB Localと同じネットワークで起動して、テーブル作成やデータ投入のコマンドを実行する
$ docker run --rm --network=dynamodb-local -it public.ecr.aws/aws-cli/aws-cli:latest bash
{
"Title": {"S": "Call Me Today"},
"Year": {"S": "2022"}
}
# region, endpoint urlは環境変数AWS_REGION, AWS_ENDPOINT_URLでも設定できる
$ aws dynamodb --region ap-northeast-1 --endpoint-url http://dynamodb-local:8000 create-table --table-name MusicCollection --attribute-definitions AttributeName=Title,AttributeType=S --key-schema AttributeName=Title,KeyType=HASH
$ aws dynamodb --region ap-northeast-1 --endpoint-url http://dynamodb-local:8000 put-item --table-name MusicCollection --item file://items.json
Docker Compose で起動とデータ投入を行う
上記のDynamoDB Localのコンテナを起動して、初回起動時にデータを投入するコンテナをDocker composeで定義する。
これで docker compose up
一発で起動できる。
version: "3.8"
services:
dynamodb-local:
command: -jar DynamoDBLocal.jar -sharedDb
image: amazon/dynamodb-local:latest
container_name: dynamodb-local
ports:
- "8000:8000"
networks:
- dynamodb-local
setup:
depends_on:
- dynamodb-local
build:
context: .
dockerfile: setup.Dockerfile
environment:
- AWS_ENDPOINT_URL=http://dynamodb-local:8000
command: ['./setup.sh']
networks:
- dynamodb-local
networks:
dynamodb-local:
name: dynamodb-local
FROM public.ecr.aws/aws-cli/aws-cli:latest
ENV AWS_REGION=ap-northeast-1
ENV AWS_ACCESS_KEY_ID=dummy
ENV AWS_SECRET_ACCESS_KEY=dummy
COPY setup.sh data.csv ./
ENTRYPOINT []
#!/bin/bash
DIR=$(cd $(dirname $0); pwd)
aws dynamodb create-table --table-name MusicCollection --attribute-definitions AttributeName=Title,AttributeType=S --key-schema AttributeName=Title,KeyType=HASH
aws dynamodb put-item --table-name MusicCollection --item file://items.json