はじめに
AWS SAA(AWS Certified Solutions Architect - Associate)の試験勉強で分からなかったことについて調べました。(第6弾)
目次
Amazon SQS
マイクロサービス、分散システム、およびサーバーレスアプリケーション用の完全マネージド型メッセージキュー
分散されたソフトウェアシステムとコンポーネントを統合と分離ができる安全性、耐久性があり利用可能なホストキューを提供します。
(引用」:Amazon Simple Queue Serviceとは?)
Amazon SQS(Amazon Simple Queue Service)は、メッセージキューのサービスです。
「キューにメッセージを送るサービス」と「メッセージを受け取って処理するサービス」との間で行われるやり取りのために、メッセージを一時的に保存します。
両者とも互いの状態を気にすることがないので、非同期で効率的な設計が行えます。
キュー
受け取ったメッセージを順番に格納し、最初に入れたメッセージから順に取り出す仕組みのこと。
可視性タイムアウト
Amazon SQS キューからメッセージを受信すると、メッセージはキューに残りますが、他のコンシューマーからは一時的に見えなくなります。
この可視性は可視性タイムアウトによって制御されます。
これにより、作業している間、他のコンシューマーは同じメッセージを処理することができません。
※コンシューマー:キューを処理するLambda関数やEC2インスタンスなどのコンピューティングリソースのこと
「他のコンシューマーからは一時的に見えなくなります」というのが分かりにくかったのですが、こちらのブログ記事・Amazon Simple Queue Service の可視性タイムアウトってなぁに? | DevelopersIOが分かりやすかったです。
可視性タイムアウトの期間中は、他のコンシューマーが同じメッセージを受信して処理することができません。
可視性タイムアウトは、メッセージが配信されるとすぐに開始されます。
この期間中は、メッセージを処理および削除する必要があります。
タイムアウトが期限切れになるメッセージを削除しなかった場合、メッセージはキューに再表示されて、別のコンシューマーが取得できるようになります。
キューのデフォルトの可視性タイムアウトは 30 秒ですが、アプリケーションがメッセージを処理および削除するために必要な時間に合わせて調整できます。
また、キュー全体の設定を変更することなく、個別のメッセージに特定の可視性タイムアウトを設定することもできます。
ChangeMessageVisibility アクションを使用して、必要に応じてタイムアウトをプログラムで延長または短縮します。
デフォルト値と上限
キューのデフォルトの可視性タイムアウトは30秒です。
メッセージを処理・削除するために必要な時間に合わせて調整可能です。
可視性タイムアウトの上限は、メッセージを最初に受信してから12時間です。
可視性タイムアウトの設定
ChangeMessageVisibility APIを利用し、タイムアウト値を指定する。
→ 他のコンシューマーが、重複してメッセージを取得するのを防ぎます。
使用例:
複数の受信先が同じメッセージを受け取ることにより、メッセージ配信の重複が発生する可能性がある。
ここで、他のコンシューマーによるメッセージの再処理を防ぐために、Amazon SQSの可視性タイムアウトを設定する。
可視性タイムアウトを設定している間は、初めにメッセージを受け取ったコンシューマー以外のコンシューマーからはメッセージが見えなくなる。
参考サイト