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?

# S3 → SQS → ECS と S3 → EventBridge → ECS のアーキテクチャ比較

Posted at

はじめに

AWSのクラウドアーキテクチャを設計する際、S3バケットにファイルがアップロードされたときに自動的にECS(Elastic Container Service)でタスクを実行したいシナリオはよくあります。代表的な実現方法として、以下の2つの構成があります。

  • S3 → SQS → ECS
  • S3 → EventBridge → ECS

本記事では、それぞれのアーキテクチャの特徴、メリット・デメリット、利用シーンの違い、失敗時の対応策などについて、具体的な事例を交えて解説します。


1. S3 → SQS → ECS アーキテクチャ

🔍 アーキテクチャ構成

  1. Amazon S3: ファイルがアップロードされると、S3イベント通知を設定してSQSにメッセージを送信します。
  2. Amazon SQS (Simple Queue Service): メッセージキューとして、ECSが処理するタスクを蓄積します。
  3. Amazon ECS: SQSからメッセージを取得してタスクを実行します。

メリット

  • メッセージバッファリング: SQSがメッセージを一時的に保存することで、ECSタスクが処理を追いつけない場合でもデータが失われません。
  • メッセージの再試行が容易: Visibility Timeout と DLQ(デッドレターキュー)を使って、失敗したメッセージを安全に再試行できます。
  • 高いスケーラビリティ: SQSのメッセージ数に応じて、ECSタスクを動的にスケール可能です。
  • メッセージ順序の保証 (FIFOキュー): メッセージの順序が重要な場合にFIFOキューを利用できます。

⚠️ デメリット

  • 遅延が発生する可能性: ECSはSQSをポーリングする必要があり、最短でも1分間の遅延が発生することがあります。
  • ポーリングコストがかかる: SQSを頻繁にポーリングする場合、APIコールのコストが増加します。
  • メッセージキュー管理が必要: キューが溢れるとメッセージが消失するリスクがあります。

🛠️ 失敗時の処理方法

  • Visibility Timeout: 処理に失敗すると、メッセージはキュー内に再度表示され、再実行が可能になります。
  • DLQ (デッドレターキュー): 一定回数以上失敗したメッセージはDLQに移行し、手動で再処理することも可能です。

2. S3 → EventBridge → ECS アーキテクチャ

🔍 アーキテクチャ構成

  1. Amazon S3: ファイルがアップロードされると、S3イベント通知を設定してEventBridgeにイベントを送信します。
  2. Amazon EventBridge: 特定のイベントパターンに基づき、ECSタスクを直接実行します。
  3. Amazon ECS: イベントを受け取ったECSタスクが即時に処理を開始します。

メリット

  • 即時実行可能: S3にファイルがアップロードされると、ほぼリアルタイムでECSタスクが起動します。
  • 設定がシンプル: EventBridgeルールでECSをターゲットに設定するだけで完了します。
  • 複雑なフィルタリングが可能: 特定のファイルタイプやパスに基づいたイベント処理が可能です。

⚠️ デメリット

  • 大量のイベントに弱い: イベントごとに1つのECSタスクが起動するため、ECSタスク数が急激に増加するリスクがあります。
  • イベントが失われる可能性: イベントが処理されない場合、設定によってはそのまま失われる可能性があります。

🛠️ 失敗時の処理方法

  • 再試行ポリシー: EventBridgeでは再試行ポリシーを設定できますが、ECSタスク全体の再実行となるため、部分的な失敗には対応しにくいです。
  • エラー通知設定: EventBridgeからSNSやLambdaに通知を飛ばして、手動でエラー処理を行うことも可能です。

🔍 SQS と EventBridge の違いをまとめた比較表

項目 S3 → SQS → ECS S3 → EventBridge → ECS
配信方法 プル型(ポーリング) プッシュ型(即時実行)
遅延時間 最小1分 (ポーリング間隔) 即時実行
メッセージ保持期間 最大14日間 24時間 (イベントバス内)
再試行方法 メッセージ単位(DLQ対応) タスク単位(再試行ポリシー設定可能)
エラー時の対応 メッセージがキューに残る 失敗したイベントは設定により消失する可能性
スケーラビリティ キューのメッセージ数に応じて調整可能 イベント数に応じてタスクが自動実行

🏁 結論: 適切なアーキテクチャの選び方

S3 → SQS → ECS を選ぶべき場合

  • 大量のファイルが頻繁にS3にアップロードされる場合
  • メッセージを バッファリングして順序通りに処理したい場合
  • メッセージの再試行やエラー管理をしっかり行いたい場合

S3 → EventBridge → ECS を選ぶべき場合

  • 即時実行が求められる場合
  • イベント頻度が 低い、またはシンプルなワークフローの場合
  • フィルタリング設定が必要で、特定の条件下でのみECSタスクを実行したい場合

💡 まとめ

S3からECSタスクを実行する場合、SQSを使うことでメッセージのバッファリングや再試行が可能になります。一方、EventBridgeを使うことで、よりシンプルかつ即時実行が可能です。

システムの要件やメッセージの頻度、エラー処理の方針に応じて、最適なアーキテクチャを選びましょう。

本記事を参考に、あなたのプロジェクトに最適なAWSアーキテクチャを構築してみてください!

記事が良ければぜひ「いいね!」をお願いいたします!

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?