本ページは、AWS に関する個人の勉強および勉強会で使用することを目的に、AWS ドキュメントなどを参照し作成しておりますが、記載の誤り等が含まれる場合がございます。

最新の情報については、AWS 公式ドキュメントをご参照ください。

フルマネージドのキューイングサービスです。

【AWS Black Belt Online Seminar】Amazon Simple Queue Service(YouTube)(58:54)

sqs

SQS サービス概要

SQS ドキュメント

SQS よくある質問

SQS の料金

sqs-queue

違いは、アプリケーション間連携を疎結合で実現。「Amazon SQS」をグラレコで解説 の図が分かりやすいです。

sns-queuetype

メッセージグループ ID の使用

メッセージ送信時に MessageGroupId を指定することで、メッセージをグループ化できます。

FIFO キューでは、グループ単位で順序が保証されますが、異なるグループ間では順序は守られません。

aws sqs send-message \
    --queue-url ${QUEUE_URL} \
    --message-body '{"message": "test"}' \
    --message-group-id Group1 \

メッセージ重複排除 ID の使用

FIFO キューで指定することで、5分間 は同一の重複排除 ID ID のメッセージが受け付けられないようになるという機能です。

aws sqs send-message \
    --queue-url ${QUEUE_URL} \
    --message-body '{"message": "test"}' \
    --message-group-id Group1 \
    --message-deduplication-id "Deduplication${i}"

キューの属性で、コンテンツに基づく重複排除 のオプションを ON にした場合は、重複排除 ID の事前指定は不要になります。

sqs-duplicate-contents

可視性タイムアウト

sqs-visibilitytimeout

SQS ではメッセージを取得しても自動で削除されることはありません。コンシューマー側が処理済みとして削除するか、メッセージの保持期間が過ぎて削除されるかです。 複数のコンシューマーがメッセージを読み取った場合、重複して処理されてしまう可能性があるため、可視性タイムアウトという処理中のメッセージが他のコンシューマーからは取得できなくする機能があります。0 秒から 12 時間が指定できます。デフォルト値は 30 秒です。 コンシューマーは、可視性タイムアウトの時間に取得したメッセージを削除する必要があります。可視性タイムアウトの時間が過ぎると、メッセージを削除できなくなり、他のコンシューマーが取得できる状態になります。

メッセージの処理時間が不明な場合、可視性タイムアウトを 1 分毎に 2 分間延長することもできます。 タイムリーな方法でのメッセージの処理メッセージの可視性タイムアウトの変更

標準キューの場合は、メッセージの順序保証がないキューのため、他のコンシューマーがアクセスした場合、次のキューを取り出すことができます。 FIFO キューの場合は、メッセージの順序が重要であるため、可視性タイムアウト時間が過ぎるか、メッセージが削除されるまで、次のキューを取得することが出来ません。ただし、他のメッセージグループからはメッセージを取得することが出来ます。

遅延キュー

プロデューサー側からキューに新しいメッセージが送信された後に、指定した時間が経過してからコンシューマー側にメッセージが表示されるようにする設定です。0 秒から 15 分までの間を指定できます。

sqs-delay

メッセージタイマー

メッセージタイマー

キュー全体に指定する遅延キュー以外に、メッセージ個別に設定できるメッセージタイマーという機能があります。遅延キューと同時に指定された場合、メッセージに設定されたメッセージタイマーのほうが優先されます。0 秒から 15 分までの間を指定できます。

aws sqs send-message \
    --queue-url ${QUEUE_URL} \
    --message-body '{"message": "test"}' \
    --delay-seconds 900

メッセージ取得までの待機時間です。0 秒から 20 秒まで指定することができます。0 秒を指定すると、ショートポーリングになります。

sqs-waitseconts

ショートポーリングとロングポーリング

ショートポーリングとロングポーリング

キューに登録されたメッセージは明示的に削除処理を行われない限りデフォルトで 4 日間保持、1 分から 14 日設定できます。

sqs-message-retention

コンシューマーアプリケーションに障害があった場合、この保持期間内に復旧できれば、キューに貯まったメッセージを処理することができます。しかし、期間を過ぎてしまうと処理することが出来なくなってしまうので注意が必要です。

キューのメッセージサイズで、1KB から 256KB の範囲を指定できます。デフォルト値は 256 KB です。

sqs-maxsize

256 KB を超えるメッセージを送信したい場合、「Java 用 SQS 拡張ライブラリ」と「S3」を利用します。これによって「2 GB」までのメッセージを扱えるようになります。

Amazon S3 を使用した大量の Amazon SQS メッセージの管理

デッドレターキュー

メッセージの受信者に正常に配信できなかった場合に格納する SQS のキューを指定できます。 これにより、エラーの分析や、再処理などを行うことができます。

sqs-dlq

AWS KMS を利用して、トピック内のメッセージを暗号化することができます(サーバ側の暗号化(SSE)) 暗号化されたメッセージは、配信時に自動的に復号されて配信されます。

指定できるキーは、デフォルトの alias/aws/sqs と 作成済みの CMK を指定できます。

sqs-sse

sqs-overview