Amazon SQSでキュー内のメッセージを全部消したい 〜 PurgeQueueアクションがひっそりと追加されていた件
よく訓練されたアップル信者、都元です。久しぶりのAWSのセカイ! いや、ボスが「EdisonだけじゃなくてAWSのブログ読みたいなぁ」とかプレッシャー掛けてくるもんだから……。
キュー内のメッセージを全部消したい
さて。Amazon SQSを使って開発をしている時、間違って大量のメッセージを送信してしまったり、受信側の障害でメッセージが受信されずに放置されたりして、キュー内に大量のメッセージが溜まってしまうことがあります。
従来このような時は、「受信しては消す」という小さなスクリプトを書いてみたり、Message Retention Periodを短く設定してみたり、と少々面倒なことをしていました。こんなのを繰り返し実行したりして…。
for handle in $(aws sqs receive-message --queue-url $QURL --max-number-of-messages 10 --visibility-timeout 30 | jq -r ".Messages[].ReceiptHandle") do echo $var aws sqs delete-message --queue-url $QURL --receipt-handle $handle done
PurgeQueue
先日、APIをざっと眺めていたところ、見慣れぬAPIアクションが…。公式アナウンスは無かった気がしますw
Amazon Simple Queue Service API Reference - PurgeQueue
マネジメントコンソールにもメニュー項目が追加されています。
実行してみると。まぁなんてことありませんが。
しばらく時間は掛かるようですが、Message Avaliableはめでたく0になりました。