非同期処理サービスの全体像

AWS の非同期処理サービスは「メッセージの送り方」と「処理のトリガー」で大きく分類できる。

サービスパターンオンプレ対応主な用途
SQSキュー(Pull型)MQ / ActiveMQ / RabbitMQ(一部)処理の非同期化・スパイク吸収
SNSPub/Sub(Push型)メッセージブローカー / Kafka(一部)1対多通知・ファンアウト
EventBridgeイベントバス / スケジューラーJP1 / Cron / イベント連携基盤定期実行・AWS サービス間イベント連携
Step Functionsステートマシン(ワークフロー)JP1 / Workflow ツール複雑なジョブ依存関係・エラーハンドリング

判断フロー

Q1. 定期実行(Cron / スケジューラー)が主な目的か?
 ├─ Yes → EventBridge Scheduler(+ Lambda / ECS タスク)
 └─ No → Q2 へ

Q2. 複数のサービスやコンポーネントが依存するワークフローか?
 ├─ Yes(ジョブ依存・エラーリトライ・並列実行が必要)→ Step Functions
 └─ No → Q3 へ

Q3. 1つのメッセージを複数の受信者(サービス)に届けるか?
 ├─ Yes(1対多 / ファンアウト)→ SNS
 └─ No(1対1 / キューイング)→ SQS

SQS — キューイング(Producer-Consumer)

SQS(Simple Queue Service)はメッセージキューサービスだ。 送信者(Producer)がキューにメッセージを送り、受信者(Consumer)がポーリングで取得して処理する Pull 型のモデルだ。

SQS を選ぶケース:

  • リクエストのスパイクをキューで吸収し、バックエンドへの負荷を平準化したい
  • 注文処理・決済処理など、取りこぼしなく1件ずつ確実に処理したい
  • Consumer の処理が遅い場合に Producer をブロックしたくない(疎結合化)

SQS のキュータイプ:

タイプ特徴向いているケース
標準キュー高スループット・少なくとも1回配信(重複あり)・順序保証なしスループット重視・処理が冪等なケース
FIFOキュー厳密な順序・1回のみ配信(重複なし)・スループット上限あり順序と重複排除が必要(金融・在庫など)

💡 デッドレターキュー(DLQ)を必ず設定する

処理に繰り返し失敗したメッセージは DLQ(Dead Letter Queue)に移動させる設定を入れること。DLQ がないと、処理できないメッセージがキューに留まり続け、Consumer が無限ループでリトライし続けるコスト問題が発生する。

SNS — Pub/Sub(1対多配信)

SNS(Simple Notification Service)は1つのメッセージを複数の受信者に同時配信する Pub/Sub モデルだ。 トピックに発行(Publish)されたメッセージは、サブスクライブしているすべてのエンドポイント(Lambda / SQS / HTTP / Email など)に配信される。

SNS の主な用途:

  • ファンアウト:1つのイベントを複数の SQS キューに同時配信(例: 注文完了 → 在庫更新キュー + 配送依頼キュー)
  • アラート通知:CloudWatch アラーム → SNS → Email / Slack(Lambda 経由)
  • モバイルプッシュ通知:iOS / Android 向けプッシュ通知

SNS + SQS の組み合わせが定番

SNS で 1対多に配信し、各受信者は SQS キューを経由して非同期処理する「SNS → SQS → Lambda/ECS」のパターンが最も一般的だ。SNS に直接 Lambda をサブスクライブすることもできるが、SQS を挟むことでバッファリング・リトライ・DLQ の機能が追加される。

EventBridge — イベントバス・スケジューラー

EventBridge はサーバーレスのイベントバスで、AWS サービス間・SaaS・自社アプリからのイベントを ルールに基づいてターゲット(Lambda / ECS / SQS 等)に配信する。 また EventBridge Scheduler は Cron 式での定期実行や1回限りの未来時刻実行をサポートする。

EventBridge を選ぶケース:

  • 定期バッチ(Cron の代替):「毎日 2:00 に Lambda を実行」→ EventBridge Scheduler + Lambda
  • AWS サービス間のイベント連携:「EC2 インスタンスが停止したら自動で Lambda を実行」
  • SaaS イベント連携:Salesforce / Zendesk 等の SaaS イベントを AWS サービスに連携
  • カスタムイベントバス:マイクロサービス間のイベント駆動アーキテクチャ

💡 JP1 / Cron の移行先

オンプレの JP1 や crontab による定期バッチは、EventBridge Scheduler + Lambda または ECS タスクで置き換えるのが標準的だ。ジョブ間の依存関係が複雑な場合は Step Functions と組み合わせる。

Step Functions — ワークフローオーケストレーション

Step Functions はステートマシンベースのワークフローサービスだ。 複数の Lambda / ECS タスク / API 呼び出しを 条件分岐・並列実行・エラーリトライ・タイムアウトを含む形で定義できる。

Step Functions を選ぶケース:

  • 複数ステップのジョブに依存関係がある(ジョブ A 完了後にジョブ B を実行など)
  • ステップごとのエラーハンドリング・リトライ・フォールバックが必要
  • 長時間実行のワークフロー(Lambda の15分制限を超える処理の組み合わせ)
  • 人間の承認(ヒューマンアプルーバル)が途中に入るワークフロー

ワークフロータイプ:

  • Standard:実行状態を保持。最大1年間。監査ログ完備。コストは実行ごと
  • Express:高スループット・短時間処理向け。最大5分。コストは実行数+時間

オンプレ対応マッピング

オンプレAWS サービス補足
crontab / at コマンドEventBridge SchedulerCron 式をそのまま使える
JP1 / A-AUTO(ジョブスケジューラー)EventBridge + Step Functionsジョブ依存関係は Step Functions
ActiveMQ / RabbitMQ(キュー)SQS(標準 or FIFO)AMQP 互換は Amazon MQ も選択肢
Kafka(メッセージストリーム)MSK(Managed Streaming for Kafka)Kafka 互換 API をそのまま使えるマネージドサービス
独自イベント連携基盤EventBridge(カスタムバス)イベントスキーマのレジストリ機能あり

実務での組み合わせパターン

実際の移行でよく使う組み合わせパターンを示す。

パターン1:非同期 API 処理(スパイク吸収)

Web API → SQS → Lambda(またはECSタスク)→ DB

パターン2:定期バッチ(Cron 代替)

EventBridge Scheduler → Lambda(軽量処理)
EventBridge Scheduler → ECS タスク(重い処理・15分超)

パターン3:複雑なジョブワークフロー

EventBridge Scheduler → Step Functions(ワークフロー制御) → Lambda / ECS(各ステップ)

パターン4:イベント駆動ファンアウト

アプリ → SNS(トピック) → SQS キュー × n本 → Lambda × n本(並列処理)

次の章では…

PART 07 では監視・ログの選び方を解説する。CloudWatch / X-Ray / OpenSearch Service の使い分けと、オンプレの Zabbix / Nagios からの移行パターンを整理する。

→ PART 07 — 監視・ログの選び方へ