アプリケーション統合(SQS / SNS / EventBridge)
SQS・SNS・EventBridgeはAWSのアプリケーション統合サービスです。サービス間を「疎結合」に接続することで、システムの可用性・スケーラビリティ・保守性を高めます。SQSとSNSの違いがCP試験で頻出です。
概要
現代のクラウドアーキテクチャでは、複数のサービスやコンポーネントを連携させてシステムを構築します。この連携の方法として疎結合(loose coupling)が重要な設計原則です。
疎結合とは、システムの各コンポーネントが互いに直接依存せず、メッセージやイベントを介して通信する設計のことです。これにより、一部のコンポーネントが停止してもシステム全体には影響しにくくなります。
CP試験で押さえるポイント
- SQSはキュー(ポーリング型):メッセージを一時的にためておき、コンシューマーが取り出して処理します。1対1の通信が基本。
- SNSはPub/Sub(プッシュ型):発行者がトピックにメッセージを送ると、購読者全員に同時に配信されます(ファンアウト)。
- SQSはバッファリング:処理速度の異なるコンポーネント間のバッファとして機能します。
- SNSはEメール・SMS通知に使える:エンドユーザーへの通知送信に適しています。
- EventBridgeはAWSサービスや外部アプリのイベントをルーティングします(例:EC2インスタンスの停止イベントをトリガーに別の処理を実行)。
- 疎結合アーキテクチャにより可用性とスケーラビリティが向上します。
疎結合アーキテクチャとは
システムのコンポーネントが直接通信する密結合では、一方のサービスが遅くなると相手も待たされ、障害が連鎖しやすくなります。
一方、SQSのようなキューを挟んだ疎結合では:
- 送信側は処理結果を待たずにキューにメッセージを積むだけで次の処理に進めます。
- 受信側がダウンしていても、メッセージはキューに保存されるため情報は失われません。
- 受信側を増減(スケール)しても送信側の変更は不要です。
このような設計により、システム全体の可用性・スケーラビリティ・回復力が向上します。
Amazon SQS(Simple Queue Service)
SQSはフルマネージド型のメッセージキューサービスです。送信側(プロデューサー)が送ったメッセージをキューに保存し、受信側(コンシューマー)がポーリング(定期的に問い合わせ)して取り出すプル型(ポーリング型)の通信です。
- バッファリング:処理速度の異なるコンポーネント間の負荷の差を吸収できます。
- メッセージの保持:デフォルトで4日間(最大14日間)メッセージを保持します。
- スケーリング:キューの長さに応じてコンシューマー数を自動スケールできます(Auto ScalingやLambdaと組み合わせ)。
- デッドレターキュー:一定回数処理に失敗したメッセージを別のキューに移す仕組みです。
Amazon SNS(Simple Notification Service)
SNSはPub/Sub(発行/購読)モデルのメッセージ通知サービスです。発行者がトピックにメッセージを送ると、そのトピックを購読しているすべての購読者にプッシュ型で同時に配信されます(これをファンアウトと呼びます)。
- 配信先:Eメール・SMS・HTTP/S エンドポイント・SQS・Lambda・モバイルプッシュ通知など。
- ファンアウト:1つのトピックに複数のSQSキューを購読させることで、メッセージを並列処理できます。
- エンドユーザー通知:障害アラートのEメール通知やSMS送信に広く使われます。
SQS と SNS の違い(CP試験頻出)
| 比較項目 | SQS | SNS |
|---|---|---|
| モデル | キュー(メッセージキュー) | Pub/Sub(発行/購読) |
| 通信方式 | プル型(ポーリング):受信側が取りに行く | プッシュ型:発行すると全購読者に配信 |
| 宛先 | 基本的に1対1 | 1対多(ファンアウト) |
| メッセージの保持 | コンシューマーが取り出すまで保持(最大14日) | 配信後は保持しない |
| 主な用途 | 処理のバッファリング・非同期処理 | 通知配信・複数サービスへの同時配信 |
| 用途例 | 注文処理キュー・画像処理キュー | 障害通知メール・SNSファンアウトパターン |
Amazon EventBridge(イベントルーティング)
EventBridgeはAWSサービス・SaaSアプリケーション・カスタムアプリケーションからのイベントをルールに基づいてターゲット(Lambda・SQS・SNSなど)にルーティングするサービスです。
たとえば「EC2インスタンスが停止したら自動的にLambda関数を実行して通知を送る」「毎日決まった時間にバッチ処理を実行する」などのイベント駆動アーキテクチャを構築できます。
AWS Step Functions(一言レベル)
Step Functionsは複数のAWSサービス(Lambda・SQS・SNSなど)をワークフローとして定義し、ステップごとに順番に実行したり、条件分岐・エラー処理を組み込んだりできるサービスです。複雑な処理の流れをビジュアルで管理できます。
関連サービスとの違い・使い分け
| シナリオ | 適切なサービス | 理由 |
|---|---|---|
| 注文が来たら非同期で処理し、処理できるまでメッセージを保持したい | SQS | キューがバッファとなり、処理側のダウン中もメッセージを保持 |
| 障害発生時に複数の担当者へEメールとSMSで同時通知したい | SNS | ファンアウトで複数の宛先(Eメール・SMS)に同時配信可能 |
| EC2インスタンスが停止したら自動的に別の処理を実行したい | EventBridge | AWSサービスのイベントを検知してルールに基づき処理をトリガー |
| 1件の注文を複数のサービス(在庫・配送・メール)で並列処理したい | SNS + SQS | SNSファンアウトで各サービスのSQSキューにメッセージを配信 |
確認問題
付録:公式ドキュメント・Black Belt 動画
さらに深く学びたい方は、AWS公式の以下のリソースを参照してください(いずれも外部サイトが開きます)。
公式ドキュメント
- Amazon SQS 製品ページ
- Amazon SQS 開発者ガイド
- Amazon SNS 製品ページ
- Amazon SNS 開発者ガイド
- Amazon EventBridge 製品ページ
- Amazon EventBridge ユーザーガイド