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

これでコンテナ起動時にキューが作成済みの状態にできた。

参考


Related #aws

RDSを定期的に停止するLambdaを作る

手動起動は大変なので

AWS SESの受信メールを暗号化してs3に保存しLambdaで読み込む

jsの場合、複合処理を独自実装する必要がある

CloudWatchアラームを一時的に無効化する

AWS CLIで設定する必要がある

Alexaに気温と二酸化炭素濃度を教えてもらう

「Alexa、気温」でセンサー情報を教えてくれるようになった

CloudWatchのカスタムメトリクスを減らす

あまりチェックしないセンサー値の送信を止めた