概要
DynamoDB を使うアプリケーション開発で、テストを簡単にするためにDynamoDBをローカルに立てる。
AWS公式が紹介しているDynamoDB Localを使うことにする。
Setting up DynamoDB local (downloadable version) - Amazon DynamoDB
Save time and money by developing and testing against DynamoDB running locally on your computer and then deploy your application against the DynamoDB web service in AWS.
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