Amazon SQS標準キューが順序を保証しないことをスクリプトを使って確認してみた(JAWS-UG CLI専門支部 #181R SQS入門の復習その②)
はじめに
この記事は前回のJAWS-UG CLI専門支部 #181R SQS入門を噛みしめながら復習する(①事前作業編)の続編にあたる。
続編ならタイトルを「噛みしめながら復習する(②〇〇編)」にすべきだが、今回は、前回ほど一つ一つのコマンドを掘り下げておらず、別のことがやりたくなったので、結局全然違うタイトルにしてしまった。
やりたいこと
タイトル通り、Amazon SQS標準キューがキューの順序を保証しないことを、実際に確かめてみたくなった。当日のハンズオンでは送受信したメッセージが一つだったので、今回は複数メッセージを送受信してみる。
それとシェルスクリプトが書きたくなったので、メッセージの送受信や削除をスクリプトで回してみる。(スクリプト中のSQS絡みのコマンドは、ハンズオンで学習したものを主に使用している。)
<補足>Amazon SQSキューには、キューの順序を保証しない標準キューと、格納された順に取り出しが可能なFIFOキューがある。両者の細かい違いについては以下を参照。5年前の記事だが、凄く分かりやすくまとまっていた。
今回の確認方法
まず30回ほどメッセージを送信してキューに格納する。次に、それを30回受信し、送信時と順番がどのように変わるか確認してみる。メッセージの送受信はシェルスクリプトで実施する。
なお、前提として、SQS標準キューはすでに作成済み。また、今回は可視性タイムアウトをデフォルトの30秒から、少し長めの2分に変更してみた。それと、メッセージを受信する際の最大メッセージ数を30に設定した。
メッセージの送信
早速、メッセージを送信してみる。
送信用スクリプト
#!/bin/bash SQS_QUEUE_NAME="handson-cli-sqs-novice-queue" SQS_QUEUE_URL=$(aws sqs get-queue-url \ --queue-name ${SQS_QUEUE_NAME} \ --output text) for ((i=1; i<=30; i++)) do SQS_MESSAGE_BODY="${i}回目のメッセージ送信です。今は$(date +%H:%M:%S)です。" \ && echo ${SQS_MESSAGE_BODY} aws sqs send-message --queue-url "${SQS_QUEUE_URL}" --message-body "${SQS_MESSAGE_BODY}" SQS_MESSAGE_NUMBER="キューのメッセージ数は \ $(aws sqs get-queue-attributes \ --queue-url ${SQS_QUEUE_URL} \ --attribute-names ApproximateNumberOfMessages \ --query 'Attributes.ApproximateNumberOfMessages' \ --output text) \ です。" \ && echo ${SQS_MESSAGE_NUMBER} done
SQS_QUEUE_NAMEには事前に作成したキューの名前を指定。SQS_QUEUE_URLには作成したキューのURLを指定する。(キューにメッセージを送信する際や、キューに格納されているメッセージ数を表示する際に引数として指定する必要がある。)
送信メッセージは、「〇回目のメッセージ送信です。今は<何時何分何秒>です。」という内容にした。(後でメッセージを受信した際に、何回目に送信したメッセージを受信したのか分かりやすくするため。)
その後、aws sqs send-message
コマンドで実際にメッセージを送信し、最後にaws sqs get-queue-attributes
コマンドを使用し、ApproximateNumberOfMessages(キューから取得可能なおおよそのメッセージ数)を表示させる。
実際に送信してみた
[ec2-user@ip-10-0-0-127%]$ sh Message_send.sh 1回目のメッセージ送信です。今は18:00:17です。 { "MD5OfMessageBody": "8cfebdc11d8f69f86f5b9e6ebb3b498c", "MessageId": "87674bd6-168c-4e2f-bae1-04a38d354979" } キューのメッセージ数は 1 です。 2回目のメッセージ送信です。今は18:00:18です。 { "MD5OfMessageBody": "69654bfffefed671752009807c78a201", "MessageId": "3aca5431-db4b-4f92-8b94-4bd4bbe13bad" } キューのメッセージ数は 0 です。 3回目のメッセージ送信です。今は18:00:19です。 { "MD5OfMessageBody": "63926ed43acc5a4e5090acb674b51586", "MessageId": "6bf66fde-b885-4156-8d71-dd821d8f00f6" } キューのメッセージ数は 2 です。 4回目のメッセージ送信です。今は18:00:20です。 { "MD5OfMessageBody": "9fab63a356221d8c157018b0f1602ec9", "MessageId": "e967d444-70e4-414f-9876-4d4f986f2a0d" } キューのメッセージ数は 4 です。 5回目のメッセージ送信です。今は18:00:21です。 { "MD5OfMessageBody": "a554d49254c583f472cfbaf684d63cd5", "MessageId": "93685150-7a86-43ea-aa4c-b79d3b0d1c0a" } キューのメッセージ数は 5 です。 -------中略------- 26回目のメッセージ送信です。今は18:00:42です。 { "MD5OfMessageBody": "f507afe33a1fdebc3c33d34bd8bd88d2", "MessageId": "4cb3cf6e-4944-4126-8d44-11a4e2035005" } キューのメッセージ数は 19 です。 27回目のメッセージ送信です。今は18:00:43です。 { "MD5OfMessageBody": "9dbe09b131ece845f9d9e81d1efb9023", "MessageId": "96ea8765-7fd3-450f-9b62-28975f914a2c" } キューのメッセージ数は 15 です。 28回目のメッセージ送信です。今は18:00:44です。 { "MD5OfMessageBody": "65b5d8d23b5431e40ffcbaf47cd45b58", "MessageId": "4af0258b-ce2f-47c6-923a-2420506318fe" } キューのメッセージ数は 17 です。 29回目のメッセージ送信です。今は18:00:45です。 { "MD5OfMessageBody": "1e33c69b50bd937a4d250bfbb0dd6754", "MessageId": "be599a97-d21a-4f15-ba63-59bece7d0773" } キューのメッセージ数は 28 です。 30回目のメッセージ送信です。今は18:00:46です。 { "MD5OfMessageBody": "57d21dc8959426918e66607515c4fb0d", "MessageId": "e2bcc30a-36cf-4796-a3b4-12e4c60191a7" } キューのメッセージ数は 26 です。 [ec2-user@ip-10-0-0-127%]$ [ec2-user@ip-10-0-0-127%]$ [ec2-user@ip-10-0-0-127%]$ aws sqs get-queue-attributes \ > --queue-url ${SQS_QUEUE_URL} \ > --attribute-names ApproximateNumberOfMessages \ > --query 'Attributes.ApproximateNumberOfMessages' \ > --output text 30 [ec2-user@ip-10-0-0-127%]$
無事に30回メッセージが送信された。実行結果を見ると、ちょうど1秒に1メッセージ送信していた模様。また、最後のメッセージが送信されて少ししてから改めてApproximateNumberOfMessagesを確認すると、キューに格納されているメッセージ数はちゃんと30個になっていた。
ただし、スクリプトを回している間のApproximateNumberOfMessagesの数はキレイに増える訳ではなく、結構増減していた。結果を表にまとめると以下のようになった。
メッセージ送信回数 | 送信時刻 | ApproximateNumberOfMessages |
---|---|---|
1回目 | 18:00:17 | 1 |
2回目 | 18:00:18 | 0 |
3回目 | 18:00:19 | 2 |
4回目 | 18:00:20 | 4 |
5回目 | 18:00:21 | 5 |
6回目 | 18:00:22 | 6 |
7回目 | 18:00:23 | 2 |
8回目 | 18:00:24 | 7 |
9回目 | 18:00:25 | 7 |
10回目 | 18:00:26 | 10 |
11回目 | 18:00:27 | 5 |
12回目 | 18:00:28 | 6 |
13回目 | 18:00:29 | 11 |
14回目 | 18:00:30 | 11 |
15回目 | 18:00:31 | 1 |
16回目 | 18:00:32 | 4 |
17回目 | 18:00:33 | 12 |
18回目 | 18:00:34 | 16 |
19回目 | 18:00:35 | 7 |
20回目 | 18:00:36 | 11 |
21回目 | 18:00:37 | 10 |
22回目 | 18:00:38 | 20 |
23回目 | 18:00:39 | 21 |
24回目 | 18:00:40 | 20 |
25回目 | 18:00:41 | 20 |
26回目 | 18:00:42 | 19 |
27回目 | 18:00:43 | 15 |
28回目 | 18:00:44 | 17 |
29回目 | 18:00:45 | 28 |
30回目 | 18:00:46 | 26 |
大体、5秒に1回くらいキューの数がガクッと下がっているけど、理由がイマイチ分からん。。これはもう少し調べる必要がありそうだけど、とりあえず次は受信してみる。
メッセージの受信
キューに溜まっている30個のメッセージを、スクリプトを使って全て受信する。
受信用スクリプト
#!/bin/bash SQS_QUEUE_NAME="handson-cli-sqs-novice-queue" SQS_QUEUE_URL=$(aws sqs get-queue-url \ --queue-name ${SQS_QUEUE_NAME} \ --output text) DIR_SQS_MESSAGE="${HOME}/environment/tmp-handson-cli-sqs" for ((i=1; i<=30; i++)) do FILE_SQS_MESSAGE="${DIR_SQS_MESSAGE}/${SQS_QUEUE_NAME}-${i}.json" echo "${i}回目のメッセージ受信です。今は$(date +%H:%M:%S)です。" aws sqs receive-message --queue-url "${SQS_QUEUE_URL}" > ${FILE_SQS_MESSAGE} SQS_MESSAGE_BODY="受信したメッセージは \ $(cat ${FILE_SQS_MESSAGE} | jp.py 'Messages[].Body' | sed 's/[]\"\[]//g') \ です。" \ && echo ${SQS_MESSAGE_BODY} SQS_MESSAGE_NUMBER="キューのメッセージ数は \ $(aws sqs get-queue-attributes \ --queue-url ${SQS_QUEUE_URL} \ --attribute-names ApproximateNumberOfMessages \ --query 'Attributes.ApproximateNumberOfMessages' \ --output text) \ です。" \ && echo ${SQS_MESSAGE_NUMBER} done
今回はハンズオンの手順に倣い、受信したメッセージを一時ファイルに保存する。その際、メッセージ毎に個別の一時ファイルを作成することにした。(後でメッセージを削除する時に、その方が楽そうなので。詳細は後述。)
スクリプトの内容について簡単に触れておくと、まずは何回目の受信であるか最初に表示する。その後、aws sqs receive-message
コマンドでメッセージを受信し、受信したメッセージの内容を表示する。
もしキューが順序を保証するなら、1回目に受信したメッセージの中身は「1回目のメッセージ送信です。」だし、10回目に受信したものは「10回目のメッセージ送信です。」になるはずだが、どれくらいずれるのだろうか。
また、今回もApproximateNumberOfMessagesを表示させるようにした。メッセージを受信してもキューから削除されるわけではないが、可視性タイムアウトが効いて数字がどんどん減るのかな?
実際に受信してみた
[ec2-user@ip-10-0-0-127%]$ sh Message_receive.sh 1回目のメッセージ受信です。今は18:04:12です。 受信したメッセージは 3回目のメッセージ送信です。今は18:00:19です。 です。 キューのメッセージ数は 29 です。 2回目のメッセージ受信です。今は18:04:13です。 受信したメッセージは 4回目のメッセージ送信です。今は18:00:20です。 です。 キューのメッセージ数は 30 です。 3回目のメッセージ受信です。今は18:04:14です。 受信したメッセージは 13回目のメッセージ送信です。今は18:00:29です。 です。 キューのメッセージ数は 28 です。 4回目のメッセージ受信です。今は18:04:15です。 受信したメッセージは 1回目のメッセージ送信です。今は18:00:17です。 です。 キューのメッセージ数は 26 です。 5回目のメッセージ受信です。今は18:04:16です。 受信したメッセージは 15回目のメッセージ送信です。今は18:00:31です。 です。 キューのメッセージ数は 29 です。 6回目のメッセージ受信です。今は18:04:17です。 受信したメッセージは 6回目のメッセージ送信です。今は18:00:22です。 です。 キューのメッセージ数は 29 です。 7回目のメッセージ受信です。今は18:04:18です。 受信したメッセージは 20回目のメッセージ送信です。今は18:00:36です。 です。 キューのメッセージ数は 30 です。 8回目のメッセージ受信です。今は18:04:20です。 受信したメッセージは 21回目のメッセージ送信です。今は18:00:37です。 です。 キューのメッセージ数は 24 です。 9回目のメッセージ受信です。今は18:04:21です。 受信したメッセージは 7回目のメッセージ送信です。今は18:00:23です。 です。 キューのメッセージ数は 21 です。 10回目のメッセージ受信です。今は18:04:22です。 受信したメッセージは 10回目のメッセージ送信です。今は18:00:26です。 です。 キューのメッセージ数は 21 です。 -------中略------- 21回目のメッセージ受信です。今は18:04:34です。 受信したメッセージは 23回目のメッセージ送信です。今は18:00:39です。 です。 キューのメッセージ数は 18 です。 22回目のメッセージ受信です。今は18:04:35です。 受信したメッセージは 29回目のメッセージ送信です。今は18:00:45です。 です。 キューのメッセージ数は 15 です。 23回目のメッセージ受信です。今は18:04:36です。 受信したメッセージは 16回目のメッセージ送信です。今は18:00:32です。 です。 キューのメッセージ数は 11 です。 24回目のメッセージ受信です。今は18:04:37です。 受信したメッセージは 18回目のメッセージ送信です。今は18:00:34です。 です。 キューのメッセージ数は 11 です。 25回目のメッセージ受信です。今は18:04:38です。 受信したメッセージは 26回目のメッセージ送信です。今は18:00:42です。 です。 キューのメッセージ数は 5 です。 26回目のメッセージ受信です。今は18:04:39です。 受信したメッセージは 24回目のメッセージ送信です。今は18:00:40です。 です。 キューのメッセージ数は 5 です。 27回目のメッセージ受信です。今は18:04:40です。 受信したメッセージは 25回目のメッセージ送信です。今は18:00:41です。 です。 キューのメッセージ数は 14 です。 28回目のメッセージ受信です。今は18:04:41です。 受信したメッセージは 17回目のメッセージ送信です。今は18:00:33です。 です。 キューのメッセージ数は 6 です。 29回目のメッセージ受信です。今は18:04:42です。 受信したメッセージは 19回目のメッセージ送信です。今は18:00:35です。 です。 キューのメッセージ数は 9 です。 30回目のメッセージ受信です。今は18:04:43です。 受信したメッセージは 27回目のメッセージ送信です。今は18:00:43です。 です。 キューのメッセージ数は 13 です [ec2-user@ip-10-0-0-127%]$ [ec2-user@ip-10-0-0-127%]$
ちょっと見づらい表示になってしまったが、表にまとめると以下のような結果になった。
受信回数 | 受信時刻 | 何回目の送信メッセージを受信したか | ApproximateNumberOfMessages |
---|---|---|---|
1回目 | 18:04:12 | 3回目 | 29 |
2回目 | 18:04:13 | 4回目 | 30 |
3回目 | 18:04:14 | 13回目 | 28 |
4回目 | 18:04:15 | 1回目 | 26 |
5回目 | 18:04:16 | 15回目 | 29 |
6回目 | 18:04:17 | 6回目 | 29 |
7回目 | 18:04:18 | 20回目 | 30 |
8回目 | 18:04:20 | 21回目 | 24 |
9回目 | 18:04:21 | 7回目 | 21 |
10回目 | 18:04:22 | 10回目 | 21 |
11回目 | 18:04:23 | 22回目 | 24 |
12回目 | 18:04:24 | 30回目 | 26 |
13回目 | 18:04:25 | 14回目 | 18 |
14回目 | 18:04:26 | 8回目 | 19 |
15回目 | 18:04:27 | 9回目 | 21 |
16回目 | 18:04:28 | 2回目 | 23 |
17回目 | 18:04:29 | 5回目 | 28 |
18回目 | 18:04:30 | 28回目 | 15 |
19回目 | 18:04:31 | 11回目 | 19 |
20回目 | 18:04:32 | 12回目 | 13 |
21回目 | 18:04:34 | 23回目 | 18 |
22回目 | 18:04:35 | 29回目 | 15 |
23回目 | 18:04:36 | 16回目 | 11 |
24回目 | 18:04:37 | 18回目 | 11 |
25回目 | 18:04:38 | 26回目 | 5 |
26回目 | 18:04:39 | 24回目 | 5 |
27回目 | 18:04:40 | 25回目 | 14 |
28回目 | 18:04:41 | 17回目 | 6 |
29回目 | 18:04:42 | 19回目 | 9 |
30回目 | 18:04:43 | 27回目 | 13 |
こうして確認してみると、見事に順番がバラバラだった。受信と送信の順序が一致したのは30回中2回だけだった。「順序を保証しない」というから「多少ずれることもあるのかな?」くらいに思っていたが、「ほぼランダム」と言った方がしっくりくるような結果で意外だった。今回たまたま極端にずれたのだろうか?
また、ApproximateNumberOfMessagesは減ったが、送信時同様、キレイな減り方はしなかった。
なお、先述した通り、受信してもキューからメッセージが削除されるわけではないので、少し時間を空けてから再度キューの数を確認すると、想定通り30と表示された。
[ec2-user@ip-10-0-0-127%]$ date Sat Jun 12 18:09:32 UTC 2021 [ec2-user@ip-10-0-0-127%]$ [ec2-user@ip-10-0-0-127%]$ [ec2-user@ip-10-0-0-127%]$ aws sqs get-queue-attributes \ > --queue-url ${SQS_QUEUE_URL} \ > --attribute-names ApproximateNumberOfMessages \ > --query 'Attributes.ApproximateNumberOfMessages' \ > --output text 30 [ec2-user@ip-10-0-0-127%]$
一時ファイルの確認
受信自体は問題なく出来たので、受信メッセージを格納した一時ファイルがちゃんと存在するか確認する。
[ec2-user@ip-10-0-0-127%]$ ls ./tmp-handson-cli-sqs/ 2021-06-12-handson-cli-sqs-novice-queue.json handson-cli-sqs-novice-queue-16.json handson-cli-sqs-novice-queue-22.json handson-cli-sqs-novice-queue-29.json handson-cli-sqs-novice-queue-7.json handson-cli-sqs-novice-queue-10.json handson-cli-sqs-novice-queue-17.json handson-cli-sqs-novice-queue-23.json handson-cli-sqs-novice-queue-2.json handson-cli-sqs-novice-queue-8.json handson-cli-sqs-novice-queue-11.json handson-cli-sqs-novice-queue-18.json handson-cli-sqs-novice-queue-24.json handson-cli-sqs-novice-queue-30.json handson-cli-sqs-novice-queue-9.json handson-cli-sqs-novice-queue-12.json handson-cli-sqs-novice-queue-19.json handson-cli-sqs-novice-queue-25.json handson-cli-sqs-novice-queue-3.json handson-cli-sqs-novice-queue-13.json handson-cli-sqs-novice-queue-1.json handson-cli-sqs-novice-queue-26.json handson-cli-sqs-novice-queue-4.json handson-cli-sqs-novice-queue-14.json handson-cli-sqs-novice-queue-20.json handson-cli-sqs-novice-queue-27.json handson-cli-sqs-novice-queue-5.json handson-cli-sqs-novice-queue-15.json handson-cli-sqs-novice-queue-21.json handson-cli-sqs-novice-queue-28.json handson-cli-sqs-novice-queue-6.json [ec2-user@ip-10-0-0-127%]$ [ec2-user@ip-10-0-0-127%]$ cat ./tmp-handson-cli-sqs/handson-cli-sqs-novice-queue-15.json { "Messages": [ { "MessageId": "14dd0d6e-9610-421a-9701-2e02e35d594c", "ReceiptHandle": "AQEBvvqm5ra499xjlsBW0ljchmxtHbBs7485HxIjhXbQ2JJw3ev/rFAT/GQqboUaIvLl+y6an6hyiKA5ww8WEOIqCdDJBKUYIb4r9Q07pY6jpYNbTwb3vrJL4dFFAzAYSqN2WRtIyj5zVg88V/b3w9OTqNjclZal6YzsXonLAiOUqfgiIWhe4+1xkfEOma04bUEJUKp6IOxan9L8UocXd4JO9GtUQ1ZXqN+uTQ+dzC9KP7TAAQGfuYM9V1TIRlwYGQnLrXllbho1OPMFYThD7nQMSKC1wl0491try1Btd9sSrfdNwHHk/A4SN4Y8xZBq5NM1a4ya32+9V1TmkDqr89SvFtLoutlTwVgQDSA6ApyYVVVEINEJGBg3APWNkrNk7HVS4uVKvbtkP1voINCbMAnJmIvXWqfkNz4LPeL8P9ug01g=", "MD5OfBody": "14ce526cc7ccda226024934d5f854684", "Body": "9回目のメッセージ送信です。今は18:00:25です。" } ] } [ec2-user@ip-10-0-0-127%]$
ちゃんとファイルは存在したし、メッセージもちゃんと入っているようで一安心。
メッセージを見ると、ReceiptHandleというやたら長い文字列があるが、今回はメッセージを削除する際にこれを指定する。
メッセージの削除
送受信が問題なく出来たので、30個分のメッセージを削除する。削除もスクリプトで実施する。
削除用スクリプト
#!/bin/bash SQS_QUEUE_NAME="handson-cli-sqs-novice-queue" SQS_QUEUE_URL=$(aws sqs get-queue-url \ --queue-name ${SQS_QUEUE_NAME} \ --output text) DIR_SQS_MESSAGE="${HOME}/environment/tmp-handson-cli-sqs" for ((i=1; i<=30; i++)) do FILE_SQS_MESSAGE="${DIR_SQS_MESSAGE}/${SQS_QUEUE_NAME}-${i}.json" echo "${i}回目のメッセージ削除です。今は$(date +%H:%M:%S)です。" SQS_MESSAGE_RECEIPT_HANDLE=$(cat ${FILE_SQS_MESSAGE} | jp.py 'Messages[].ReceiptHandle' | sed 's/[]\"\[]//g') \ && echo ${SQS_MESSAGE_RECEIPT_HANDLE} aws sqs delete-message --queue-url "${SQS_QUEUE_URL}" --receipt-handle ${SQS_MESSAGE_RECEIPT_HANDLE} SQS_MESSAGE_NUMBER="キューのメッセージ数は \ $(aws sqs get-queue-attributes \ --queue-url ${SQS_QUEUE_URL} \ --attribute-names ApproximateNumberOfMessages \ --query 'Attributes.ApproximateNumberOfMessages' \ --output text) \ です。" \ && echo ${SQS_MESSAGE_NUMBER} done
受信時に作成した一時ファイルからReceiptHandleの値を抜き出し、aws sqs delete-message
コマンドでキューのURLとReceiptHandleを指定してメッセージを削除する。(メッセージ毎に一時ファイルを分けていたのは、その方がReceiptHandleを抜き出しやすそうだったため。)
また、今回もしつこくApproximateNumberOfMessagesの値を表示させる。今回はキューからメッセージを削除するので、値はドンドン減っていくのではないだろうか。
実際に削除してみた
[ec2-user@ip-10-0-0-127%]$ sh Message_delete.sh 1回目のメッセージ削除です。今は18:12:53です。 AQEBPJze/hVJusVhMW1qezwrPBj+uP9ZS1yymJEDMepsYTNMrLxOR7uqN0ihCfSSgOE7c1k7wg06YzJ6XvyVyWSWdZFbu3sZ+ZW5maqMR8Af5v47ts7CK9FWItVFB3BcjcRXW1hdYFSQjhPU30b27Ux0T+/AgmTrWgUhzwley1/IOm4fkaXgJMS4bVPKezU0q79KGelXr3x8avoOGhb4Z15hjQh6d2l4YSW1rE5diDl557iiQBWMDMT1P3p0x3ppY7z65Vt1oTGmORV7XO/u/W0CYIfpDxUVxk+wo7AuyeZcrzKmfyw8NSBGIEzfLMsKocoLUwzcNgxq6Q+oRYrNrFiFq/lyf3tCUUwhRqdAqDrQ6sd278nXQemxt63f1hzpuxcLnt4Ri2TNRS13z8IlRIpiQPY32Ol1tHlsmJW094JxmEs= キューのメッセージ数は 29 です。 2回目のメッセージ削除です。今は18:12:54です。 AQEBoB+hkt853aeqST1xsAERiO0Alu6g7jwUkE5JeRneSkgwWpA699LngmxqEBKf6FV1DWn8nvA38aaoyfaViV9yxj4C5/Snr6bi/KKxpL06tXFdrNZONh83pQIcDG5UFWNXEF1FAAKH2Avxh00KiHtLH6mnpJ/jPiAwo6HMMXVtgWWzpKY36rMjCJa0hAl/Qk176FX+Qlsk34+2qlra6wihdyakwfhpqtQ7E22JfBjlcYWWcvsUjmX6hNbYQACi+CIZHMA7WrDBTFsrjzLWj0wToT6c/beF/uMNNCe4jWtx5MHda95IQqtXhSrKefieMkrDVimX3qwpdmorl5ekA6mk/tfHBpfbsD0dsP1xWU0QwyPIpo/b++5ptGlbRviu/IAsQd4pz1goYqL4XykeR12X+8qJUdGTZ7SQiK2vIVT2Zl0= キューのメッセージ数は 30 です。 3回目のメッセージ削除です。今は18:12:55です。 AQEBJ+FMrXQewt3Duf9B1HzvKBtH4GIe7iCxrBKSG3SOGWHfvy6ciwvfzEtN8OWrDpK3iZsEOZSK3HCOB+PLjS70dMoWxVnThf8Xg5OXBMRlumf/s0Z3U7x8ZlfCR0jItMpRCvURkjxFKROVgJMwZMdeNQ1r3Y/0r/9B32ckMbrkxMg880N+g7xxoQ6sWe0jVjrfMi15UfP6nJrAzPmcTqPi8LdETnY7w0IE5CrZscC3lPIn4TPXqns2QWnM55Gq1NXTzf2UEZP7YmORx213WavwAIwYhZumseJaUaiEYhQkv2T9eevp4+UqfpaEqjal+7e5xna7hyzB3L1nn0PM5v5x6yOzBBQvMROAddV+sJ2TyvDa/9ABMQAxnhaum0Vrd4jya0K3jlcbzmrpF1v3dkYNdPQqybcUTYmHQEW40QJgb6M= キューのメッセージ数は 29 です。 -------中略------- 28回目のメッセージ削除です。今は18:13:22です。 AQEBVubFV8H/oQ3TYKeKhdk9pCO+f2KFdCeasVoGcj6vKhIIXb8cCm8FXiHBb+x9Ef3GEMXscH8NR20DDa2iQdglMzcVvuWkgzQ4DwfaA0qVdirpXj0OIX5tvuYLx6375eBGLObat3FOr9Emyc1bTvRu5QuXvyUK83ECoxnlqJh2hhqJEtMPuyg+n34deDfqNXUL9xNR3StDXRPz5ZaE9oJ2ic2XC5ELlqR5A7r7I2OGzD3UOzLF+CSpxbO9/KqrkOXWDZ0zcWLxYQEqg+WvrOFJpPh8mOjvWT91QAoaBO0uWGrwbxCx/UMNIMus6sTGp+rc/AZad6hHUuuXdcKigKsA22m0WBvsBnlMcplm2Rllo7Jcteuij7hSS2kYXjEJAe/5xbAhKC9O+GfEihUAM25QLXX5D/vLagZ028YZeYFAAns= キューのメッセージ数は 4 です。 29回目のメッセージ削除です。今は18:13:23です。 AQEBFHWzCcY2bUBwkDKSrDvg7XSsIHJ1OAbiacEPa2jfSV6lUFhkDBfnHTdrpspmzn7TEJ57voH2L2E1AHI9WPENn0YUZc7TMZx7kkM42muIy9nNxvZNP8zAfnj1sNNCpdvUsku6RyIR/Rv9KDz27m3nBtgaiTjM+JV1GmG7KWCnJ5XAyXWJsxHihGs/kw3aBMLhBojUSjEb0/96ZzvN2A+yDQAfsvie1XmydB6tN1M0Iygy5r1Jx6HRli9EU9bx+4oBWTjJ11Bj0YmadfSBUR3g+blnJNsUdMuq3bOEKrk64DiZSNOHy2E3xjo6C3PJ8EZpnDH6aGL1rFtQSslAFdl5qNdj5JibPJT9dP0UutEhbeUBG0DI9vu573IJF+B1LpeY1sMWk7C9vqfsmHsV8Uo+TWjG4/D8Zir0MZjjiBG4FAQ= キューのメッセージ数は 12 です。 30回目のメッセージ削除です。今は18:13:24です。 AQEB6vCTH+YGzL8eLisOjiHSJm/NoHCEmpFYcsBEypeFtW/xPjnuV53rReiuvaZlbq7SFcNs0YI5Sd5stVGSGI47aWRYx+osVCNHjXCe+K1fY+S+g47zrW0eZM1A+AmSTZPobfpl0C2YsQXyGonuEoKwBKS7hCHezdkX+bN5FiAXLbnd1wgJ+LG56aFXlDSWXhtOJR7ai7czbZT3hr6kbi3lucpml4ekHBUL6YooLVYDyh52DGFftVhGooxZJsbAo58bIj7L+6dTLMJfDqD6Ynwa3rqd7ERrewGqgTseZ6bpi4ubiLIXbeC1LVQtYWTBeRSl1TqodCMNBG6BukJKGmAslsJwlKnu8yWoZaackfZw0jn738na8rW3bxUg8rZtrkzwi3GrOxQ6iNOdrPgl4vgSOvDBYl9IiBnyx9Kd1NBdAfY= キューのメッセージ数は 1 です。 [ec2-user@ip-10-0-0-127%]$ [ec2-user@ip-10-0-0-127%]$ [ec2-user@ip-10-0-0-127%]$ [ec2-user@ip-10-0-0-127%]$ [ec2-user@ip-10-0-0-127%]$ aws sqs get-queue-attributes \ > --queue-url ${SQS_QUEUE_URL} \ > --attribute-names ApproximateNumberOfMessages \ > --query 'Attributes.ApproximateNumberOfMessages' \ > --output text 0 [ec2-user@ip-10-0-0-127%]$
問題なく削除できた。ReceiptHandleがちゃんと取得できているか分かるようにecho
で表示させていたが、文字列が多いので出さない方が良かったかな。あと、一時ファイルの削除もスクリプトに組み込めば良かった。
ApproximateNumberOfMessagesの値については、結局今回もキレイに減ることはなかった。
おわりに
ApproximateNumberOfMessagesについては改めて確認が必要なものの、標準キューの順序が想像以上にバラバラなのが確認できたので良かった。あと、スクリプトを書くのは楽しい。