🐡
DynamoDB をローカルで使う
はじめに
AWS の NoSQL サービスである DynamoDB を使う機会があったのでローカルでのセットアップ手順をまとめてみました。最後におまけとして簡単に基本的な操作までやってみたので備忘録として残しておきます。
Docker コンテナを用意
下記の公式の Docker イメージを指定して構築していきます。
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
コンテナを起動
下記コマンドでコンテナを起動していきます。
$ docker-compose up -d --build
まずビルドしてみたいという時は docker-compose build
と up
コマンドを分けて実行します。
CLI で DynamoDB を扱う
こちらの記事を参考にさせていただきました。
テーブルの作成
# プロジェクト直下に `/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 に比べると億劫に感じるので(僕の場合コマンドを忘れそうです)簡単にクエリを発行する手段があるか今後の課題にしたいです。
Discussion