こんにちは!
SNS へトピックを作成し、SQS でサブスクライブするアーキテクチャーはよくあるベストプラクティスです。
わたしたちは外部 API ( 決済 API へのリクエスト、SNS の API 投稿 ) への通信などを行う際に、このアーキテクチャーを採用することが多いですね。
本記事では、SNS のサブスクライバーに SQS を指定している場合のデッドレターキューの扱いについて解説したいと思います。
SNS はトピックを作成しサブスクライバーへメッセージを通知する送信者で、SQS は受信者です。
つまり、そもそも送信者である SNS と受信者である SQS はユースケースが異なります。( それぞれ非同期で処理してくれる点は変わらない )
下記にそれぞれのユースケースを記載します。
SNSトピックからサブスクリプション ( お客様の場合ですとSQSキュー ) に到達不能になった場合に、そのメッセージを保持するためのキュー。
キューのコンシューマが指定された回数だけキュー内のメッセージの処理に失敗した場合に、そのメッセージを保持するためのキュー。
SNS のサブスクライバーに SQS を指定している時、メッセージの処理自体の失敗を検知するなら SQS のキュートなり、SNS と SQS の連携部分に懸念がある場合は SNS のデッドレターキューを使用します。
SNS と SQS 間の連携が失敗するケースは、実際そうそうありません。( AWS の障害などを想定すれば可能性は広がりますが… )
わたしたちは、例え可能性が低くても SNS → SQS のサブスクリプションが失敗した場合のエラー通知を設置しておきます。( 例えばSlack通知、Email通知など ) こうした細かいところの設定を拘るのが、最終的な品質かなと考えています。
AWS サーバーレスを扱うなら、SNS と SQS 連携はぜひ抑えておくといいでしょう。非同期で処理をしたいときに非常にシンプルに実装することが可能ですし、サーバーレスの性質上、使用しなければ料金がかからないのでスタートアップや新規事業に優しいです。
SNS、SQSの実装、サーバーレスの開発はお気軽にお問い合わせください。
スモールスタート開発支援、サーバーレス・NoSQLのことなら
ラーゲイトまでご相談ください
低コスト、サーバーレスの
モダナイズ開発をご検討なら
下請け対応可能
Sler企業様からの依頼も歓迎