手順

作成

標準Queue

標準Queueを作成
QUEUE_NAME="my-queue"
## Queueの作成
aws sqs create-queue --queue-name ${QUEUE_NAME}

FIFOQueue

FIFOQueueを作成する場合はQueue名の最後に .fifo を付与し、属性に FifoQueue=true を指定する。

FIFOQueueを作成
QUEUE_NAME="my-queue.fifo"
## Queueの作成
aws sqs create-queue --queue-name ${QUEUE_NAME} --attributes FifoQueue=true
Note
Queue名は1-80文字

属性指定

メッセージ受信待機時間20秒(ロングポーリング設定)

ReceiveMessageWaitTimeSeconds

メッセージ受信待機時間

ReceiveMessageWaitTimeSecondsを設定(20秒)
QUEUE_NAME="my-queue.fifo"
## QueueのURL取得
QUEUE_URL=$(aws sqs get-queue-url --queue-name ${QUEUE_NAME} --output text)
aws sqs set-queue-attributes --queue-url "${QUEUE_URL}" --attributes ReceiveMessageWaitTimeSeconds=20

複数指定(メッセージ受信待機時間とロングポーリング設定とコンテンツベースの重複削除)

ReceiveMessageWaitTimeSeconds

メッセージ受信待機時間

ContentBasedDeduplication

コンテンツベースの重複削除

ReceiveMessageWaitTimeSecondsを設定(20秒)
QUEUE_NAME="my-queue.fifo"
## QueueのURL取得
QUEUE_URL=$(aws sqs get-queue-url --queue-name ${QUEUE_NAME} --output text)
aws sqs set-queue-attributes --queue-url "${QUEUE_URL}" --attributes ReceiveMessageWaitTimeSeconds=20,ContentBasedDeduplication=true
NOTE

コンテンツベースの重複削除はFIFOキューのみ。標準Queueで実行した場合以下のエラーメッセージが表示された

An error occurred (InvalidAttributeName) when calling the SetQueueAttributes operation: Unknown Attribute ContentBasedDeduplication.

デッドレターキュー指定

QUEUE_NAME="my-queue.fifo"
## QueueのURL取得
QUEUE_URL=$(aws sqs get-queue-url --queue-name ${QUEUE_NAME} --output text)
## デッドレターキュー設定(※エスケープが非常に見にくいのでjsonファイルで登録したほうがよい...)
aws sqs set-queue-attributes --queue-url "${QUEUE_URL}" --attributes "ReceiveMessageWaitTimeSeconds=20,ContentBasedDeduplication=true,RedrivePolicy=\"{\\\"deadLetterTargetArn\\\":\\\"${QUEUE_ARN}\\\",\\\"maxReceiveCount\\\":\\\"1000\\\"}\\\""

情報の取得

ARNの取得

QueueArnの取得
QUEUE_NAME="my-queue.fifo"
QUEUE_URL=$(aws sqs get-queue-url --queue-name ${QUEUE_NAME} --output text)
QUEUE_ARN=$(aws sqs get-queue-attributes --queue-url "${QUEUE_URL}" --attribute-names QueueArn --query Attributes.QueueArn --output text)
echo "${QUEUE_ARN}"

削除

Queueの削除
QUEUE_NAME="my-queue.fifo"
QUEUE_URL=$(aws sqs get-queue-url --queue-name ${QUEUE_NAME} --output text)
aws sqs delete-queue --queue-url ${QUEUE_URL}