COLUMN誰でもわかる!お役立ちコラム

AWS活用支援コラム

Amazon SQS と Amazon SNS、どう違う?

Amazon SQS と Amazon SNSとは?

Amazon Web Services(AWS)には多くのサービスがありますが、その中でメッセージングに関する2つのサービス、Amazon SQSとAmazon SNSについて詳しく説明します。
これらのサービスは機能的には似ているように見えますが、それぞれ異なる目的とユースケースを持っています。
具体的なユースケースについてみていきましょう

メッセージングサービスとは?

メッセージングサービスとは、異なるソフトウェアの間でデータ(メッセージ)を効率的かつ確実に転送するためのソフトウェアやサービスを指します。直接サーバー同士をつなぎ、ネットワークで連絡を行うこともできますが、メッセージングサービスを使うことでやり取りを非同期にすることができ、障害などのトラブルを回避することができます。

例えば、電話とメールを考えてみましょう。電話は同期通信であり、相手と同時に音声のやり取りを行います。相手側に何かあった場合は、通話は待ち状態になったり、通信自体ができなくなったりします。一方でメールは、いったん送信されてしまえば、その後、送信側に何かトラブルが発生しても、相手はメールを見ることができます。

このように、同期通信の場合は片方のエラーの影響が通信先にも波及しますが、非同期通信の場合は影響を極小化することができます。非同期通信を採用することでアプリケーション同士のつながり度合を低くすることを、「疎結合化」といいます。

AWS上で様々なマネージドサービスを活用してDXを実現するスタイルズのクラウドネイティブ開発サービスはこちら→

AWS SQSとは?

Amazon Simple Queue Service(SQS)は、フルマネージド型のメッセージキューサービスで、大量のメッセージを効率的にキューイングすることが可能です。これにより、システム間でメッセージを転送する際の遅延やメッセージの喪失を防ぐことができます。

Amazon SQSの仕組みは?

Amazon SQSがどのような仕組みなのか、具体的に見ていきましょう。
SQSは、下記4つの仕組みによってアプリケーション同士の通信を仲介しています。

プロデューサとコンシューマとは?

プロデューサとはメッセージを提供(プロデュースする)する側のことで、メッセージを送信する側のアプリケーションのことを指します。コンシューマとは、メッセージを消費(Consume)する側のことで、つまりはメッセージを受信する側(受け取りに行く側)のアプリケーションのことを指しています。
SQSはプロデューサ(送信する側)とコンシューマ(受信する側)をつなげる役割を持っています。

キューとは?

キュー(Queue)とは、メッセージを管理するための入れ物のような役割です。スーパーマーケットのレジに並ぶレーンに似ています。各顧客(メッセージ)が行列(キュー)の最後に加わり、順番が来たらレジ(コンシューマー)で処理されます。なお、SQSには下記のキューが機能として用意されています。

  • 標準キュー…一般的なメッセージングキュー機能です。メッセージを重複して取得してしまう可能性があったり、メッセージの取得順が保証されていません。
  • FIFOキュー…「FIFO」は「First In, First Out」の頭文字をとったもので、メッセージが登録された順に1度だけ処理することができます。一方で、標準キューと異なり、1秒あたりの最大トランザクションについて上限が標準キューよりも低くなっています。

ポーリングとは?

ポーリング(polling)とは、コンシューマーが新しいメッセージがキューに来たかどうかを定期的に確認する行為を指します。これは、友達からの返信を待っているときに、何度もスマートフォンをチェックする様子に似ています。新しいメッセージが到着していれば、そのメッセージは処理され、そうでなければコンシューマーは待ち続けます。

つまり、アプリケーションからのメッセージをキューに蓄え、コンシューマがメッセージを取りに来るまで保管しておくことがSQSの仕組みです。

Amazon SQSを使うメリット

SQSはAWSマネージドのサービスであり、簡単にメッセージングサービスを導入できるという点がメリットです。
具体的には、AWSによって下記が保証されています。

  • メッセージの耐久性…すべてのメッセージは複数のサーバーに分散されて保存されます。これにより、メッセージの喪失を防ぐことができます。
  • SQS自体のスケーラビリティ…SQSはメッセージの量に関わらず、メッセージを効率的に処理する能力を持っています。そのため、大量のメッセージを扱う必要がある場合でも、追加のインフラストラクチャを準備する必要はありません。
  • セキュリティ… SQSはメッセージの送信と受信を安全に行うための多数のセキュリティ機能を提供しています。具体的には、メッセージの暗号化、IAMロールによるアクセス制御、VPCエンドポイントの使用などがあります。


AWS上で様々なマネージドサービスを活用してDXを実現するスタイルズのクラウドネイティブ開発サービスはこちら→

Amazon SQSのユースケースや他サービス連携

SQSは、マイクロサービス、分散システム、サーバーレスアプリケーションなどの様々なユースケースで利用することができます。以下にいくつかの具体的なユースケースと他のAWSサービスとの連携について解説します。

高負荷な処理のバッファリング

高負荷時に生じる突発的なリクエストやデータを一時的にバッファし、後続のEC2やLambdaなどに送るユーケースです。これにより。フロントとバックエンドの処理を分割することができます。
また、SQSではキューに貯まっているメッセージ数からEC2インスタンスなどをAutoScalingさせることも可能です。

具体的には、Eコマースサイトなどにおいて注文処理や在庫管理などの処理を分割し、それぞれの処理が高付加によりダウンしても影響がないようにします。

ミッションクリティカルなメッセージ処理

SQSのFIFOキューを利用すると、メッセージの順番が大事になるようなシステムにおいて信頼性の向上に貢献します。具体的には、証券系のシステムにおいてデータの順番を保証し、取引の信頼性を高めます。

AWS SNSはSQSとどう違う?

AWS SNS(Simple Notification Service)は、プッシュ通知やメッセージ配信のためのフルマネージド型のサービスで、システムとユーザーに通知(Notification)を送信することができます。これにより、複数の送信先(サブスクライバー)に対して一度にメッセージを配信することができます。

SNSは配信先のグループ(トピック)を使用してメッセージを配信します。プロデューサーはメッセージを配信先や目的に応じて分けられたトピックに送信し、そのトピックに紐づいているすべてのサブスクライバーがそのメッセージを受信します。
具体的なサブスクライバーとして登録できる先は、HTTP/HTTPSエンドポイント、Lambda関数、SMSメッセージなどがサポートされています。

Amazon SQSとAWS SNSは連携できる

SQSとSNSは組み合わせて使用することも可能で、SNSのトピックに配信先としてSQSキューを作成することができます。これにより、特定のトピックにメッセージが投稿されると、そのメッセージはSQSキューに自動的に送信されます。これは、複数のコンシューマーに対して同じメッセージを非同期で配信する場合に便利です。

まとめ

SQSとSNSは、共にAWSが提供するメッセージングサービスであり、それぞれが特定のユースケースに対して強力な機能を提供します。SQSは大量のメッセージを効率的にキューイングする一方、SNSは多くのサブスクライバーに対してリアルタイムでメッセージを配信します。

これらのサービスは単独で使用することも、連携して使用することも可能で、AWSアプリケーションの柔軟性と信頼性を向上させるための重要なツールとなります。ぜひ利用して、アプリケーションのメッセージングを効率化してみてください。