サーバレスの 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のドキュメント日本語もあるけど、僕の頭が悪すぎるのか理解が難しい… ガンバロ…)
[参考]
- Deploying DynamoDB Locally on Your Computer - Amazon DynamoDB
- DynamoDB Local Usage Notes - Amazon DynamoDB
あとでみる
- DynamoDB全くわからない、から、ちょっとわかるようになるまでの道しるべ | Developers.IO
- DynamoDBの料金を最適化しよう【初級編】 | Developers.IO
- コンセプトから学ぶAmazon DynamoDB | シリーズ | Developers.IO

サーバーレスシングルページアプリケーション ―S3、AWS Lambda、API Gateway、DynamoDB、Cognitoで構築するスケーラブルなWebサービス
- 作者:Ben Rady
- 発売日: 2017/06/23
- メディア: 単行本(ソフトカバー)
Svelte と MobX チョット気になっている