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

Step Functionsステートマシンから別のStep Functionsを呼び出す

複雑なステートマシンを小さいステートマシンに分割しておけばテストと確認がやりやすくなる

マネージメントコンソール上のエディタでLambdaのコードを書く際にnpmライブラリを追加したい

ローカルでライブラリをインストールしてからインポートする必要があった

Amazon API Gatewayのタイムアウト設定は最大29秒まで

上限緩和もできないので注意

MFA必須のスイッチロールアカウントでaws cliを使う

switch role用のprofileを追加する

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

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