1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

AWS cliでキューのメッセージを取得するシェルスクリプト

Last updated at Posted at 2015-08-14

#AWSのSQSキューからメッセージを取得
エラー等でキューイング処理に失敗したメッセージがデッドキューに行ってしまい、メッセージの内容をサルベージする必要が出てきた。Webページ上から作業するにはあまりに量が多かったので、メッセージ内容を取得してファイルに出力するシェルを書いた。

receiveMessage.sh
#!/bin/sh

cnt=0

while [ $cnt -lt $1 ];
do
  RESULT=`aws sqs receive-message --queue-url "対象キューのURL"`

  echo $RESULT >> ./receiveOutput.txt
  cnt=$(( cnt + 1 ))
done

aws sqs receive-messageで、キューに溜まったメッセージを1つ取得する。
メッセージが20溜まっていたら、実行時の引数に20と指定して実行すれば、その回数分取得。

Terminal
./receiveMessage.sh 20

すると、receiveOutput.txtに結果が出力される。

##一度の取得個数を変更する
しかしこれだと、VisibilityTimeoutが30秒など短い時に100件を超えるメッセージが溜まっていると、全てのメッセージを取得する前に、処理したメッセージが可視化されてしまい、同じメッセージを取得してしまうことがあった。

抜本的解決にはならないが、一度に取得するメッセージの数を指定することで、ある程度の対応は可能。

receiveMessage.sh
#!/bin/sh

cnt=0

while [ $cnt -lt $1 ];
do
  RESULT=`aws sqs receive-message --queue-url "対象キューのURL" --max-number-of-message "10"`

  echo $RESULT >> ./receiveOutput.txt
  cnt=$(( cnt + 1 ))
done

receive-messageのoptionに--max-number-of-messageと付けることで、一度に取得するメッセージの数を1〜10に変更することが出来る。

ただ、1000を超えるようなメッセージを取得する必要がある時は同じ問題に突き当たってしまう。
どうにか出来ないのだろうか…

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?