ITの教科書検索
入門読了 約9分

Amazon SQSとSNSとは ― キューと通知の違い

SQSは受け取る側が取りに行くキュー、SNSは購読者の全員に届ける通知です。違いと使い分け、組み合わせて取りこぼしを防ぐ方法、主な上限まで。

目次
  1. SQSとSNSの違い
  2. 間に置く理由
  3. Amazon SQSとは
  4. Amazon SNSとは
  5. 流れを比べる
  6. SNSとSQSの組み合わせ
  7. 使い分け
  8. 主な上限と既定値
  9. 練習問題

SQSとSNSの違いは、1通のメッセージを受け取る相手の数

注文を受けたら、在庫を減らし、確認のメールも送る。こうした処理をつなぐとき、アプリどうしを直接呼ばずに、間にAmazon SQSやAmazon SNSを置くことがあります。どちらもメッセージを受け渡すサービスで、違いは1通を受け取る相手の数にあります。

SQSは、メッセージをためておき、受け取る側が取りに来るキューのサービスです。1通のメッセージを受け取るのは、1つの処理だけです。SNSは、トピックに届いたメッセージを購読者の全員へ届ける通知のサービスです。1通のメッセージが、全員にコピーされます。

間に置くと、送る側と受け取る側を切り離せる

注文アプリが、注文の処理を直接呼び出す構成を考えます。この構成では、処理する側が止まっていると、注文アプリも注文を受け付けられません。処理が混んでいる間は、注文アプリも待たされます。

間にSQSのキューを置くと、注文アプリはメッセージをキューに入れるだけで済みます。処理する側は、自分の速さでキューから取り出します。AWSの開発者ガイドは、この形を「送る側と受け取る側が同時に動いている必要がない」と説明しています。受付だけをすぐに済ませ、処理を後に回す考え方は、バッチ処理とリアルタイム処理の記事も参考になります。

このように、システムの各要素が相手の状態に左右されない構成を疎結合と呼びます。SNSでも、送る側は受け取る側を直接呼び出さず、トピックにメッセージを発行するだけです。違いは、メッセージを1つの処理に渡すか、全員に配るかにあります。

1つのアプリを小さなサービスに分けるマイクロサービスでも、サービスどうしをキューでつなぐことがあります。キューは受け渡しだけをします。複数の処理の順番や分岐まで管理したいときは、AWS Step Functionsを使います。

Amazon SQSとは、受け取る側が取りに行くキュー

SQSでメッセージを送る側をプロデューサ、受け取る側をコンシューマと呼びます。プロデューサがキューに送ったメッセージは、SQSの複数のサーバに冗長化して保存されます。コンシューマは、処理できるようになったときに自分からキューへ取りに行きます。

取りに行く方法には2つあります。ショートポーリングは、メッセージが無くてもすぐに応答を受け取る方法です。ロングポーリングは、メッセージが届くまで最大20秒待ってから応答を受け取る方法です。空の応答を減らせます。

コンシューマが受け取ったメッセージは、すぐには消えずにキューに残ります。ただし、一定の時間、そのメッセージはほかのコンシューマから見えなくなります。この時間を可視性タイムアウトと呼びます。既定は30秒です。

処理を終えたコンシューマは、メッセージを削除します。削除しないままタイムアウトが過ぎると、メッセージは再び見えるようになり、別のコンシューマが受け取れます。処理の途中でサーバが止まっても、保持期間を過ぎるまでは、メッセージは失われません。

キューには、標準キューとFIFOキューの2種類があります。標準キューは、同じメッセージが2回以上届く場合があります。届く順番も、送った順とは限りません。FIFOキューは、同じグループのメッセージを送った順に届け、重複を防ぎます。

Amazon SNSとは、トピックの購読者に届ける通知のサービス

SNSでメッセージを送る側をパブリッシャ、受け取る側をサブスクライバと呼びます。パブリッシャは、トピックという窓口にメッセージを発行します。トピックを購読しているサブスクライバの全員に、同じメッセージが届きます。ただし、購読ごとに条件を付けると、その購読者には条件に合うメッセージだけが届きます。

SNSは、受け取る側が取りに来るのを待たずに、自分からメッセージを届けます。この届け方をプッシュと呼びます。購読者には、SQSのキュー・Lambda関数・HTTP(S)のURL・メールアドレス・電話番号へのSMS・モバイルアプリなどを登録できます。

購読者が一時的に受け取れないとき、SNSは配信を再試行します。再試行が上限に達したメッセージは、移動先を設定していなければ破棄されます。止まっている購読者の分を残したいときは、後の節で説明するSQSとの組み合わせを使います。

SQSとSNSの違いを、メッセージの流れで比べる

次の図は、同じ「注文1」のメッセージを送ったときの流れです。上の段がSQS、下の段がSNSです。ステップ2で、SQSでは1つの処理係だけが受け取ります。SNSでは、3つの購読者の全員に届きます。

