少し前に、DynamoDB LocakのDockerイメージがAWS公式からリリースされていました。
イメージを使用する
Docker Hubでのイメージは次のものになります。
ひとまずこれをDockerで起動してみます。
$ docker run -p 8000:8000 amazon/dynamodb-local
無事起動すれば、8000ポートでdynamodb localに接続できるようになります。
$ docker run -p 8000:8000 amazon/dynamodb-local Unable to find image 'amazon/dynamodb-local:latest' locally latest: Pulling from amazon/dynamodb-local 638b75f800bf: Pull complete 106d4bcae1bb: Pull complete 4fda29486f95: Pull complete Digest: sha256:705acedfeeed8d98781475cecacdfac574969642db4ad0856a49907a44d63c70 Status: Downloaded newer image for amazon/dynamodb-local:latest Initializing DynamoDB Local with the following configuration: Port: 8000 InMemory: true DbPath: null SharedDb: false shouldDelayTransientStatuses: false CorsParams: *
docker-composeで利用する
これを指定したdocker-composeを作成します。
version: '3.3' services: dynamodblocal: image: amazon/dynamodb-local networks: - default ports: - 8000:8000
こちらを実行すると、先ほどと同じように8000で起動します。
$ docker-compose.exe up Creating network "dynamodb_default" with the default driver Creating dynamodb_dynamodblocal_1 ... done Attaching to dynamodb_dynamodblocal_1 dynamodblocal_1 | Initializing DynamoDB Local with the following configuration: dynamodblocal_1 | Port: 8000 dynamodblocal_1 | InMemory: true dynamodblocal_1 | DbPath: null dynamodblocal_1 | SharedDb: false dynamodblocal_1 | shouldDelayTransientStatuses: false dynamodblocal_1 | CorsParams: *
docker-comopseのネットワークにDynamoDB Adminを追加する
このままだと確認することも不便なので、DynamoDB Adminも一緒に入れてみます。
version: '3.3' services: dynamodblocal: image: amazon/dynamodb-local networks: - default ports: - 8000:8000 dynamodbadmin: image: instructure/dynamo-local-admin networks: - default ports: - 8001:8001 environment: DYNAMO_ENDPOINT: http://dynamodblocal:8000/
docker-compose upすると、docker-compose.ymlのdynamodb localに接続したdynamodb adminが起動します!
dynamodb adminのコンテナは環境変数「DYNAMO_ENDPOINT」で接続先のdynamodbを指定します。このときdocker-composeのネットワークが同一で、内部のdymaodblocalを指定することができるため、外部への公開ポートと関係なくdynamodbadminを起動することができます。
version: '3.3' services: dynamodblocal: image: amazon/dynamodb-local networks: - default dynamodbadmin: image: instructure/dynamo-local-admin networks: - default ports: - 8001:8001 environment: DYNAMO_ENDPOINT: http://dynamodblocal:8000/
dynamodblocalのほうからポート設定を消しても、adminは使用できます。
つまり外部公開のポートを変更すれば、複数のdokcer-composeディレクトリで別々のdynamodbadminを起動して使用することも出来るようになります。
例えば別のディレクトリに、次のようにdocker-comose.ymlを作成して
version: '3.3' services: dynamodblocal: image: amazon/dynamodb-local networks: - default dynamodbadmin: image: instructure/dynamo-local-admin networks: - default ports: - 8011:8001 environment: DYNAMO_ENDPOINT: http://dynamodblocal:8000/
ポート8001と8011でそれぞれ別の環境としてアクセスできるようになります。
開発環境として平行起動して使い分けることはままあるので、ポートだけで別にできるのは助かります。