この記事は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-local
はaws 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
実際に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をメインとしたいのでおいておきましょう。