かもメモ

自分の落ちた落とし穴に何度も落ちる人のメモ帳

Docker AWS DynamoDB local 環境作った

サーバレスの Lambda 入門しました。

この本によると AWS の Lambda は実行ごとにコンテナが立ち上がってDBにコネクションを張るので、RDBは相性が良くなく、Key-Value Store の DyanamoDB の方が良いらしく DyanamoDB にも入門。

AWS のドキュメント にはプログラムを Download して Java で実行させる方法や Docker で実行させる方法のドキュメントが有りました。本のサンプルは Java で実行させる方法だったのですが、折角なので Docker で作成してみたのでメモ。

DynamoDB を Docker で使う公式のドキュメント

公式にある docker-compose のコードはこんな感じ (このまま使える、ありがたい!

version: '3.7'
services:
 dynamodb-local:
   image: amazon/dynamodb-local:latest
   container_name: dynamodb-local
   ports:
    - "8000:8000"

このまま実行したら DynamoDB を使うことができたのですが、デフォルトの設定では -inMemory で起動されるようでデータが永続化されていないのでコンテナを落とすとデータが消えてしまいました。

データを永続化させる

volumes でデータをローカル環境に作成するようにすればOK

構成

|- docker-compose.yml
|- /dynamoDB
     |- /data # ここにデータを永続化させたい

docker-compose.yml

version: '3.7'
volumes:
  dynamodb:
    driver: local
services:
  dynamodb-local:
    image: amazon/dynamodb-local:latest
    container_name: dynamodb-local
    volumes:
      - ./dynamoDB/data:/home/dynamodblocal/data
    ports:
      # API で 8000 番ポートを使いたかったので 8888 に変更
      - "8888:8000"
    command:
      -jar DynamoDBLocal.jar -sharedDb -dbPath ./data -optimizeDbBeforeStartup

これで $ docker-compose up をしてビルドを行うと localhost:8888 で DynamoDB にアクセスすることが出来るようになりまし、docker のコンテナを落としてもデータが消えることなく開発の続きを行えるようになりました! ( ᐢ˙꒳​˙ᐢ ) わーい

command の説明

  • -jar DynamoDBLocal.jar … DynamoDB の起動コマンド。(コンテナをビルドすればコンテナ内の /home/dynamodblocal 内に DynamoDBLocal.jar が作成されている)
  • -sharedDb … 認証情報(AWS_ACCESS_KEY_ID)・リージョンが異なっていてもデータベースファイルを分けず共通データベースファイルを使用する。

    -sharedDb — If you specify -sharedDb, DynamoDB uses a single database file instead of separate files for each credential and Region.

  • -dbPath <dir name> … データベースを書き込むディレクト

    -dbPath value — The directory where DynamoDB writes its database file. If you don't specify this option, the file is written to the current directory. You can't specify both -dbPath and -inMemory at once.

  • -optimizeDbBeforeStartup … DynamoDBを起動する前にデーブルを最適化する。(-dbPath オプションが必須)

    -optimizeDbBeforeStartup — Optimizes the underlying database tables before starting DynamoDB on your computer. You also must specify -dbPath when you use this parameter.

 
サーバーレス用の DB みたいなので、endpoint でデータベースにアクセスしたり不思議な感じです。そして MongoDB や firebase fireStore みたいな感じだと思うのですが、データベースの設計が難しいみたいなのでやってみてハマりどころがあればまたメモしていきたいです。 (AWSのドキュメント日本語もあるけど、僕の頭が悪すぎるのか理解が難しい… ガンバロ…)


[参考]

あとでみる

Svelte と MobX チョット気になっている