Shin x Blog

PHPをメインにWebシステムを開発してます。Webシステム開発チームの技術サポートも行っています。

ab ライクに SQS にエンキューするツール en9sqs

SQS から AWS Lambda をトリガーできるようになりましたね! ワーカーを AWS Lambda で動かせるので、これは嬉しいリリースです。

aws.amazon.com

en9sqs

こういった機能を試すには、SQS にメッセージをエンキューする必要があるわけで、 パフォーマンスを見たい時は大量にメッセージを投下したい場合もあったりします。

そんな時に便利なのが、en9sqs というツールです。 golang で書いており、並列にメッセージをエンキューできます。

github.com

インストール

インストールするには、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 も歓迎ですー。