0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【AWS SAA対策】SQS / SNS / EventBridge / Amazon MQ まとめ ― メッセージングサービスの使い分け・キュータイプ・設計パターンを整理する

0
Posted at

はじめに

AWS Solutions Architect Associate (SAA) の学習中に整理した SQS / SNS / EventBridge / Amazon MQ 関連の知識をまとめました。
メッセージングサービスの選択は試験で非常に多く問われ、「キューイング vs Pub/Sub」「AWS 独自 API vs プロトコル互換」「Standard vs FIFO」など、複数の判断軸があります。

本記事は個人の学習ノートをベースにしています。誤りがあればコメントでご指摘いただけると助かります。


サービス概要

メッセージングサービスの使い分け

サービス モデル 用途 プロトコル互換
SQS キューイング(Pull) デカップリング、バッファリング AWS 独自
SNS Pub/Sub(Push) ファンアウト通知 AWS 独自
EventBridge イベントバス(Push) サードパーティ SaaS 統合 AWS 独自
Amazon MQ マネージドブローカー 既存ブローカー移行 AMQP/MQTT/STOMP/JMS
Kinesis Data Streams ストリーミング リアルタイム処理 AWS 独自

判断のポイントです。

  • デカップリング / バッファリング → SQS
  • ファンアウト通知 → SNS
  • サードパーティ SaaS 統合 → EventBridge
  • AMQP / MQTT / STOMP 互換 → Amazon MQ
  • リアルタイムストリーミング → Kinesis

SQS キュータイプ

タイプ 用途 キーワード
Standard Queue 汎用、高スループット、順序保証なし デフォルト
FIFO Queue 順序保証、重複排除 exactly-once
Temporary Queue リクエスト-レスポンスパターン 一時的
Dead-Letter Queue 処理失敗メッセージの隔離 デバッグ
Delay Queue メッセージ配信の遅延 遅延

SQS FIFO 移行のルール

  • Standard → FIFO 変換は不可(削除して再作成)
  • .fifo サフィックス必須
  • バッチなし: 300 msg/s、バッチあり: 3,000 msg/s

Short Polling vs Long Polling

Short Polling Long Polling
動作 即座にレスポンス メッセージが来るまで待機(最大20秒)
空レスポンス 多い → コスト増 少ない → コスト削減
デフォルト ❌(設定必要)

コスト削減 が求められたら Long Polling を選びましょう。


Kinesis Data Streams vs SQS vs SNS

サービス 順序保証 リアルタイム 複数コンシューマー
Kinesis Data Streams ✅(シャード内) ✅(リプレイ可能)
SQS Standard
SQS FIFO
SNS ✅(ファンアウト)

Amazon MQ のプロトコル対応

AMQP、MQTT、STOMP、JMS に対応しています。SQS / SNS / Kinesis は AWS 独自 API であり、プロトコル互換はありません。「AMQP 互換」が出たら Amazon MQ です。


EventBridge の特徴

  • サードパーティ SaaS と直接統合できる唯一のイベントベースサービス
  • 90以上の AWS サービスからイベントを自動取り込み
  • JSON 構造のイベントでルールベースフィルタリング

試験で問われる設計パターン


サービス選択系

K8s 移行 + AMQP 互換 → Amazon MQ

シナリオ: オンプレミスの Kubernetes アプリケーションを AWS に移行します。メッセージキューとして AMQP プロトコルが必要です。どのサービスが適切でしょうか?

正解: Amazon MQ

  • SQS は AMQP 非対応(AWS 独自 API)
  • 自前 RabbitMQ は運用負荷が大きい

MQTT 対応マネージドブローカー → Amazon MQ

シナリオ: IoT デバイスからの MQTT メッセージを受信するマネージドブローカーが必要です。

正解: Amazon MQ

  • SQS / SNS / Kinesis は MQTT 非対応

RabbitMQ からの移行 → Amazon MQ

シナリオ: オンプレミスの RabbitMQ を AWS に移行したいです。コード変更は最小限にしたいです。

正解: Amazon MQ

  • 既存メッセージブローカーの移行 = Amazon MQ
  • SQS / SNS は新規構築向け

SaaS 統合 + 非同期デカップリング → EventBridge

シナリオ: サードパーティ SaaS アプリケーションからのイベントを受け取り、非同期で処理したいです。

正解: Amazon EventBridge

  • 「SaaS」「サードパーティ」→ EventBridge
  • SNS / SQS はサードパーティ SaaS と直接統合できない

