AWS CLI + SQS の send/receive 操作
AWS CLI + SQS
概要
- aws cli を使用して、SQSキューにメッセージを送受信する確認を行った際の備忘録です。
- Amazon SQS(Amazon Simple Queue Service) は、フルマネージド型のメッセージキューイングサービスです。キューイングはいわゆる待ち行列のことです。
- キューイングを使用することで、AWS上の分散アプリケーションが疎結合で構成できます。アプリケーションがこれから処理する内容を一度キューに溜めることができ、順次任意のタイミング(非同期)に取り出して処理ができます。
キューの作成
- スタンダードのキューを作成します。
- キューを作成後、キューが使用できるようになるまで少なくとも 1 秒以上待つ必要があります。
niikawa@niikawa1:~$ QUEUE_NAME=niikawa-test-queue
niikawa@niikawa1:~$ aws sqs create-queue --queue-name ${QUEUE_NAME} --region ap-northeast-1
{
"QueueUrl": "https://ap-northeast-1.queue.amazonaws.com/111111111111/niikawa-test-queue"
}
- FIFO(先入れ先出し)のキューを作成します。キューの名前に
.fifo
を付けます。
niikawa@niikawa1:~$ aws sqs create-queue --queue-name ${QUEUE_NAME}.fifo --attributes FifoQueue=true --region ap-northeast-1
{
"QueueUrl": "https://ap-northeast-1.queue.amazonaws.com/111111111111/niikawa-test-queue.fifo"
}
キューの一覧
- queue-name-prefixオプションを指定すると、指定した文字列で始まる名前のキューのみが返されます。
niikawa@niikawa1:~$ aws sqs list-queues --queue-name-prefix ${QUEUE_NAME} --region ap-northeast-1
{
"QueueUrls": [
"https://ap-northeast-1.queue.amazonaws.com/111111111111/niikawa-test-queue",
"https://ap-northeast-1.queue.amazonaws.com/111111111111/niikawa-test-queue.fifo"
]
}
キューの属性を確認する
- get-queue-attributesオプションを指定すると、キューのすべてあるいは一部の属性を返します。
- ApproximateNumberOfMessages の値から、メッセージの処理待ちがいくつあるか確認できます。
niikawa@niikawa1:~$ QUEUE_URL="https://ap-northeast-1.queue.amazonaws.com/111111111111/niikawa-test-queue"
niikawa@niikawa1:~$ aws sqs get-queue-attributes --queue-url ${QUEUE_URL} --attribute-names All --region ap-northeast-1
{
"Attributes": {
"QueueArn": "arn:aws:sqs:ap-northeast-1:111111111111:niikawa-test-queue",
"ApproximateNumberOfMessages": "0",
"ApproximateNumberOfMessagesNotVisible": "0",
"ApproximateNumberOfMessagesDelayed": "0",
"CreatedTimestamp": "1664203053",
"LastModifiedTimestamp": "1664203053",
"VisibilityTimeout": "30",
"MaximumMessageSize": "262144",
"MessageRetentionPeriod": "345600",
"DelaySeconds": "0",
"ReceiveMessageWaitTimeSeconds": "0",
"SqsManagedSseEnabled": "true"
}
}
niikawa@niikawa1:~$ aws sqs get-queue-attributes --queue-url ${QUEUE_URL} --attribute-names ApproximateNumberOfMessages --region ap-northeast-1
{
"Attributes": {
"ApproximateNumberOfMessages": "0"
}
}
メッセージの送信
- 作成したスタンダードのキューにメッセージを送信します。ApproximateNumberOfMessages の値が 1に変わりました。
niikawa@niikawa1:~$ aws sqs send-message --queue-url ${QUEUE_URL} --message-body "SQS Test1" --region ap-northeast-1
{
"MD5OfMessageBody": "7f280e3e98acc75e845d722277584fac",
"MessageId": "b90f5a71-a098-49a5-8b28-b34ddbae56b0"
}
niikawa@niikawa1:~$ aws sqs get-queue-attributes --queue-url ${QUEUE_URL} --attribute-names ApproximateNumberOfMessages --region ap-northeast-1
{
"Attributes": {
"ApproximateNumberOfMessages": "1"
}
}
- 次は、作成したFIFOのキューにメッセージを送信します。FIFO の場合、MessageGroupId オプションの指定は必須です。同じMessageGroupId の場合にFIFOとして処理され、異なる場合は順序の保証はありません。
- MessageGroupId は128文字まで、英数字および記号(
!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~
)が使用可。
- MessageGroupId は128文字まで、英数字および記号(
- FIFO の場合、MessageDeduplicationId オプションの指定が可能です。送信されたメッセージの重複排除に使用可能です。同じメッセージMessageDeduplicationId (重複除外 ID)で送信されたメッセージは正常に受信しますが、5 分間の重複除外間隔においては配信されません。
- MessageDeduplicationId (重複除外 ID)は、個別のMessageGroupId ではなく、キュー全体に適用されます。
- MessageDeduplicationId は128文字まで、英数字および記号(
!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~
)が使用可。
niikawa@niikawa1:~$ GROUP_ID=group1
niikawa@niikawa1:~$ DEDUP_ID=dedup1
niikawa@niikawa1:~$ aws sqs send-message --queue-url ${QUEUE_URL}.fifo --message-group-id ${GROUP_ID} --message-deduplication-id ${DEDUP_ID} --message-body "SQS Test2" --region ap-northeast-1
{
"MD5OfMessageBody": "ad4955e0fd7d49e133c9442e50b61c45",
"MessageId": "37aa65d0-6468-42a5-a86d-71301611e8bb",
"SequenceNumber": "18872780435158256128"
}
niikawa@niikawa1:~$ aws sqs get-queue-attributes --queue-url ${QUEUE_URL}.fifo --attribute-names ApproximateNumberOfMessages --region ap-northeast-1
{
"Attributes": {
"ApproximateNumberOfMessages": "1"
}
}
メッセージの受信
- 指定されたキューから 1 つまたは複数 (最大 10) のメッセージを取得します。
niikawa@niikawa1:~$ aws sqs receive-message --queue-url ${QUEUE_URL} --region ap-northeast-1
{
"Messages": [
{
"MessageId": "b90f5a71-a098-49a5-8b28-b34ddbae56b0",
"ReceiptHandle": "AQEBQcMw6bDnZVuBlfA33c5a7Lgh+mscuEv7i2BpoxpBH8HZF6VGffU9BnYf4jggFR5sBIKqPdXloJq0yxg+oqYBtPQa6ZybAhls4RldbIMP5QxVwT+oGiuXerDiEW6Jk1dthr4a2KKSiw6xf78jO9WfLp8j8jfE66UFhCseR0mrsglcmEex89dMKXm2ASHL07Ok4qztg2kVfLZgp862aQJiztFxORy9hPPPH6V6Lr/r7pKf/y1BeDpjb/SHaxuw7Uxzu7bzLjItcgYxFPBhMihiLQOavg3jAvqMTTg8BUtKPH9vG1uleQxzHm0DD7A/3Z1xNHw9nNVjqM5KQx42iAfh1/auDrsAVvQ863J2q1B4xZw6pCUuKXNPUh8sd4ZgSRa16Ph6wGGWG/hBVuF7i8M5ZK1IiDGHrzeG5J8IdMUj8HE=",
"MD5OfBody": "7f280e3e98acc75e845d722277584fac",
"Body": "SQS Test1"
}
]
}
niikawa@niikawa1:~$ aws sqs receive-message --queue-url ${QUEUE_URL}.fifo --region ap-northeast-1
{
"Messages": [
{
"MessageId": "37aa65d0-6468-42a5-a86d-71301611e8bb",
"ReceiptHandle": "AQEB1CQMCu6V8nC/Gs7BJmhfRAjWwYW/EESkRSHBLNiYnPIAW8EyiN2vFh8VIiUfZ1/G2MYF7LWI5Qj+rcN7L7KvH6KAW5FA7fEyRrShr01+nECcqQxxZe3wQMv3M3GhZIgNL6QFWuVXH8+doZBaZDOxJGmIv6YK250xdAJ5RpYfj2DZVf0f5I8WunrjDdoHXbux32FahHwJirmdt8s2X0K+Y9KmBYfD2ulp84+jlHrffNtJcPgkDPBPPeUQvU/rGuWS9AAS7q2/fghwXF8+Za4T2r+HvYiZAGA6daEv7zcDZ28P/RmBa/zuysdXDw3CLV7u",
"MD5OfBody": "ad4955e0fd7d49e133c9442e50b61c45",
"Body": "SQS Test2"
}
]
}
可視性タイムアウト(VisibilityTimeout)
- コンシューマーからメッセージが受信された直後は、メッセージはキューに保留されたままです。他のコンシューマーが同じメッセージを再び処理しないようにSQSには可視性タイムアウトが設定されています。
- VisibilityTimeout に指定された秒数内では、他のコンシューマーによる同じメッセージの受信と処理が防止されます。デフォルトの可視性タイムアウトは30秒です。
niikawa@niikawa1:~$ aws sqs send-message --queue-url ${QUEUE_URL} --message-body "SQS Test1" --region ap-northeast-1
{
"MD5OfMessageBody": "7f280e3e98acc75e845d722277584fac",
"MessageId": "9f6f4b1a-536e-4248-aa53-7f1fb7c9e12a"
}
niikawa@niikawa1:~$ aws sqs get-queue-attributes --queue-url ${QUEUE_URL} --attribute-names ApproximateNumberOfMessages --region ap-northeast-1
{
"Attributes": {
"ApproximateNumberOfMessages": "1"
}
}
niikawa@niikawa1:~$ aws sqs receive-message --queue-url ${QUEUE_URL} --region ap-northeast-1
{
"Messages": [
{
"MessageId": "9f6f4b1a-536e-4248-aa53-7f1fb7c9e12a",
"ReceiptHandle": "AQEBQENxFQcNH+Ui+DBucOh+wDorRjmiqeH1EUayWOU3mvfDYCRfDG6AJwYi+DID7sqqOr2Ae/DvQiv3Wt0Uu4qfgcMJ1j/+mPkMM5hDLKLWRgHscWyXQcYLvS/UK8sMc3oQBcI1v1oq9jQ2eTg99/vBHITd5QeOyHlBHKqywfrzMoxSPSSLZ6EUD5VMAoR7C5oBHr/jFEM79xIo388yk4mIEgrmoiDsT/RU9l5GHBMC3E2Y+rXrShNDPtYyF6NvnJVu0pmdFzZpWWC9WvlifPosxxvrejHSSxZwCJwiqtpfZLnYeEhmK/GbfzRflUKwxFTCL1pvr2NiiOa6C7p5FnqWzZ7NZw5/H2DnK+OpoYeNZXIDE77orCbYPcNTFdCNMayvLRwiPwC/cSStATGqXVAvQfG/hTGm8QKts1Nb2f78NJY=",
"MD5OfBody": "7f280e3e98acc75e845d722277584fac",
"Body": "SQS Test1"
}
]
}
niikawa@niikawa1:~$ aws sqs get-queue-attributes --queue-url ${QUEUE_URL} --attribute-names ApproximateNumberOfMessages --region ap-northeast-1
{
"Attributes": {
"ApproximateNumberOfMessages": "0"
}
}
** 30秒経過後 **
niikawa@niikawa1:~$ aws sqs get-queue-attributes --queue-url ${QUEUE_URL} --attribute-names ApproximateNumberOfMessages --region ap-northeast-1
{
"Attributes": {
"ApproximateNumberOfMessages": "1"
}
}