Open11

Dynamo-localを使う話

You-sakuYou-saku

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:

https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/DynamoDBLocal.UsageNotes.html

You-sakuYou-saku

メモ

-shareDB
公式より引用

オプションを使用すると、DynamoDB は shared-local-instance.db という名前の単一のデータベースファイルを作成します。DynamoDB に接続するプログラムはいずれも、このファイルにアクセスします。このファイルを削除すると、保存されたすべてのデータを失うことになります。

ちなみにこのオプションをつけなかったらこの後やるテーブル作成した際にテーブルができなかった(自分の環境では)

-dbPath
公式より引用

DynamoDB がそのデータベースファイルを書き込むディレクトリ。このオプションを指定しない場合、ファイルは現在のディレクトリに書き込まれます

このファイルにデータを書き込んでいきます。
そして今回は -dbPathで指定したディレクトリにボリュームをマウントさせることをしているらしい

You-sakuYou-saku

メモ2

ちなみにdocker-compose のcommandってやつも初めてみたので調べてみました
https://docs.docker.jp/v1.12/compose/compose-file.html

commandはDockerfileのCMDみたいなことができて
docker-compose.ymlのcommandとDockerfileが共存している時は commandが優先されてDockerfileは実行されないそう
https://qiita.com/ganyariya/items/3594ec682a3ccf917477

user: rootにしてる理由
https://qiita.com/yuta-katayama-23/items/a8c497fe4a61f29deb34
ボリュームのマウントができないそうです。

You-sakuYou-saku

次に

dynamodbのテーブルスキーマをいちいちコマンドで打ち込むのはきついので簡単にしたい

You-sakuYou-saku

dynamodb-localにテーブルを作成する

事前準備

  1. aws-cliのインストール
  2. aws-cliのcredentialやconfigを設定

jsonを用意する

ディレクトリ構成は下記

dynamodb-local
├── docker-compose.yml
└── dynamodb
    └── schema.json

sampleテーブルというのを作ってみる

schema.json
{
    "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
You-sakuYou-saku

localhost:8001(dynamodb-admin)へアクセス

sampleテーブルができてますね
レコードの追加もできました