AKIBA.AWS 第10回 特別編で「DynamoDB Localを手軽に使える公式のDockerイメージ」を発表しました #akibaaws
こんにちは。プロダクトグループのshoito(しょいと)です。
AKIBA.AWS #10 Developers.IO東京 前夜祭!AWS Update LT大会にて登壇した内容を共有します。
発表スライド
紹介したアップデート
新しいドッカーイメージで Amazon DynamoDB ローカルをさらに容易に 投稿日: Aug 22, 2018
これは何?
- DynamoDBのダウンロード可能バージョン
- Dockerイメージとして公式に提供
何に使うの?
- DynamoDBを使うアプリケーションの開発とテスト
- ローカル開発環境
- CI(Contenious Integration)による自動テスト
使うメリットは?
- 使用料無料
- プロビジョニングされたスループット
- データストレージ
- データ転送料金
- ...
- 開発・テスト中にインターネット接続が不要
制約は何?
- スループット設定は無視される
- 並列スキャンできない
- ...他
※ダウンロード可能な DynamoDB と DynamoDB ウェブサービスの違い
DynamoDB Local
- これまでに提供されていたダウンロード可能バージョン
- Java実行環境で動かすJARファイル(
DynamoDBLocal.jar
)として提供 - 昔からローカル開発サポートとして提供済みだったもの
- DynamoDB Local for Desktop Development on 12 Sep 2013
DynamoDB Local Dockerイメージと以前の違いは?
デフォルトが InMemory: true
なので、コンテナ停止後はデータが保存されません。
$ docker run -p 8000:8000 amazon/dynamodb-local Initializing DynamoDB Local with the following configuration: Port: 8000 InMemory: true DbPath: null SharedDb: false shouldDelayTransientStatuses: false CorsParams: *
どんなコンテナになっているのか、Dockerfileは見当たらないので docker inspect
でコンテナ内部を覗いてみます。
$ docker inspect amazon/dynamodb-local:latest [ { ... "Config": { ... "ExposedPorts": { "8000/tcp": {} }, ... "Cmd": [ "-jar", "DynamoDBLocal.jar", "-inMemory" ], ... "Entrypoint": [ "java" ], ... } ]
すると実体が以下のコマンドの実行であることが分かります。
java -jar DynamoDBLocal.jar -inMemory
-inMemory
オプションがデフォルトで付いているため、データはファイルとして出力されず、プロセスの停止時に消えてしまいます。
Docker Composeに組み込む
$ docker-compose up
docker-compose.yml
version: "3" services: dynamodb: image: amazon/dynamodb-local ports: - "8000:8000" …
このDockerイメージで気をつけること
デフォルトが InMemory: true
なので、コンテナ停止後はデータが保存されません。
そのため、ローカルの開発環境として扱う場合は、オプションから -inMemory
を外してあげる必要があります。
$ docker run -p 8000:8000 amazon/dynamodb-local Initializing DynamoDB Local with the following configuration: Port: 8000 InMemory: true DbPath: null SharedDb: false shouldDelayTransientStatuses: false CorsParams: *
docker run
でDockerコンテナを立ち上げる場合は以下のように、 Cmd
を -inMemory
がない記述で上書きし、さらにデータが残るように -v
でボリュームの指定をします。
$ docker run -p 8000:8000 -v $PWD/data:/data amazon/dynamodb-local -jar DynamoDBLocal.jar -dbPath /data
Docker Composeの場合は command
と volumes
で上記と同様の指定をします。
docker-compose.yml
version: "3" services: dynamodb: image: amazon/dynamodb-local ports: - "8000:8000" command: -jar DynamoDBLocal.jar -dbPath /data volumes: - $PWD/data:/data
何はともあれ
公式のDockerイメージの公開により、開発者・チーム毎にDynamoDB Local(JAR)を組み込んだDockerfileの定義し、Dockerイメージをビルド・プッシュする煩わしさから解放されてみんな幸せになりますね。
ちょっと気になったのでDocker Hubでdynamodb-local
とDockerイメージを検索してみたところ4,410件ヒットしました。
ヒットしたものが全てDynamoDB Localのものではないですが、かなり需要があったことが伺えます。