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

マネジメントコンソールにもメニュー項目が追加されています。

2014-12-16_1620

実行してみると。まぁなんてことありませんが。

2014-12-16_1621

2014-12-16_1626b

しばらく時間は掛かるようですが、Message Avaliableはめでたく0になりました。