はじめに
だらっとDocker Hubを見ていたらDynamoDBのlocal版がDocker Hubにて公開されていることを知りました。
https://hub.docker.com/r/amazon/dynamodb-local
よくよく調べてみたら、DynamoDB localとしてAWSのドキュメントがありました。
今回はこのDynamoDB localを試してみます。
セットアップ
まず、以下の内容でcompose.ymlファイルを作成します。
services: dynamodb: command: "-jar DynamoDBLocal.jar -sharedDb -dbPath ./data" image: "amazon/dynamodb-local:latest" ports: - "8000:8000" volumes: - "./docker/dynamodb:/home/dynamodblocal/data" working_dir: /home/dynamodblocal
準備は以上です。
起動
起動はdocker compose upを実行すればOKです。以下のようにログが出力されます。
dynamodb-1 | Initializing DynamoDB Local with the following configuration: dynamodb-1 | Port: 8000 dynamodb-1 | InMemory: false dynamodb-1 | Version: 2.5.1 dynamodb-1 | DbPath: ./data dynamodb-1 | SharedDb: true dynamodb-1 | shouldDelayTransientStatuses: false dynamodb-1 | CorsParams: null
接続先はhttp://localhost:8000になります。準備はこれだけでOK。
AWS CLIにて接続する
AWS CLIにて接続します。まず、AWS CLIの環境をcompose.ymlにて用意します。先ほど作成したcompose.ymlを修正して以下のように記述します。
services: dynamodb: command: "-jar DynamoDBLocal.jar -sharedDb -dbPath ./data" image: "amazon/dynamodb-local:latest" ports: - "8000:8000" volumes: - "./docker/dynamodb:/home/dynamodblocal/data" working_dir: /home/dynamodblocal app: image: "amazon/aws-cli:2.16.9" entrypoint: "" command: "/bin/bash" tty: true stdin_open: true environment: - AWS_ENDPOINT_URL=http://dynamodb:8000 - AWS_ACCESS_KEY_ID=test - AWS_SECRET_ACCESS_KEY=test - AWS_DEFAULT_REGION=ap-northeast-1
ポイントは、環境変数AWS_ENDPOINT_URLとAWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY、AWS_DEFAULT_REGIONの設定です。それぞれの環境変数の意味は以下のドキュメントを参照してください。
環境変数AWS_ENDPOINT_URLの説明は以下を。
環境変数AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY、AWS_DEFAULT_REGIONの説明は以下を。
docker compose upで起動し、別のターミナルでdocker compose exec app /bin/bashを実行するとAWS CLIが使える環境が手に入ります。
あとは、aws dynamodb list-tablesを実行してテーブル一覧を表示させます。まだ何も作っていないので空が返ってきます。
{
"TableNames": []
}
aws dynamodb create-tableを使ってテーブルを作成したのちにaws dynamodb list-tablesを実行すると無事テーブルが作成されていることが確認できます。
bash-4.2# aws dynamodb create-table --table-name 'table01' --attribute-definitions '[{"AttributeName":"key","AttributeType": "S"}]' --key-schema '[{"AttributeName":"key","KeyType": "HASH"}]' --provisioned-throughput '{"ReadCapacityUnits": 5,"WriteCapacityUnits": 5}'
(省略)
bash-4.2# aws dynamodb list-tables
{
"TableNames": [
"table01"
]
}
bash-4.2#
考察
なかなかクラウド環境にさわれない場合などはこういうローカル環境で動くものが重宝されます。AWS公式が作成して公開してくれるのは大変ありがたいです。
一方で、あくまでシミュレータなので、いくらかの違いがあります。詳細は以下に記されているのでそれをもとに使用の判断をすると良いかなと思います。