STEP 1 / 3
SQS注文アプリ送るキュー注文1処理係待機処理係待機処理係待機SNS注文アプリ発行トピック注文1在庫待機メール待機分析待機メッセージが動くキューへの要求・指示
ステップ1:注文アプリがメッセージを送る
注文アプリが「注文1」のメッセージを送ります。SQSでは、メッセージがキューに入ります。SNSでは、メッセージがトピックに発行されます。この時点では、どちらも受け取る側にはまだ届いていません。

SQSの処理係は、どれも同じ処理を行います。どの処理係が受け取ってもよいので、台数を増やせば処理を分担できます。SNSの購読者は、在庫・メール・分析のように、それぞれ別の処理を行います。

SQSとSNSの違い(AWSの開発者ガイドをもとに作成)
比べる点SQSSNS
受け取り方受け取る側がキューへ取りに行くSNSが購読者へ届ける
1通を受け取る相手取りに行った処理のうち1つ購読者の全員
受け取ったあと受け取る側が削除するまでキューに残る購読者へ届けたら終わる
受け取れないとき保持期間の間、キューに残る再試行し、上限に達すると破棄する。移動先を設定していれば、そこへ移す
主な受け取り手EC2やLambdaなどで動く処理SQS・Lambda・HTTP(S)・メール・SMS・モバイル通知

SNSとSQSを組み合わせると、全員に配って取りこぼさない

SNSは全員に配信できます。ただし、止まっている購読者の分は、移動先が無ければ再試行の上限に達したあとに破棄されます。SQSは、保持期間の間メッセージを残せます。ただし、1通を受け取るのは1つの処理だけです。

AWSの開発者ガイドは、SNSのトピックに処理ごとのSQSキューを購読させる組み合わせを紹介しています。

トピックに発行したメッセージは、購読している各キューへコピーされます。各処理は、自分のキューから取り出します。このように1通を複数の宛先へ広げる形を、ファンアウトと呼びます。

注文アプリ発行するSNSトピックコピーを配るSQSキューSQSキュー注文1が残るSQSキュー取り出す取り出す在庫処理処理するメール送信停止中分析処理する
トピックは、購読している3つのキューへ同じメッセージのコピーを配信します。メール送信が止まっている間も、色を付けたキューに注文1が残り、再開したあとに取り出せます。

図では、メール送信の処理が止まっています。その間も注文1はメール送信用のキューに残るので、保持期間内であれば、再開後に取り出せます。保持期間の既定は4日で、最長14日まで延ばせます。

SQSとSNSの使い分けは、受け取る相手と待てるかで決まる

1件の仕事を、手の空いた処理のどれか1つに任せたいならSQSが向きます。1つの出来事を、複数の相手に同時に知らせたいならSNSが向きます。複数の相手に知らせつつ、止まっている相手の分も残したいなら、SNSとSQSを組み合わせます。次の図で場面を選ぶと、どれが向くかと理由が切り替わります。

注文が入ったら、在庫・メール・分析の3つの処理に同じ注文を伝えたい。どれかの処理が止まっていても、取りこぼしたくない。
向くもの:SNSとSQSの組み合わせ
SNSのトピックが、3つの処理それぞれのキューへ同じメッセージのコピーを配信します。止まっている処理の分は、そのキューに残ります。AWSの開発者ガイドも、注文の例でこの組み合わせを説明しています。

AWSには、同じくサービスどうしをつなぐAmazon EventBridgeもあります。イベントの中身を見て宛先を選ぶサービスです。SQS・SNSとの違いはEventBridgeの記事で比べています。

SQSとSNSの主な上限と既定値

SQSとSNSには、メッセージの大きさや保持できる期間に上限があります。数値は、2026年10月27日にAWSの公式ドキュメントで確認したものです。

SQSとSNSの主な上限と既定値(2026-10-27時点、AWS公式ドキュメント)
項目値
SQSのメッセージの保持期間既定は4日。60秒から14日までの間で変えられる
SQSの可視性タイムアウト既定は30秒。0秒から12時間までの間で変えられる
SQSのロングポーリングの待ち時間最大20秒
SQSのメッセージの大きさ最大1 MiB
SNSのメッセージの大きさ既定は最大256 KiB。トピックの設定で1 MiBまで上げられる
SNSがSQS・Lambdaへ届けるときの再試行23日をかけて、合計100,015回まで試行する

最新の値は、SQSのメッセージの上限のページで確認してください。SNSの値は、SNSの上限のページと配信の再試行のページにあります。

参考にした資料

練習問題(全4問)

Q1Amazon SQSでメッセージを受け取る仕組みとして正しいものはどれ?
Q2Amazon SNSのトピックに発行したメッセージは、誰に届く?
Q3SQSで、受け取る側がメッセージを削除しないまま可視性タイムアウトが過ぎるとどうなる?
Q4注文が入るたびに、在庫・メール・分析の3つの処理へ同じ注文を伝えたい。どれかの処理が止まっていても取りこぼしたくない。向く構成はどれ?

選んでから「採点する」を押すと、解説つきで答え合わせができます。

関連記事

AWSの記事を続けて読む

AWS 全38本中10本目