DynamoDB Local: AWS公式のローカルデータベース

はじめに

だらっとDocker Hubを見ていたらDynamoDBのlocal版がDocker Hubにて公開されていることを知りました。

https://hub.docker.com/r/amazon/dynamodb-local

よくよく調べてみたら、DynamoDB localとしてAWSのドキュメントがありました。

docs.aws.amazon.com

今回はこの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_URLAWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEYAWS_DEFAULT_REGIONの設定です。それぞれの環境変数の意味は以下のドキュメントを参照してください。

環境変数AWS_ENDPOINT_URLの説明は以下を。

docs.aws.amazon.com

環境変数AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEYAWS_DEFAULT_REGIONの説明は以下を。

docs.aws.amazon.com

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公式が作成して公開してくれるのは大変ありがたいです。

一方で、あくまでシミュレータなので、いくらかの違いがあります。詳細は以下に記されているのでそれをもとに使用の判断をすると良いかなと思います。

docs.aws.amazon.com