「リクエスト数課金」+「転送量課金」
リクエスト数課金: 月間で100万リクエストまで無料。以降、100万リクエストごとに$0.5。
転送量課金: INは無料。OUTは$0.9/GB。同じリージョンなら無料
https://{REGION_ENDPOINT}/queue.|api-domain|/{YOUR_ACCOUNT_NUMBER}/{YOUR_QUEUE_NAME}
例: https://sqs.us-east-2.amazonaws.com/123456789012/MyQueue
(標準キュー)
例: https://sqs.us-east-2.amazonaws.com/123456789012/MyQueue.fifo
(FIFOキュー)
キューに対するAPIの操作のエンドポイントとして利用される
payload は JSON, XML, text のみ (バイナリは使えない)
payload に不正な文字コードがある場合、rejectされる
1通のメッセージの最大サイズは 256 KB
バッチ処理できるメッセージ数は最大 10
バッチ処理できる最大サイズは全メッセージ合算で 256 KB
バッチ処理を前提にすると、1通のメッセージの最大サイズは 25.6 KB
1秒あたり最大300回のAPIコール (バッチで10通処理しても最大3000トランザクション)
キュー中の同一MessageGroupIdが持てるインフライトメッセージ数は最大 20,000
インフライトメッセージ: receiveされたがdeleteはされていないメッセージ
キューに保存可能な期間は最大で7日間
メッセージ単位の遅延設定はない (キュー単位のみ)
メッセージは64KB単位に1APIリクエストと計算される
80文字以内
利用可能な文字: アルファベット、数字、ハイフン、アンダースコア
FIFOの場合は末尾に .fifo
をつける
FIFOキューでは必ず重複排除が働く (設定により2通り)
ContentBasedDeduplication (コンテンツに基づく重複排除) が「有効」の場合
メッセージのpayloadから SHA-256 によって重複IDが自動的に作成され、重複検査される
ダイジェスト計算の対象は本文のみで、属性値は利用されない
送信済みメッセージとしてダイジェスト値が保存される期間は5分間 (値は変更できるかも)
保存期間(deduplication interval)を超えて同じメッセージが送信された場合は、送信が成功する
メッセージが削除されても、保存期間中は重複IDは保存され続ける
ContentBasedDeduplication (コンテンツに基づく重複排除) が「無効」の場合
送信時に MessageDeduplicationId (String) としてユーザが明示する
MessageDeduplicationId がない場合はエラーになる
https://sqs.us-east-2.amazonaws.com/123456789012/MyQueue
?Action=SendMessage&MessageBody=Your%20message%20text
&Version=2012-11-05
&AUTHPARAMS
POST /123456789012/MyQueue HTTP/1.1
Host: sqs.us-east-2.amazonaws.com
Content-Type: application/x-www-form-urlencoded
Action=SendMessage
&MessageBody=Your+Message+Text
&Expires=2020-10-15T12%3A00%3A00Z
&Version=2012-11-05
&AUTHPARAMS
https://sqs.us-east-2.amazonaws.com/
?Action=ListQueues
&QueueNamePrefix=M
&Expires=2020-04-18T22%3A52%3A43PST
&Version=2012-11-05
&AUTHPARAMS
<ListQueuesResponse >
<ListQueuesResult >
<QueueUrl >https://sqs.us-east-2.amazonaws.com/123456789012/MyQueue</QueueUrl >
</ListQueuesResult >
<ResponseMetadata >
<RequestId >725275ae-0b9b-4762-b238-436d7c65a1ac</RequestId >
</ResponseMetadata >
</ListQueuesResponse >
キュー自体を削除する (RDBの "DROP TABLE" 相当)
キュー内のメッセージを全て削除する (RDBの "DELETE FROM TABLE" 相当)
キューとその属性は残るため、キューを引き続き使用できる
削除に最大1分かかるため、API実行後は1分間待機してから、キューを使用すること
AWS.SimpleQueueService.PurgeQueueInProgress: Only one PurgeQueue operation on <QUEUE_NAME> is allowed every 60 seconds.
メッセージの送信 (SendMessage, SendMessageBatch)
https://sqs.us-east-2.amazonaws.com/123456789012/MyQueue/
?Action=SendMessage
&MessageBody=This+is+a+test+message
&MessageAttribute.1.Name=my_attribute_name_1
&MessageAttribute.1.Value.StringValue=my_attribute_value_1
&MessageAttribute.1.Value.DataType=String
&Expires=2020-05-05T22%3A52%3A43PST
&Version=2012-11-05
&AUTHPARAMS
<SendMessageResponse >
<SendMessageResult >
<MD5OfMessageBody >fafb00f5732ab283681e124bf8747ed1</MD5OfMessageBody >
<MD5OfMessageAttributes >3ae8f24a165a8cedc005670c81a27295</MD5OfMessageAttributes >
<MessageId >5fea7756-0ea4-451a-a703-a558b933e274</MessageId >
</SendMessageResult >
<ResponseMetadata >
<RequestId >27daac76-34dd-47df-bd01-1f6e873584a0</RequestId >
</ResponseMetadata >
</SendMessageResponse >
2021-01-07T01:20:51.237055Z ERROR - send_message: [403]
HTTP::Headers{
"x-amzn-RequestId" => "7c9438e4-b40d-589f-a4e1-6094d03e631e",
"Date" => "Thu, 07 Jan 2021 01:20:51 GMT",
"Connection" =>"close",
"Content-Type" => "text/xml",
"Content-Length" => "273"}
<?xml version="1.0" encoding="UTF-8"?>
<ErrorResponse xmlns="http://queue.amazonaws.com/doc/2012-11-05/">
<Error>
<Type>Sender</Type>
<Code>RequestThrottled</Code>
<Message>Request is throttled</Message>
<Detail />
</Error>
<RequestId>7c9438e4-b40d-589f-a4e1-6094d03e631e</RequestId>
</ErrorResponse>
メッセージの受信 (ReceiveMessage)
https://sqs.us-east-2.amazonaws.com/123456789012/MyQueue/
?Action=ReceiveMessage
&MaxNumberOfMessages=5
&VisibilityTimeout=15
&AttributeName=All
&Expires=2020-04-18T22%3A52%3A43PST
&Version=2012-11-05
&AUTHPARAMS
<ReceiveMessageResponse >
<ReceiveMessageResult >
<Message >
<MessageId >5fea7756-0ea4-451a-a703-a558b933e274</MessageId >
<ReceiptHandle >
MbZj6wDWli+JvwwJaBV+3dcjk2YW2vA3+STFFljTM8tJJg6HRG6PYSasuWXPJB+Cw
Lj1FjgXUv1uSj1gUPAWV66FU/WeR4mq2OKpEGYWbnLmpRCJVAyeMjeU5ZBdtcQ+QE
auMZc8ZRv37sIW2iJKq3M9MFx1YvV11A2x/KSbkJ0=
</ReceiptHandle >
<MD5OfBody >fafb00f5732ab283681e124bf8747ed1</MD5OfBody >
<Body >This is a test message</Body >
<Attribute >
<Name >SenderId</Name >
<Value >195004372649</Value >
</Attribute >
<Attribute >
<Name >SentTimestamp</Name >
<Value >1238099229000</Value >
</Attribute >
<Attribute >
<Name >ApproximateReceiveCount</Name >
<Value >5</Value >
</Attribute >
<Attribute >
<Name >ApproximateFirstReceiveTimestamp</Name >
<Value >1250700979248</Value >
</Attribute >
</Message >
</ReceiveMessageResult >
<ResponseMetadata >
<RequestId >b6633655-283d-45b4-aee4-4e84e0ae6afa</RequestId >
</ResponseMetadata >
</ReceiveMessageResponse >
https://sqs.us-east-2.amazonaws.com/123456789012/MyQueue/
?Action=DeleteMessage
&ReceiptHandle=MbZj6wDW...
&Expires=2020-04-18T22%3A52%3A43PST
&Version=2012-11-05
&AUTHPARAMS
<DeleteMessageResponse >
<ResponseMetadata >
<RequestId >b5293cb5-d306-4a17-9048-b263635abe42</RequestId >
</ResponseMetadata >
</DeleteMessageResponse >
デッドレターキューと MaximumReceives
receive後、deleteされないとリドライブとなり、receive回数が増加する
receive回数がMaximumReceivesを超えると、メッセージは自動的にデッドレターキューに移動する
consoleでメッセージを参照するとこのreceive回数が増える
例えば、MaximumReceivesが3のキューに対して、処理前にconsoleから3回メッセージを参照してしまうと、処理されずにデッドレターになる