ローカルでDynamoDBを動かす
はじめに
boto3やaws cliからDynamoDBを扱う練習をするのに、公式の以下のツールが簡単で便利なので、個人用として使い始めました。そのセットアップ方法のまとめです。
DynamoDB ローカル
- コンテナとして動かして動かすことができます。本物のDynamoDBと同じ様にcliやboto3から操作できます。
$ docker pull amazon/dynamodb-local $ docker run -p 8000:8000 amazon/dynamodb-local
credential(.aws/credentails)について
- defaultが使われるが、てきとーな名前でOK.
- configureコマンドから、「TESTLOCAL」とでも入れておけば使えます。
設定の変更方法
オプション一覧です。
こちらを参考にさせていただきました。
デフォルトだとメモリに保持するので、データが残りません。以下の様に立ち上げます。
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もこれを使った方がいい感じに表示したりできます。
以下の様な感じで、operation builder -> add connection -> DynamoDBローカルのタブを選ぶ...という感じで選択できます。名前は適当でOKです。
注意として、credentialが勝手に生成されるんですよねこれ.... この時できたアクセスキーとシークレットキー(ローカルでのみ有効な適当な文字列)を設定ファイル(.aws/credential)に書いておきます。
割と見やすいです。他にもテンプレートからモデル作ったりとか色々できるらしいですが、現状、ただのデータを表示する箱としてしか使えてません....