Amazon SQSでVisibility Timeout中のメッセージを消す方法

Amazon SQSのキューからメッセージを取得した場合、Visibility Timeoutという期限が設定されてこの間にはメッセージを受信した時に取得したReceiptHandleを利用しない限りVisibility Timeoutの再設定およびメッセージの削除を行うことができない。

Visibility Timeoutが短い場合はそこまで問題にはならないのだが、バッチ処理などを行わせるための仕組みとしてVisibility Timeoutをある程度長い時間にした場合にはそのReceiptHandleを失ってしまうとメッセージのVisibility Timeoutを待つしか処理を継続する方法がなくなってしまう。
そのため、Visibility Timeoutが長いキューの処理を行う場合、そのメッセージのIDとReceiptHandleをログに出すなどした方が問題にはなりづらそうである。

しかしながら、ログに出力忘れをした場合などにどうにかしてメッセージを削除する方法が無いのかなーと思っていたら、最近*1PurgeQueueというアクションが追加されていた。
問答無用で、SQSに入っている全てのメッセージを(Visibility Timeoutの状態を問わずに)削除するActionである。

http://aws.amazon.com/jp/about-aws/whats-new/2014/12/08/delete-all-messages-in-an-amazon-sqs-queue/

このアクションを呼び出すのはAWSCLIなどから呼び出せる。
が、新しい機能なので対応する新しいバージョンのAWSCLIをインストールしておかなくてはならない。

aws sqs purge-queue --queue-url https://sqs.ap-northeast-1.amazonaws.com/************/example-queue

キューに複数のメッセージを投入したが、何らかのエラーが発覚して全処理の取消しを行いたい場合や、SQSを使ったテストの中止時などには利用できそうだ。

*1:2014/12