💡

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://github.com/yamada-y0/fruit-vote-application/blob/main/quarkus-app/src/main/resources/localstack-init/01_configure_cli.sh

Discussion