😽

DockerでDynamoDBのローカル開発環境を作る

2022/02/23に公開

概要

AWSサーバレスでのアプリケーション開発をスムーズに行うために、DockerでのDynamoDBローカル開発環境を作ります。
実際にはDynamoDB単体で使うのでは無く、他のDockerアプリケーション開発環境、あるいは、ホスト上のアプリケーション開発環境と組み合わせて使うことになると思いますので、適宜組み合わせていただければと思います。

構成

最終的に作成する構成は以下の通りとします。

.
├ src :関数コードを格納する
├ bin :AWS CLI用のコンテナとのファイル受け渡し用
├ Dockerfile-awscli :AWS CLI用のコンテナ定義のDockerfile
└ docker-compose.yml :各コンテナの起動設定

以下のファイルを作成していきます。

Dockerfile-awscli
FROM amazon/aws-cli

ENV AWS_ACCESS_KEY_ID=fake_access_key\
    AWS_SECRET_ACCESS_KEY=fake_secret_access_key\
    DYNAMODB_REGION=ap-northeast-1
WORKDIR /usr/app

※AWS公式のAWS CLIイメージを取得して、AWS CLIのアクセスキーなどにダミー値を設定しています。(コンテナ内のDynamoDBに接続するため何でもよい)
※コンテナ内の/usr/appディレクトリでAWS CLIを実行します。このフォルダは、ローカルのbin/フォルダと共有してファイルを受け渡しできるようにしています。

docker-compose.yml
version: '3'
services:
    dynamodb:
        image: amazon/dynamodb-local
        command: -jar DynamoDBLocal.jar -sharedDb -dbPath . -optimizeDbBeforeStartup
        volumes:
            - dynamodb:/home/dynamodblocal
        ports:
            - 8000:8000
    awscli:
        build:
            context: .
            dockerfile: Dockerfile-awscli
        entrypoint: [""]
        tty: true
        command:
            - /bin/sh
        volumes:
            - ./bin:/usr/app
volumes:
    dynamodb:
        driver: local
    bin:
        driver: local      

※DynamoDBのデータは、毎回消えないようにvolumes指定で永続化しています。(Dockerの管理領域に保管されます)
※DynamoDBのcommandでは、DynamoDBがデフォルトだとメモリ内にデータを保管しており、コンテナを停止するとデータが消えてしまうため、保持するように設定をしています。
※ローカルのbinフォルダをAWS CLIの作業ディレクトリにマウントしています。

コンテナを起動する

shell
docker-compose up -d

AWS CLI用コンテナ名を確認する

shell
docker ps -a

AWS CLI用コンテナに入る

shell
docker exec -it [AWS CLI用コンテナ名] /bin/bash

AWS CLIコマンドを実行する

shell
aws dynamodb list-tables --region ap-northeast-1 --endpoint-url http://dynamodb:8000

※AWS CLI仕様上、--regionと、--endpoint-urlの指定は毎回必要になります。

実行結果
次のような結果が返ってくればOKです。

shell
{
    "TableNames": []
}

テーブル作成

shell
aws dynamodb \
  --region ap-northeast-1 \
  --endpoint-url http://dynamodb:8000 \
    create-table \
  --table-name User \
  --attribute-definitions \
    AttributeName=UserId,AttributeType=S \
    AttributeName=SortKey,AttributeType=S \
  --key-schema \
    AttributeName=UserId,KeyType=HASH AttributeName=SortKey,KeyType=RANGE \
  --billing-mode PAY_PER_REQUEST

※結果が表示されたら下までスクロールしてqで抜けます。

あとは必要に応じて、コマンドを記載したファイルをbinフォルダに格納しておき、aws dynamodbコマンドを実行しつつ作業を進めていきます。

Discussion