この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
こんにちは。プロダクトグループの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のものではないですが、かなり需要があったことが伺えます。