💡
QuarkusのDevServicesでDynamoDBの初期化スクリプトを実行する
公式にプロパティの説明は記載されているものの、実装例等が見当たらなかったため、備忘も兼ねて。
devモード、QuarkusTest、QuarkusIntegrationTestの全てで、アプリの立ち上げ前に初期化処理を実行することができます。
結論
下記にあたるプロパティを設定し、指定パスに初期化用のスクリプトを配置することでlocalStackの立ち上げ時に初期化スクリプトを実行することができます。
quarkus.aws.devservices.localstack.init-scripts-classpath
quarkus.aws.devservices.localstack.init-completion-msg
例
.
├── src
│ └── main
│ └── resources
│ └── localstack-init
│ └── 01_init-dynamodb.sh
├── application.properties
└── ...
application.properties
quarkus.aws.devservices.localstack.init-scripts-classpath=localstack-init
quarkus.aws.devservices.localstack.init-completion-msg=localstack-init
01_init-dynamodb.sh
#!/bin/bash
# ユーザーIDと名前の複合キーを持つサンプルテーブルを作成します
awslocal dynamodb create-table \
--table-name Sample \
--attribute-definitions \
AttributeName=userId,AttributeType=S \
AttributeName=userName,AttributeType=S \
--key-schema \
AttributeName=userId,KeyType=HASH \
AttributeName=userName,KeyType=RANGE \
--provisioned-throughput ReadCapacityUnits=1,WriteCapacityUnits=1 \
--region=us-east-1
echo "#### Dynamodb init completed"
注意点
- 作成したスクリプトはLocalStackのコンテナ内で実行されるため、LocalStackのCLIコマンドを使用しましょう。エンドポイントを指定する必要がなくなります。
参考
- https://docs.quarkiverse.io/quarkus-amazon-services/dev/dev-services.html#quarkus-amazon_quarkus-aws-devservices-localstack-init-scripts-classpath
- https://medium.com/@onurcelik.email/aws-lambda-with-quarkus-69db8bbffdbe
- https://github.com/quarkiverse/quarkus-amazon-services/pull/317
参考までに、簡単なサンプル実装を載せておきます。
Discussion