つい先日の8月22日に、Amazonから公式にDynamoDBのDockerイメージが公開されました。
ちょうどDynamoDB Localを利用していたところだったので、早速試してみました。
とりあえず立ち上げる
1 2 3 4 5 6 7 8 |
$ docker run --rm amazon/dymamodb-local Initializing DynamoDB Local with the following configuration: Port: 8000 InMemory: true DbPath: null SharedDb: false shouldDelayTransientStatuses: false CorsParams: * |
jarで配布されていたものと同じようですね。
DynamoDB ローカル (ダウンロード可能バージョン) のセットアップ - Amazon DynamoDB
オプションを使用したい
とりあえず開発時のテストのため、データを永続化したいです。
jar版では起動時の引数で設定することができましたが、Dockerイメージにおいても引数を渡せれば設定できるはずです。
Dockerfileは見当たらないので、とりあえずinspectしてみます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
$ docker inspect amazon/dynamodb-local:latest (snip) "Config": { "Hostname": "", "Domainname": "", "User": "dynamodblocal", "AttachStdin": false, "AttachStdout": false, "AttachStderr": false, "ExposedPorts": { "8000/tcp": {} }, "Tty": false, "OpenStdin": false, "StdinOnce": false, "Env": [ "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" ], "Cmd": [ "-jar", "DynamoDBLocal.jar", "-inMemory" ], "ArgsEscaped": true, "Image": "sha256:6901b80d033a1d94e1283711be031f2657d90edf0768118bb22c952feba780bd", "Volumes": null, "WorkingDir": "/home/dynamodblocal", "Entrypoint": [ "java" ], "OnBuild": null, "Labels": { "aws.java.sdk.version": "1.11.119" } }, (snip) |
- Entrypoint: java
- Cmd: -jar DynamoDBLocal.jar -inMemory
となっていますので、docker runの際に javaのオプションとなる部分をすべて指定することで設定を変えられそうです。
データを永続化する
デフォルトではinMemory
で起動するので、コンテナを終了した場合にはデータも消えてしまいます。クリーンな環境でテストを行うような場合にはそれでもかまいませんが、普段の開発中にはテーブル作成やデータの準備などを毎回行いたくはありませんので、データを永続化しておいたほうが楽なこともあります。
dbPathでパスを指定することができるようになったので、Volumeを指定するようにします。
- ホスト側: ~/dynamodb-data
- コンテナ側: /home/dynamodblocal/data
ひとまずフォアグラウンドで起動します。
1 2 3 4 5 6 7 8 9 |
$ docker run --rm -p 8000:8000 -v ~/dynamodb-data:/home/dynamodblocal/data \ amazon/dynamodb-local -jar DynamoDBLocal.jar -dbPath /home/dynamodblocal/data Initializing DynamoDB Local with the following configuration: Port: 8000 InMemory: false DbPath: /home/dynamodblocal/data SharedDb: false shouldDelayTransientStatuses: false CorsParams: * |
別のターミナルからawsコマンドを使用し、テーブルを作成してみます。
1 2 3 4 5 6 7 8 9 10 11 |
$ aws dynamodb create-table --table-name Clients \ --attribute-definitions AttributeName=id,AttributeType=S \ --key-schema AttributeName=id,KeyType=HASH \ --provisioned-throughput ReadCapacityUnits=1,WriteCapacityUnits=1 \ --endpoint-url http://localhost:8000 { "TableDescription": { "TableArn": "arn:aws:dynamodb:ddblocal:000000000000:table/Clients", (snip) } } |
一覧で取得できるか確認します。
1 2 3 4 5 6 |
$ aws dynamodb list-tables --endpoint-url http://localhost:8000 { "TableNames": [ "Clients" ] } |
データの保存先に指定した場所を確認してみます。
1 2 |
$ ls ~/dynamodb-data AKIAIOSFODNN7EXAMPLE_ap-northeast-1.db |
この中にデータが入ってそうですね。
まとめ
簡単ですがDockerイメージでのDynamoDB Localの動作確認ができました。
Javaを普段から使用している方にとってはjar版の方がてっとり早い気がします。
Java以外の言語を使っていてる人にとっては、Javaの環境を用意しなくても動作ができるのは楽になったのではないかと思います。
必要に応じて、うまく活用したいですね。