SAS取得を目指して勉強中です。
学習の中で学んだことをせっかくなのでまとめておこうと思います。
SQSとは
- マネージド型のメッセージキューイングサービス、
プロデューサーから送信されたメッセージをSQSに貯め、
コンシューマーはSQSにメッセージを取りにいく - アプリケーションの分離に貢献するサービス
- コンシューマーに「EC2」「Lambda」などを指定でき
SQSにポーリングを行う
ポーリング
- ショートポーリング
- メッセージ取得リクエストされた際、
メッセージがなくてもすぐレスポンスを返却 - APIコール数が多くなる
- メッセージ取得リクエストされた際、
- ロングポーリング
- メッセージ取得リクエストされた際、
メッセージが届くまで最大20秒待機
- メッセージ取得リクエストされた際、
可視性タイムアウト
- コンシューマーによってポーリングされた後、
他のコンシューマーが受信できない時間のこと - デフォルト30秒
- 可視性タイムアウト内にメッセージ処理に失敗した場合、
メッセージはキューに戻る
デッドレターキュー
- 処理失敗などでメッセージがキューに戻る回数が
ある閾値を超えた場合、デッドレターキューに送ることができる - キューA(S3バケットA)でデッドレターキューを設定したい場合、
キューB(S3バケットB)を新たに作成しデッドレターキューに設定する
遅延キュー/メッセージタイマー
- 遅延キュー
- プロデューサーがSQSに送信したメッセージを
コンシューマーが一定時間アクセスできないようにする機能 - すべてのメッセージが対象
- プロデューサーがSQSに送信したメッセージを
- メッセージタイマー
- プロデューサーがSQSに送信したメッセージを
コンシューマーが一定時間アクセスできないようにする機能 - 特定のメッセージが対象
- プロデューサーがSQSに送信したメッセージを
キューの種類
- スタンダードキュー(標準キュー)
- 送信順序が保証されない
- 重複送信がまれに発生
- 256KBまで
- 安価
- FIFOキュー
- 送信順序が保証されている
- 重複して受信することはない
- スループット上限あり
アクセスポリシー
- 以下の場合、SQSに直接ポリシーを記述する
- 別アカウントのEC2インスタンスにメッセージをポーリングしたい場合(IAMポリシーのPrincipal部分)
- S3のイベント通知をSQSに書き込みたい場合(IAMポリシーのCondition部分)
リクエスト/レスポンス形式の実現
- SQSは単方向の通信しかできないが、
SQS Temporary Queue Clientを使うことで
リクエスト、レスポンスの形を実現できる