DynamoDB をローカルで使う

commits1 min read読了の目安(約1700字

はじめに

AWS の NoSQL サービスである DynamoDB を使う機会があったのでローカルでのセットアップ手順をまとめてみました。最後におまけとして簡単に基本的な操作までやってみたので備忘録として残しておきます。

Docker コンテナを用意

下記の公式の Docker イメージを指定して構築していきます。

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

Dockerfile

Dockerfile
FROM amazon/dynamodb-local

WORKDIR /home/dynamodb

# UID=1000 → DynamoDB Local の実行ユーザ
RUN mkdir data && chown -R 1000 data

docker-compose.yml

docker-compose.yml
version: "3"

services:
  dynamodb:
    build: ./dynamo
    container_name: dynamodb
    volumes:
      - $PWD/dynamodb_data:/home/dynamodb/data
    ports:
      - 8000:8000
      # デフォルトでは -inMemory オプションで起動されるため、コンテナを落とすとテーブル定義を含むデータがすべて消えてしまう。
      # 代わりに -dbPath オプションを指定して起動させることで、コンテナを落としてもデータを失わずに済む…らしい
    command: -jar DynamoDBLocal.jar -dbPath ./data

https://qiita.com/okashoi/items/f1c757279574d37b812e

コンテナを起動

下記コマンドでコンテナを起動していきます。

$ docker-compose up -d --build

まずビルドしてみたいという時は docker-compose buildup コマンドを分けて実行します。

CLI で DynamoDB を扱う

こちらの記事を参考にさせていただきました。

https://qiita.com/ekzemplaro/items/93c0aef433a2b633ab4a

テーブルの作成

# プロジェクト直下に `/dynamo/users_table.json` のjsonファイルを元にテーブルを作成
# DYNAMODB_ENDPOINT は環境変数にあらかじめ設定しておく
$ aws dynamodb create-table --cli-input-json file://dynamo/users_table.json --endpoint-url ${DYNAMODB_ENDPOINT}

テーブル一覧

$ aws dynamodb list-tables --endpoint-url ${DYNAMODB_ENDPOINT}

テーブルからレコードの取得

# Id が 1 のレコードを取得
$ aws dynamodb get-item --table-name TableName --key '{"Id":{"N":"1"}}' --endpoint-url ${DYNAMODB_ENDPOINT}

まとめ

ローカルで DynamoDB を扱ってみました。公式の Docker イメージがあることでかなりカジュアルに使うことができました。

また、RDB では SQL を発行してサクッとデータを試しに取得できたりしますが、 NoSQL でデータ取得したい時にわざわざ CLI 叩く必要があります。慣れ親しんでいる SQL に比べると億劫に感じるので(僕の場合コマンドを忘れそうです)簡単にクエリを発行する手段があるか今後の課題にしたいです。