SQS から AWS Lambda をトリガーできるようになりましたね! ワーカーを AWS Lambda で動かせるので、これは嬉しいリリースです。
en9sqs
こういった機能を試すには、SQS にメッセージをエンキューする必要があるわけで、 パフォーマンスを見たい時は大量にメッセージを投下したい場合もあったりします。
そんな時に便利なのが、en9sqs というツールです。 golang で書いており、並列にメッセージをエンキューできます。
インストール
インストールするには、go get を使うか、64bit macOS 用ならバイナリが releases にあるので、これをダウンロードするのが良いでしょう。
$ go get -u github.com/shin1x1/en9sqs
Releases · shin1x1/en9sqs · GitHub
実行例
下記が実行例です。ab(Apache Bench)と同様に、-c が並列度で、-n がメッセージ総数を指定します。その後に、キューの URL、そして送信するメッセージを指定します。
# 1,000 件のメッセージを 10 並列で送信 $ en9sqs -c 10 -n 1000 https://sqs.ap-northeast-1.amazonaws.com/xxxxxx/hogehoge "Hello" 2018/06/29 13:15:22 message 100 done(worker:5) 2018/06/29 13:15:22 message 200 done(worker:3) 2018/06/29 13:15:22 message 300 done(worker:7) 2018/06/29 13:15:23 message 400 done(worker:10) 2018/06/29 13:15:23 message 500 done(worker:3) 2018/06/29 13:15:23 message 600 done(worker:5) 2018/06/29 13:15:24 message 700 done(worker:4) 2018/06/29 13:15:24 message 800 done(worker:8) 2018/06/29 13:15:24 message 900 done(worker:1) 2018/06/29 13:15:25 message 1000 done(worker:10) 2018/06/29 13:15:25 Done(1000 messages)
ツールとして、並列数やメッセージ数に制限はかけていないですが、あまりに並列数を上げすぎると SQS がエラーを返すようになるので注意して下さい。
さいごに
golang だとこういった並列で何かをするツールをサクッと書けるので良いですね! 機能としては、まだ追加したいもの(メッセージのテンプレート化、sleep 機能など)もあるので、ぼちぼち追加していきます。もちろん、PR も歓迎ですー。