AWS SQS互換アプリを使ってDockerで検証する

tl;dr;

AWS SQSを使ったシステムを作る際、ローカル環境で手軽にSQSがいじれれば非常に便利だ。今回、Dockerを用いてSQS互換の環境を作った。
docker imageの作り方、localでの起動方法までまとめている。

docker image作成

SQSのinterfaceに適合したアプリケーションがある。

https://github.com/softwaremill/elasticmq

これをそのままDockerの中に入れ、ポートを開いてENTRYPOINTを起動すれば、SQS互換のdocker imageを作成することができる。

ビルド方法はこちら。

docker build -t tsukada/elasticmq:0.15.3 .

そのimageを用いて起動する。ローカルの9324 portがコンテナ内の9324 portにそのままマッピングさせた。

docker run -d --name=elasticmq -p 9324:9324 tsukada/elasticmq:0.15.3

起動確認

起動成功。localhost の 9324 portとのマッピングも成功した。

使い方

キューの作成

ここで表示されるQueueUrlが、メッセージの送受信などで必須情報となる。

メッセージ送信

作成したキューにメッセージを送信する。

--queue-url オプションが必要になる。ここではキューを作成した際に作られたQueueUrlを入力する。

送信が成功すると、メッセージ本文の MD5 ダイジェストとメッセージ ID が表示される。

メッセージを受信する

メッセージで送信された

tsukada hoge. Hello world

を確認できた。
ちなみに、このコマンドを複数回実行しても、毎回メッセージが表示されるわけではない。

SQSには可視性タイムアウトという考えがあり、デフォルトで1度キューを表示したら、30秒間は表示されない。

この仕組みで、重複してキューが実行されるのを防いでいる。

そのような仕様だと、「見えているキュー、見えてないキュー」の件数を確認したくなる。

見ているキュー、見えていないキューの件数を確認したい

 見えているキュー(キューから取得可能なメッセージのおおよその数)

ApproximateNumberOfMessages が見えている件数

見えてないキュー(処理されたメッセージ)

ApproximateNumberOfMessagesNotVisible--attribute-namesに指定することで見えなくなっているキューの件数を表示することができる。

これらのオプションについては公式ドキュメントで綺麗に整理されている。

https://docs.aws.amazon.com/ja_jp/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-resources-required-process-messages.html

メッセージを削除する

不要になったメッセージは削除した方が良い。削除コマンドは以下の通り。

--receipt-handle には、メッセージを受信した際に記載されているReceiptHandleを指定する。

receive-message (メッセージを受信)した際、した際に確認できる ReceiptHandle はこのような感じに表示される。.jq コマンドなどを利用すれば簡単にシェル化できそうだ。

QueueUrlsを確認する

QueueUrlsを確認できるのはもちろんキュー作成時だけではなく、確認用のコマンドも用意されている。

参考情報

https://qiita.com/tsukapah/items/0ba64ac734e885f6e8e8

https://qiita.com/tcsh/items/7781fe238df82fc030d2