qtatsuの週報

初心者ですわぁ

ローカルでDynamoDBを動かす

はじめに

boto3やaws cliからDynamoDBを扱う練習をするのに、公式の以下のツールが簡単で便利なので、個人用として使い始めました。そのセットアップ方法のまとめです。

DynamoDB ローカル

  • コンテナとして動かして動かすことができます。本物のDynamoDBと同じ様にcliやboto3から操作できます。

hub.docker.com

$ docker pull amazon/dynamodb-local
$ docker run -p 8000:8000 amazon/dynamodb-local

credential(.aws/credentails)について

  • defaultが使われるが、てきとーな名前でOK.
  • configureコマンドから、「TESTLOCAL」とでも入れておけば使えます。

設定の変更方法

オプション一覧です。

docs.aws.amazon.com

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

dev.classmethod.jp

デフォルトだとメモリに保持するので、データが残りません。以下の様に立ち上げます。

2020/08/30 追記: --rmオプションを追加しました。コンテナを落とす際に、破棄しています。

$ ls
local_path

# docker側の/dynamodb_data_pathをこちらにマウントする。 なお、dbPathによってdocker中のファイル位置を決めとく必要ある。
$ docker run --rm -p 8000:8000 -v $PWD/local_path:/dynamodb_data_path amazon/dynamodb-local -jar DynamoDBLocal.jar -dbPath /dynamodb_data_path -sharedDb

実例

$ aws dynamodb create-table \
> --table-name Music \
> --attribute-definitions \
>     AttributeName=Artist,AttributeType=S \
>     AttributeName=SongTitle,AttributeType=S \
> --key-schema AttributeName=Artist,KeyType=HASH AttributeName=SongTitle,KeyType=RANGE \
> --provisioned-throughput ReadCapacityUnits=1,WriteCapacityUnits=1

$ aws dynamodb list-tables --endpoint-url http://localhost:8000
  • boto3から。
    • 「default」のcredentialsを使っているので、この記述で↑で作ったテーブルが参照できる。
dynamodb = boto3.resource('dynamodb', endpoint_url='http://localhost:8000')
for i in dynamodb.tables.all():
    print(i.table_name)

Music

NoSQL Workbench

ローカルのDynamoDBだとGUIがないので、公式のこちらのツールをつかって表示できます。 本物のDynamoDBもこれを使った方がいい感じに表示したりできます。

docs.aws.amazon.com

以下の様な感じで、operation builder -> add connection -> DynamoDBローカルのタブを選ぶ...という感じで選択できます。名前は適当でOKです。

f:id:Qtatsu:20200712005647p:plain
ローカルのDynamoDBの追加

注意として、credentialが勝手に生成されるんですよねこれ.... この時できたアクセスキーとシークレットキー(ローカルでのみ有効な適当な文字列)を設定ファイル(.aws/credential)に書いておきます。

f:id:Qtatsu:20200712005727p:plain
自動生成されたcredentialの表示

割と見やすいです。他にもテンプレートからモデル作ったりとか色々できるらしいですが、現状、ただのデータを表示する箱としてしか使えてません.... f:id:Qtatsu:20200712010136p:plain