AWS Certified Developer – Associate(DVA) 対策として、Amazon SQSの特徴をまとめました。
Amazon SQS(Simple Queue Service)とは
Amazon SQSは、完全マネージド型のメッセージキューイングサービス。
ポイント
- キューの種類(標準キュー、FIFOキュー)の理解
- それぞれのキュー(標準キュー、FIFOキュー)でできることの理解
標準キューとFIFOキュー
標準キュートFIFOキューの比較表
項目 | 標準キュー | FIFOキュー |
---|---|---|
スループット | ほぼ無制限のAPIコールをサポート。 ユースケースとしては、リアルタイムデータストリーミングなどの大量のメッセージを素早く処理する場合 | 最大300件/秒のAPIコールをサポート バッチ処理を利用すると3,000件/秒のメッセージを処理可能。 |
メッセージの配信回数 | 少なくとも1回の配信が保証される。(2回配信されることがある) | 1回のみ配信。 |
メッセージの順序 | ベストエフォート型。メッセージを送信された順に配信しようとするが、保証はされない。 | 各メッセージ配信グループ内のメッセージを送信した順序どおりに取り出し可能。 |
・可視性タイムアウト(デフォルト30秒) ・メッセージの保持期間(デフォルト4日) ・配信遅延(デフォルト0秒) ・メッセージ受信待機時間(デフォルト0秒) ・デッドレターキュー | ||
その他の設定 | メッセージタイマー | ・コンテンツベースの重複除外 ・高スループットFIFOの有効化 |
キューの構成

- プロデューサー(送信アプリ):キューにメッセージを送信する
- コンシューマー(受信アプリ):キューからメッセージを受信する
- キュー:プロデューサーから送信されたメッセージを保存する場所。
可視性タイムアウト/ChangeMessageVisibility/DeleteMessage
- メッセージをコンシューマー(受信アプリ)が
ReceiveMessage
リクエストで取得すると、SQSはそのメッセージを「処理中」とみなして、他のコンシューマーから一時的に見えなくする期間を設定する。これが「可視性タイムアウト(Visibility Timeout)」。 - 可視性タイムアウトの時間内に処理が終わらない場合は、
ChangeMessageVisibility
リクエストで可視性タイムアウトを延長できる。また、処理が終わったメッセージはDeleteMessage
リクエストで削除する。 - 削除しない場合、「メッセージの保持期間(デフォルト4日)」の設定に従い、キューに残り続けることになり、コンシューマーから何度も取得されることになる。
ショートポーリングとロングポーリング
ReceiveMessage
リクエストでキューからメッセージを受信するときに、WaitTimeSeconds
パラメーター(メッセージ受信待機時間)を設定することができる。WaitTimeSeconds
はレスポンスを返さずにキューに利用可能なメッセージがないか待機する時間。この値が0ならショートポーリング、1~20ならロングポーリング。WaitTimeSeconds
(メッセージ受信待機時間)はキューにも設定されている(デフォルト0)し、ReceiveMessage
リクエストのWaitTimeSeconds
パラメーターで指定することもできる。
ReceiveMessageリクエストで指定できるパラメーター
MaxNumberOfMessages
:返されるメッセージの最大数。1~10の値を設定する。デフォルト1WaitTimeSeconds
:メッセージ受信待機時間。1~20の値を設定する。デフォルト0
ショートポーリング(WaitTimeSeconds=0)の動作
ReceiveMessage
リクエストをコールした時に、メッセージが見つからなくてもレスポンスを即座に返す。- いくつかのSQSサーバーをピックアップし、メッセージを検索する。
- 1度の
ReceiveMessage
リクエストですべてのメッセージが返されない場合があるが、リクエストを繰り返すことですべてのメッセージが取得される(以下の例では、Cが取得されない)
ショートポーリングの例

※キューに格納されたメッセージは複数のサーバーに分散して保存されている。
ロングポーリング(WaitTimeSeconds=1~20)の動作
ReceiveMessage
リクエストをコールした時に即座にレスポンスを返さず、WaitTimeSeconds
で指定した時間メッセージが取得できるのを待つ。- 全てのSQSサーバーに対してメッセージの有無を確認し、
MaxNumberOfMessages
で指定した最大数までメッセージを取得し、レスポンスを返す。
ロングポーリングの例

※キューに格納されたメッセージは複数のサーバーに分散して保存されている。
遅延キューとメッセージタイマー
遅延キュー(配信遅延)
- キューにメッセージを保存後、コンシューマーに対してのメッセージ配信を遅らせる機能
- 0~900秒の間で「キュー」に設定する。(デフォルト 0)
- この設定は「キュー全体」に適用される

注意
- 標準キューの場合、配信遅延の設定を変更しても、既にキューにあるメッセージの遅延には影響しない。(遡及性なし)
- FIFOキューの場合は、配信遅延の設定を変更すると、既にキューにあるメッセージの遅延に影響する。(遡及性あり)
メッセージタイマー(標準キューのみ)
- メッセージの配信を個別に遅れさせる機能
- SendMessageリクエストのDelaySecondsパラメーターで指定した時間が経過するまで、キューに送信されたメッセージは可視化されない。
- DelaySecondsパラメーターを指定したメッセージだけ、可視化が遅れる=個別に遅延時間を指定できる
- FIFOキューはメッセージタイマーをサポートしていない
- 遅延キューの設定よりも、メッセージタイマーが優先される

この記事がどなたかのお役に立てれば幸いです。
もし間違いを見つけた場合は、コメントで教えていただけると助かります。
コメント