SQS 設計パターン系

非同期画像処理 + リトライ + コスト最小 → SQS + Spot

シナリオ: ユーザーがアップロードした画像を非同期で処理し、失敗時は自動リトライさせたいです。コストを最小限にする構成は?

正解: SQS(非同期バッファ + リトライ)+ EC2 Spot Instances

  • SQS + Spot は非同期バッチ処理のコスト最適パターン
  • SNS にはキューイング / リトライの仕組みがない

データ急増でメッセージ損失 + バッファリング → SQS

シナリオ: データの急増により処理が追いつかず、メッセージが損失しています。バッファリングで解決するにはどのサービスが適切でしょうか?

正解: SQS キューでバッファリング

  • SNS はプッシュ型でポーリング不可
  • Firehose はバッチ配信向け

速度の異なるマイクロサービスのデカップリング → SQS

シナリオ: 処理速度が異なる2つのマイクロサービスをデカップリングしたいです。

正解: Amazon SQS

  • SQS = ポーリングベースで速度差を吸収
  • SNS はプッシュ型(速度差の吸収に不向き)

2段階ジョブ処理のデカップリング → 2つの SQS キュー

シナリオ: 受付処理と後続処理を独立してスケールさせたいです。

正解: 2つの SQS キュー(受付用 + 処理用)+ メッセージ数に基づく ASG スケーリング

  • 単一キューでは独立スケールができない

SQS メッセージ処理失敗 → Dead-Letter Queue

シナリオ: SQS のメッセージが何度も処理に失敗しています。失敗したメッセージを隔離して後で調査するにはどうすべきでしょうか?

正解: Dead-Letter Queue(DLQ)

  • maxReceiveCount を超過したメッセージが DLQ に移動
  • Long / Short Polling はメッセージの受信方法

リクエスト-レスポンスパターン → SQS Temporary Queues

シナリオ: リクエストに対してレスポンスを返すパターンを SQS で実装したいです。開発時間とコストを削減するには?

正解: SQS Temporary Queues

  • 仮想キューを1つの SQS キューに多重化
  • FIFO は順序保証用、DLQ は処理失敗用

SQS FIFO 系

SQS Standard → FIFO 移行チェックリスト

シナリオ: SQS Standard キューを FIFO キューに移行する必要があります。正しい手順を3つ選んでください。

正解:

  1. 既存 Standard キューを削除して FIFO キューとして再作成(変換不可)
  2. .fifo サフィックス必須
  3. バッチありの FIFO スループットは最大 3,000 msg/s

コスト最適化系

SQS コスト削減 → Long Polling

シナリオ: SQS の利用コストを削減したいです。最も効果的な方法はどれでしょうか?

正解: SQS Long Polling

  • 空レスポンスを削減 → コスト削減
  • WaitTimeSeconds を 1〜20秒に設定

SQS キュー長に基づく Auto Scaling → Target Tracking + カスタムメトリクス

シナリオ: SQS のキューの深さに応じてワーカーの EC2 をスケールしたいです。

正解: Target Tracking + backlog per instance メトリクス

  • Simple Scaling はクールダウンでスパイクに弱い
  • Scheduled は突発スパイクに対応不可

統合パターン系

フィードバック収集 + 感情分析 + 1年保持 → API Gateway + SQS + Lambda + Comprehend + DynamoDB TTL

シナリオ: ユーザーのフィードバックを収集し、感情分析して1年間保持したいです。

正解: API Gateway → SQS → Lambda → Comprehend → DynamoDB(TTL 365日)

  • SQS がスパイク時のバッファ
  • Comprehend = 感情分析

SQS 処理 + 変動トラフィック + コスト + 可用性 → RI + Spot 混合

シナリオ: SQS からメッセージを処理するワーカーを、コスト効率と可用性を両立させて運用したいです。

正解: Reserved Instances(ベースライン)+ ASG with Spot Instances(スパイク)

  • Spot のみだと中断リスクで可用性が下がる
  • SQS がバッファになるため、Spot 中断時もメッセージは失われない

おわりに

メッセージングサービスの選択は「デカップリング → SQS」「ファンアウト → SNS」「SaaS 統合 → EventBridge」「プロトコル互換 → Amazon MQ」という判断パターンで整理できます。SQS については「Standard vs FIFO」「Long Polling でコスト削減」「DLQ で失敗メッセージ隔離」も頻出なので、しっかり押さえておきましょう。

間違いや補足があればぜひコメントで教えてください。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?