【AWS】CLIによるAmazon SQSに対する操作メモ
キュー内のメッセージ数取得
$ aws sqs get-queue-attributes \
--queue-url {キューのURL} \
--attribute-names ApproximateNumberOfMessages
オプション名 | 概要 |
---|
–queue-url | メッセージ数を取得するキューのURL |
–attribute-names | メッセージ数を表すApproximateNumberOfMessagesを指定する |
| |
キュー内のメッセージ一覧取得
$ aws sqs receive-message \
--queue-url {キューのURL} \
--max-number-of-messages 10 \
--visibility-timeout 10 \
--wait-time-seconds 0
オプション名 | 概要 |
---|
–queue-url | メッセージ一覧を取得するキューのURL |
–max-number-of-messages | 取得するメッセージの最大数、10より大きい値は指定できない |
–visibility-timeout | 可視性タイムアウトの値、メッセージ受信後に指定した秒数間はメッセージが他のコンシューマーから見えなくなる。最大値は43,200秒(12時間) |
–wait-time-seconds | キュー内にメッセージが存在しない場合に待つ秒数、最大値は20秒 |
キューへメッセージ送信
$ aws sqs send-message \
--queue-url {キューのURL} \
--message-body {メッセージ本文} \
--message-group-id {メッセージグループID} \
--message-deduplication-id {メッセージ重複排除ID}
# 例
$ aws sqs send-message \
--queue-url https://sqs.xxxx \
--message-body '{"type":"notification","user":"alice","status":"active"}' \
--message-group-id "test" \
--message-deduplication-id "test1"
オプション名 | 概要 |
---|
–queue-url | メッセージを送信するキューのURL |
–message-body | メッセージ本文 |
–message-group-id | FIFOキュー内でメッセージ順序が保証される単位であるメッセージグループを識別するためのID |
–message-deduplication-id | メッセージを一意に識別するためのID、5分以内に同一のmessage-deduplication-idを持つメッセージがキューへ送信された場合、そのメッセージはキューに入らない。5分を超えてから送信された場合はキューへ入る |
キューからメッセージ削除
$ aws sqs delete-message \
--queue-url {キューのURL} \
--receipt-handle {識別子} \
オプション名 | 概要 |
---|
–queue-url | メッセージを削除するキューのURL |
–receipt-handle | 削除対象のメッセージを特定するための一時的な識別し、receive-messageで取得できる |
キュー内のメッセージを1つ削除するワンライナーは以下のように書ける。receive-messageで取得した識別子を変数へ保存し、delete-messageへ渡す。
bash -c 'HANDLE=$(aws sqs receive-message \
--queue-url {キューのURL} \
--max-number-of-messages 1 \
--query "Messages[0].ReceiptHandle" \
--output text) && \
aws sqs delete-message \
--queue-url {キューのURL} \
--receipt-handle "$HANDLE"'
キュー内の全てのメッセージを削除したい場合、上記の処理をメッセージ内にキューが存在している間ループすればよいので以下のように書ける。
bash -c 'while HANDLE=$(aws sqs receive-message \
--queue-url {キューのURL} \
--max-number-of-messages 1 \
--query "Messages[0].ReceiptHandle" \
--output text) && [ "$HANDLE" != "None" ]; do \
aws sqs delete-message \
--queue-url {キューのURL} \
--receipt-handle "$HANDLE"; \
done'