kasuのブログ

勉強していく

cdkで定義したDynamoDBのテーブルをDynamoDBLocalに作る

この記事はPRを含みます

cdkを使っている場合のDynamoDBLocalには、どのようにテーブルを作ってますか?

皆さんは、アプリケーションの構成をcdkによって定義している際のローカル開発環境のDynamoDBのテーブル作成はどうしていますか。

LocalStack - A fully functional local cloud stack

localstackを用いた、cdk deployによってローカル開発環境のDynamoDBを用意している人も多いかと思います。

しかし、localstackはDynamoDBを使うだけなのに起動サービスにcloudformationを必要としていたりと、DynamoDBだけ欲しいんじゃーというかたには大げさではないでしょうか。

amazon/dynamodb-local

localstack以外でローカル環境にDynamoDBを用意する方法としては、Dockerイメージのamazon/dynamodb-localを使うのが一般的でしょうか。*1

dynamodb-localaws dynamodbコマンドで操作が出来ます。

例えばテーブルを作成するには、テーブル定義を書いたtable.jsonを用意してaws dynamodb create-table --cli-input-json file://table.jsonとコマンドを実行します。 以後紹介する方法はこれを利用してテーブルを作成することになります。

cdk synth(synthesize)

aws dynamodbでテーブルを作成するにはjsonファイルが必要になります。

そこで、cdk synthを実行してみましょう。 すると、cdk.outディレクトリへDynamoDBのテーブル定義が吐き出されます。

このファイル自体はCloudFormationテンプレートなので、ブログタイトルのcdkで定義したテーブルというよりはCloudFormationテンプレートのテーブル定義からDynamoDBLocalにテーブルを作成する方法と言った方が正しいかもしれません。

とはいえ、cdk synsthした結果をDynamoDBLocalのテーブルを作成するにはどんな手段があるのか見ていきましょう。

cloudformation-dynamodb-export · PyPI

これはPythonで書かれたスクリプトです。使用する際は、pipでインストールします。 最後に紹介する方法に変更する前はこちらを利用していました。

CloudFormationの定義からDynamoDB localのTableを作成する

こちらはRuby製のスクリプトです。MacならRubyが既に入っているので、そのまま使えそうですね。

npm scriptsで完結させる

いろいろ方法はありましたが、せっかくaws-cdkをnpmで管理しているので、npm完結したいですよね?

なにか良さげなパッケージはないのでしょうか?

ここに良さげなパッケージがあるので、こちらを使いましょう。

ErgoFriend/cf-to-dynamodb-schema

www.npmjs.com

実際にaws-cdkを使った/exampleフォルダがあるのでそこを見るとよくわかると思います。

使う際には、下記のようにcdk synthした結果のCloudFormationテンプレートを指定すると、ローカル環境のDynamoDBにテーブルが出来上がります。

cf-to-dynamodb-schema create-table ./cdk.out/SampleStack.template.json -e http://localhost:8000 -p c2dexample

*1:serverless-dynamodb-localもあると思いますが、今回はcdkをメインとしたいのでおいておきましょう。