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

AWSのコスト異常検出を設定する

意図しない課金を防ぐためにとりあえず設定しておくと良さそう

Nodejs12のLambdaでawscliを使う

aws-lambda-layer-awscliを使う

CDK aws-lambda-nodejsのビルド時間を短縮する

Parcel v2.0.0-beta.1を使ってローカルでバンドルする

CloudWatch Eventsで日本時刻(JST)の月初に実行したい

Lオプションの存在を知った