SNS と SQS

AWS のメッセージングサービスで、SNS がパブリッシュ/サブスクライブ、SQS がメッセージキューを提供する

AWSメッセージング

SNS と SQS とは

SNS (Simple Notification Service) はパブリッシュ/サブスクライブ型のメッセージングサービス、SQS (Simple Queue Service) はメッセージキューサービスである。SNS は「1 対多」の通知、SQS は「1 対 1」の非同期処理に使う。

SNS vs SQS

SNS と SQS はどちらか一方を選ぶ関係ではない。違いは配信の向き (押し出すか取りに行くか) とメッセージが残るかどうかの 2 点で、この 2 点が構成の選び方を決める。

観点SNSSQS
モデルPub/Sub (1 対多)キュー (1 対 1)
配信プッシュ (SNS が宛先を呼び出す)プル (コンシューマーが取得)
永続化なし (配信のみ)あり (既定 4 日・最大 14 日まで設定可)
用途通知、ファンアウト非同期処理、バッファリング

プッシュ配信はその場で必ず完結するわけではない。宛先が一時的に応答しない (サーバー側エラー) 場合は再試行され、SQS や Lambda を宛先にした再試行は最大 100,015 回・23 日間にわたる。一方で宛先が削除済み・権限で拒否されるといったクライアント側エラーでは再試行せずに破棄する (いずれも 2026 年 8 月時点の公式ドキュメント)。SNS 自身はメッセージを保持しないため、再試行を使い切った時点で消える。ここが「永続化なし」の実務上の意味になる。

SNS + SQS ファンアウト

トピックへ 1 回発行すると、購読している各キューに独立した複製が入る。発行側は宛先を知らないため、購読を追加するだけで処理の系統を増やせる。

[注文サービス][SNS トピック][SQS: 在庫更新][Lambda: 在庫処理][SQS: メール送信][Lambda: メール処理][SQS: 分析][Lambda: 分析処理]

1 つのイベントを複数のコンシューマーに配信する。各 SQS キューが独立して処理するため、1 つが失敗しても他に影響しない。

受け取る形が 2 通りある

SNS から SQS へ配信されたメッセージは、既定では SNS の封筒に包まれる。Type や MessageId、TopicArn、Timestamp、署名などを含む JSON が届き、発行した本体は Message フィールドの中の文字列として入る。コンシューマー側で 2 段のパースが必要になり、封筒の形に依存したコードになりやすい。サブスクリプション属性 RawMessageDelivery を true にすると封筒が外れ、発行した本体がそのまま本文として届く。

切り替えると読み取り位置が変わるため、稼働後に変更するとコンシューマーが一斉に壊れる。キューを追加する時点で決めておく設定である。素の配信を有効にした SQS 宛サブスクリプションではメッセージ属性が 10 個までに制限され、これを超えるメッセージはクライアント側エラーとして破棄される (2026 年 8 月時点)。

デッドレターキュー (DLQ)

DLQ は置く場所が 2 か所ある。1 つは SNS のサブスクリプションに付ける DLQ で、SNS が宛先へ配信できなかったメッセージを受け止める。トピック単位ではなくサブスクリプション単位に付くため、どの宛先向けのメッセージが落ちたのかを区別できる。もう 1 つはキュー側の DLQ で、配信は成功したがコンシューマーが処理しきれなかったメッセージを受け止める。

前者を用意していないと、宛先の削除や権限変更で配信が失敗した時点でメッセージは黙って捨てられる。SNS 側の DLQ には同一アカウント・同一リージョンの SQS キューを指定し、FIFO トピックのサブスクリプションには FIFO キュー、標準トピックには標準キューを充てる。

EventBridge との使い分け

3 つはいずれもイベントを配る仕組みだが、選ぶ基準は経路の分岐条件をどこまで表現したいかにある。

サービス用途
SNS + SQSシンプルなファンアウト、非同期処理
EventBridgeイベントのフィルタリング、ルーティング
Kinesis大量データのストリーム処理

EventBridge の欄にフィルタリングと書いたが、SNS にもサブスクリプション単位のフィルターポリシーがあり、メッセージ属性と本文のどちらを見るかを指定して、条件に合わないメッセージを配信しない設定ができる。単純な振り分けだけなら SNS で足り、複数の条件を組み合わせた経路制御が必要になった段階で EventBridge を検討する。

基礎から学ぶなら関連書籍が手がかりになる。

この記事は役に立ちましたか?

関連用語

関連する記事