Dynamo-localを使う話
背景
awsのdynamoを気楽に使いたい
dockerのイメージもあるので「環境だけ作っておけば後で再利用できるのでは?」と考えた
流れ
一旦記事をコピって動くものを作る→そしたら詳細の理解に進む
docker環境作成はこのサイトが良かったです
dynamodb-localの
ccommand
部分がわからなかったので公式ドキュメントを参考にしながら理解していく
services:
dynamodb-local:
image: amazon/dynamodb-local:latest
container_name: dynamodb_local
user: root
volumes:
- dynamodb-local-data:/data
command: -jar DynamoDBLocal.jar -sharedDb -dbPath /data
ports:
- 8000:8000
~~~~省略~~~~
volumes:
dynamodb-local-data:
メモ
-shareDB
公式より引用
オプションを使用すると、DynamoDB は shared-local-instance.db という名前の単一のデータベースファイルを作成します。DynamoDB に接続するプログラムはいずれも、このファイルにアクセスします。このファイルを削除すると、保存されたすべてのデータを失うことになります。
ちなみにこのオプションをつけなかったらこの後やるテーブル作成した際にテーブルができなかった(自分の環境では)
-dbPath
公式より引用
DynamoDB がそのデータベースファイルを書き込むディレクトリ。このオプションを指定しない場合、ファイルは現在のディレクトリに書き込まれます
このファイルにデータを書き込んでいきます。
そして今回は -dbPathで指定したディレクトリにボリュームをマウントさせることをしているらしい
メモ2
ちなみにdocker-compose のcommand
ってやつも初めてみたので調べてみました
commandはDockerfileのCMDみたいなことができて
docker-compose.ymlのcommandとDockerfileが共存している時は commandが優先されてDockerfileは実行されないそう
user: root
にしてる理由
ボリュームのマウントができないそうです。
dynamodb-localの中身はdynamodb-adminで見れる
これでdocker環境だけでdynamodbの立ち上げ、操作、確認ができるようになった
次に
dynamodbのテーブルスキーマをいちいちコマンドで打ち込むのはきついので簡単にしたい
dynamodbはスキーマ定義をjsonファイルで行い、それを読み込むことができるそう
aws --profile={profile} dynamodb create-table --cli-input-json file://{ファイルのpath}
dynamodb-localにテーブルを作成する
事前準備
jsonを用意する
ディレクトリ構成は下記
dynamodb-local
├── docker-compose.yml
└── dynamodb
└── schema.json
sampleテーブルというのを作ってみる
{
"TableName": "sample",
"AttributeDefinitions": [
{
"AttributeName": "id",
"AttributeType": "S"
}
],
"KeySchema": [
{
"AttributeName": "id",
"KeyType": "HASH"
}
],
"ProvisionedThroughput": {
"ReadCapacityUnits": 5,
"WriteCapacityUnits": 5
}
}
コマンド実行
pwd # dynamo-localにいることを確認
aws dynamodb create-table --cli-input-json file://dynamodb/schema.json --endpoint-url=http://localhost:8000
localhost:8001(dynamodb-admin)へアクセス
sampleテーブルができてますね
レコードの追加もできました
一旦ここまで
次はaws-samとか使っていきたい。samもローカルで使えてlambdaをローカルでデプロイできるそうです。組み合わせてみたい
ここまでをGitHubにまとめました