EventBridgeルールとEventBridgeスケジュールの違い

# はじめに

EventBridgeをCloudFormationにて作成した際に、ルールとスケジュールどちらもcron式を用いてスケジュール駆動で設定することが可能であることを知りました。では、どのような違いがあり、どのように使い分ければよいのか気になり、本記事を作成するに至りました。

## 対象
- EventBridgeルールとスケジュールの違いについて概要を掴みたい方
- どのような使用方法の棲み分けができるか知りたい方

## 結論
スケジュールとターゲットの関係が1対多か1対1かによって、どちらを使えばよいかが決まります。

- **1対多**の場合、**EventBridgeルール**を用います。
- **1対1**の場合、**EventBridgeスケジュール**を用います。

これらの理由について、これから解説します。

## EventBridgeルールの場合
### 特徴
Amazon EventBridgeルールでは、1つのルールに対して最大5つのターゲットを指定することができます。これにより、1つのイベントまたはスケジュールによって、複数のターゲットに配信されるように設定できます。

### ユースケース
1. **マイクロサービス間の通信**
   - **例**: あるマイクロサービスが新しいユーザー登録イベントを発行し、他のマイクロサービスがそのイベントを受け取って処理を行う場合。
   - **詳細**: 新しいユーザーが登録されると、EventBridgeルールがトリガーされ、複数のターゲット（例えば、メール通知サービス、データベース更新サービス、分析サービス）にイベントを送信します。

2. **SaaSアプリケーションとの統合**
   - **例**: SalesforceやGithubなどのSaaSアプリケーションからのイベントを処理する場合。
   - **詳細**: Salesforceで新しいリードが作成されると、そのイベントがEventBridgeに送信され、ルールがトリガーされてAWS Lambda関数を呼び出し、リード情報をデータベースに保存します。

3. **クロスアカウントイベント配信**
   - **例**: 異なるAWSアカウント間でイベントを配信する場合。
   - **詳細**: あるアカウントで発生したイベントを別のアカウントのイベントバスにルーティングし、ターゲットに配信します。


## EventBridgeスケジュールの場合
### 特徴
Amazon EventBridgeスケジュールでは、1つのスケジュールに対して1つのターゲットしか指定することができません。よって、1対多の場合はEventBridgeルールを用いる必要があります。

:::note info
ここで私はこんな疑問を持っていました。
**EventBridgeルールで１：多で設定できるなら、EventBrideスケジュールは必要なくないか**
結果としては、EventBrideスケジュールは必要でした。
次のセクションにて、その理由を解説します。
::::


### スループットの違い
EventBrideスケジュールはスループットに優れています。具体的には、EventBridgeルールが最大5TPSであるのに対し、EventBrideスケジュールは最大1000TPSに達します。

要するに、大量のスケジュールタスクを管理し何度も呼び出されるようなものは、EventBrideスケジュールに分があると言えます。

この点が、EventBrideスケジュールを選ぶ理由の一つとなります。

### ターゲット数の違い
EventBridgeルールが20ほどのターゲットをサポートしているのに対し、EventBrideスケジュールは270以上のAWSサービスと6000以上のAPIアクションをターゲットとすることができます。


:::note info
**余談**
EventBrideスケジュールにしかないターゲットを複数指定する指定する場合良い方法はないのか。方法としては3つあります。

**①複数スケジュールを作成する**
ターゲットを変更し作成するため、容易に複数配信ができます。比較的低コストで済む一方で、スケジュール数が多くなると管理が複雑になる可能性があります。

**②Lambda関数、SNSトピックを使用してターゲットを分配する**
柔軟に複数のターゲットにイベントを分配することができます。Lambdaであればリクエスト数、実行時間、SNSトピックであればメッセージ数によって料金が決まりますが、比較的低コスト済みそうです。

**③AWS Step Functionsを使用する**
複雑なワークフローを実装することができます。ステートマシン実行中に発生するイベント数に基づいて料金が決まります。複雑なワークフローであると、コストが高くなる可能性があります。
::::

### ユースケース
1. **定期的なタスクの実行**
   - **例**: 毎日深夜にデータベースのバックアップを実行する場合。
   - **理由**: EventBridgeスケジュールは定期的なタスクを1つのターゲットに対して実行するのに最適です。スケジュールの設定が簡単で、定期的なジョブの管理に適しています。

2. **高頻度のイベント呼び出しが必要な場合**
   - **例**: 毎分の監視データの収集と処理。
   - **理由**: EventBridgeスケジュールは高いスループット（1,000 TPS）を持っているため、高頻度でイベントを呼び出す必要がある場合に適しています。

3. **単一のターゲットに対する定期的な通知**
   - **例**: 毎月の請求書支払いリマインダーを送信する場合。
   - **理由**: EventBridgeスケジュールは1つのターゲットに対して定期的に通知を送信するのに適しており、シンプルなスケジュール管理が可能です。

## それぞれの特徴比較
下記にそれぞれの特徴を整理します。

| 特徴 | EventBridgeルール | EventBridgeスケジュール |
| --- | --- | --- |
| **ネームスペース** | `events.amazonaws.com` | `scheduler.amazonaws.com` |
| **リソースタイプ** | `AWS::Events::Rule` | `AWS::Scheduler::Schedule` |
| **スケジュールとターゲットの関係** | 1対多（1つのルールが複数のターゲットを呼び出せる） | 1対1（1つのスケジュールが1つのターゲットを呼び出す） |
| **スケジュール数のクォータ** | 1アカウントあたり1リージョンで300ルール | アカウント毎に100万 |
| **CLIコマンド** | `$ aws events command` | `$ aws scheduler command` |
| **ユースケース** | 複数のターゲットにイベントを送信する必要がある場合や、イベント駆動型アーキテクチャの実装 | 定期的なタスクの実行や高頻度のイベント呼び出しが必要な場合、単一のターゲットに対する定期的な通知 |
| **イベントパターンのマッチング** | 複雑なパターンマッチングが可能 | シンプルなスケジュールベースのトリガー |
| **イベント変換とフィルタリング** | 入力変換やフィルタリングが可能 | 基本的に不要 |
| **ターゲットの数** | 複数のターゲットを設定可能 | 単一のターゲットのみ |
| **スケーラビリティ** | 柔軟性が高いがスケーラビリティに制約がある場合がある | 高いスケーラビリティを持つ |
| **フォールトトレランス** | 高いフォールトトレランスを持つが、追加のリソースが必要 | シンプルで効率的なフォールトトレランス |

情報元：

https://docs.aws.amazon.com/ja_jp/scheduler/latest/UserGuide/what-is-scheduler.html

https://dev.classmethod.jp/articles/eventbridge-scheduler-and-event-bridge-rule-difference/

## まとめ
今回はEventBridgeスケジュールとEventBridgeルールの違いというテーマで、主にどちらを使えばよいかの棲み分けといった所に焦点を当てて書きました。それぞれのどのような特徴によって、棲み分けができるのかを整理することができ、とても勉強になりました。