localstackでSQSを使う際に初期化スクリプトを流す
localstackを使うとAWSサービスのモック化ができるので、ローカル開発およびテストがしやすくなる。
Dockerイメージも公開されているので、手軽にdockerアプリに組み込める。
localstackでSQSを使う機会があったので設定を行ったが、コンテナを止めると作ったキューが消えてしまう問題に遭遇。
調べてみると[[docker-entrypoint-initaws.d]]以下に初期化スクリプトを配置すれば、起動時に実行してくれるとのことだったのでvolumesでmountするように設定した。
[[docker-compose.yml]]
version: "3"
services:
localstack:
image: localstack/localstack:0.10.7
environment:
SERVICES: sqs
DEFAULT_REGION: ap-northeast-1
HOSTNAME_EXTERNAL: localstack
volumes:
- ./localstack:/docker-entrypoint-initaws.d
ports:
- "9000:8080"
- "4567-4578:4567-4578"
起動時にcreate-queue(例はFIFOキューを作る場合)を実行するシェルスクリプトを追加。
# localstack/init_sqs.sh
awslocal sqs create-queue --queue-name samples-queue.fifo --attributes "FifoQueue=true"
なお、LocalStack用のAWS CLIであるawslocalを使うとシンプルにコマンドが書けるようになる。
macの場合は以下でインストールできる。
pip3 install awscli-local
これでコンテナ起動時にキューが作成済みの状態にできた。