ITの教科書検索
入門読了 約12分

Amazon EventBridgeとは ― ルールと定期実行

EventBridgeは、AWSの出来事を条件で振り分けてLambdaやSNSへ渡すサービスです。ルールの書き方、Schedulerでの定期実行、SNS・SQSとの違いが分かります。

目次
  1. EventBridgeとは
  2. イベント駆動の考え方
  3. 4つの構成要素の関係
  4. イベントパターンのルール
  5. Schedulerで定期実行
  6. よくある使い方
  7. SNS・SQSとの違い
  8. CloudWatch Eventsとの関係
  9. バスの種類とPipes
  10. ルールが動かないとき
  11. 料金
  12. 練習問題

Amazon EventBridgeとは、出来事を条件で振り分けて次の処理を動かすサービス

Amazon EventBridgeは、AWSのサービスや自分のアプリで起きた出来事を受け取るサービスです。受け取った出来事のうち、条件に合うものを指定の宛先へ渡します。S3にファイルが置かれたらLambdaで処理する、EC2が止まったらメールで知らせる、毎朝9時に集計を動かす。AWSでこうした自動化を作るときに使います。

処理どうしを直接つなぐ必要はありません。サーバーレスなので、サーバの用意も要りません。ルールの書き方と定期実行の作り方、SNS・SQSとの使い分けが分かれば、こうした自動化を自分で組めます。CloudWatch Eventsという名前の古い記事も、いまのEventBridgeの話として読めるようになります。

イベント駆動は、出来事をきっかけに処理を動かす作り

EC2が止まったことを知るには、状態を定期的に調べるプログラムを動かす方法もあります。ただ、調べる処理をずっと動かさなければなりません。止まってから気づくまでに間も空きます。

イベント駆動は逆の作りです。変化が起きた側が知らせを出し、受け取った処理だけが動きます。この知らせをイベントと呼びます。EC2の状態の変化やCloudFormationのスタックの作成が、AWSのドキュメントが挙げるイベントの例です。

EventBridgeのイベントはJSONのデータです。次の例は、EC2インスタンスが止まったときに届くイベントの主な項目です。sourceが送り元、detail-typeが種類で、detailに中身が入ります。

EC2インスタンスが止まったときのイベント(主な項目)
{
  "source": "aws.ec2",
  "detail-type": "EC2 Instance State-change Notification",
  "region": "ap-northeast-1",
  "detail": {
    "instance-id": "i-1234567890abcdef0",
    "state": "stopped"
  }
}

EC2は、誰がこのイベントを受け取るかを知りません。受け取る処理を増やすときも、送る側には手を入れずに済みます。このように相手の状態に左右されない作りを疎結合と呼びます。SQSとSNSの記事でも同じ考え方が出てきます。

イベントソース・イベントバス・ルール・ターゲットの関係

EventBridgeの流れは、4つの構成要素で説明できます。イベントを送る側・受け取る場所・振り分ける条件・渡す先の4つです。

AWSのサービス自分のアプリSaaSのパートナーイベント送信イベントバス条件と比べるルールA一致するルールB一致するルールC一致しない渡すLambda関数渡すSNSトピック何もしない
イベントバスは、届いたイベントをルールごとの条件と比べます。一致したルールの宛先にだけイベントを渡し、一致しないルールからは何も送りません。
EventBridgeの4つの構成要素(AWSのユーザーガイドをもとに作成)
構成要素すること例
イベントソースイベントをバスへ送るAWSのサービス・自分のアプリ・SaaSのパートナー
イベントバスイベントを受け取り、ルールと比べるアカウントに最初からあるデフォルトイベントバス
ルール条件に合うイベントを宛先へ渡すEC2がstoppedになったら通知する
ターゲット渡されたイベントで処理を動かすLambda関数・SNSトピック・SQSキュー

どのアカウントにもデフォルトイベントバスが最初からあり、AWSのサービスのイベントはここに自動で届きます。ルールは1つのバスに属し、そのバスに届いたイベントだけを見ます。ルール1つに設定できるターゲットは5つまでです。ルールの数は、既定でバスごとに300までです。

1つのイベントが複数のルールに一致すると、一致したルールがそれぞれのターゲットへ渡します。どのルールにも一致しなければ、EventBridgeは何もしません。

EventBridgeのルールは、イベントパターンで条件を書く

ルールには、届いたイベントの中身で判断するものと、決まった時刻に動くものがあります。中身で判断するルールの条件をイベントパターンと呼びます。次のパターンは、EC2インスタンスがstoppedになったイベントだけを選びます。

EC2が止まったイベントを選ぶイベントパターン
{
  "source": ["aws.ec2"],
  "detail-type": ["EC2 Instance State-change Notification"],
  "detail": {
    "state": ["stopped"]
  }
}

パターンは、イベントと同じ形のJSONで書きます。この例では、source・detail-type・stateの3つがすべて合ったイベントだけが選ばれます。instance-idのように書かなかった項目は、判定に使われません。

次の図で届いたイベントを選ぶと、3つのルールのどれに一致するかが切り替わります。ルールBのように条件を少なくすると、より多くのイベントに一致します。

  • ルールAEC2がstoppedになったら、SNSトピックへ渡す
  • ルールBEC2の状態が変わったら、ロググループへ渡す
  • ルールCphotosバケットにオブジェクトが作られたら、Lambda関数へ渡す
届いたイベント
{
  "source": "aws.ec2",
  "detail-type": "EC2 Instance State-change Notification",
  "detail": { "state": "stopped" }
}
  • ルールA一致stateがstoppedです。
  • ルールB一致stateは問わないので一致します。
  • ルールC不一致sourceがaws.s3ではありません。
2つのルールが一致し、SNSトピックとロググループの両方へ渡します。

EventBridgeの定期実行は、Schedulerで作る

毎日0時にLambdaを動かすような定期実行には、2つの方法があります。1つはイベントバスに作るスケジュールルールで、もう1つはEventBridge Schedulerです。

AWSのドキュメントは、スケジュールルールを古い機能(legacy)と書いています。定期実行に勧めているのはSchedulerです。スケジュールルールも引き続き使えますが、これから作るならSchedulerを選びます。

スケジュールルールとEventBridge Schedulerの違い(AWSのユーザーガイドとFAQをもとに作成)
比べる点スケジュールルールEventBridge Scheduler
時刻の基準UTC+0だけタイムゾーンを指定できる
1回だけの実行専用の書き方は無いat式でできる
書き方cron式・rate式cron式・rate式・at式
イベントバスデフォルトイベントバスに作るバスは要らない
呼び出せる先ルールのターゲット270以上のAWSサービスの、6,000以上のAPI操作

cron式は、分・時・日・月・曜日・年の6項目を空白で区切って書きます。日と曜日の両方を*にはできないので、片方を?にします。Schedulerでは、式と別にタイムゾーンを指定できます。日本時間の毎日0時なら、式はcron(0 0 * * ? *)で、タイムゾーンはAsia/Tokyoです。

スケジュールルールの時刻はUTC+0です。日本時間の0時はUTCの前日15時なので、式はcron(0 15 * * ? *)になります。この式をタイムゾーンがAsia/TokyoのSchedulerへそのまま写すと、日本時間の15時に動きます。

Schedulerが宛先を呼ぶには、権限を持つ実行ロールが要ります。コンソールで作れば、このロールも自動で用意できます。ロールの考え方はIAMの記事で説明しています。

EventBridgeのよくある使い方

EC2の状態が変わったら通知する

デフォルトイベントバスに、先ほどのイベントパターンでルールを作ります。ターゲットにはSNSトピックを指定します。このトピックをメールアドレスに購読させると、EC2が止まるたびにメールが届きます。CloudWatchのアラームも、状態が変わるとEventBridgeにイベントを送ります。

S3にファイルが置かれたら処理する

S3は、バケットの設定でEventBridgeへの送信を有効にしたときだけイベントを送ります。有効にすると、作成や削除などのイベントがすべて送られます。そこで、ルールでObject Createdを選びます。ターゲットをLambda関数にすれば、ファイルが置かれるたびに関数が動きます。複数の処理を順に動かしたいなら、AWS Step Functionsのステートマシンもターゲットにできます。

SaaSのイベントで処理を動かす

対応するSaaSのパートナーは、AWSアカウントにイベントソースを作れます。これを受け入れてバスに結びつけると、AWSの外の出来事でも同じようにルールで振り分けられます。逆にAWSの外のHTTPSのAPIを呼ぶときは、API destinationsをターゲットにします。外部のサービスが用意したWebhookのURLへ通知するときも同じです。

セキュリティの検出結果に対応する

GuardDutyなどの検出結果もEventBridgeに届きます。CloudTrailが記録するAPI呼び出しもイベントになります。そのため、特定の操作を検知して知らせることもできます。

EventBridgeとSNS・SQSの違いは、誰が宛先を決めるか

3つとも、送る側と受け取る側の間に置くサービスです。次の図は、同じ注文を送ったときの届き方を並べたものです。

EventBridge:条件で選ぶルール注文1一致して渡す在庫一致しないメール一致して渡す分析SNS:全員に届けるトピック注文1届ける在庫届けるメール届ける分析SQS:1つが取りに行くキュー注文1取りに行く処理係1受け取らない処理係2受け取らない処理係3
同じ注文1の届き方です。EventBridgeは条件に合う宛先へ渡し、SNSは全員に届けます。SQSだけは受け取る側が取りに行くので、矢印の向きが逆になります。

EventBridgeでは、イベントの中身を見てルールが宛先を決めます。SNSでは、購読した側が受け取り手になります。SQSでは、受け取る側が自分の都合で取りに行きます。SNSとSQSの違いは、SQSとSNSの記事で流れを1段ずつ確かめられます。

EventBridge・SNS・SQSの違い(AWSのFAQと開発者ガイドをもとに作成)
比べる点EventBridgeSNSSQS
届け方ルールが条件で選んだ宛先へ渡す購読者の全員へ届ける受け取る側が取りに行く
1通の宛先ルール1つに5つまで数千から数百万まで広げられる取りに行った処理の1つ
絞り込みイベント全体の項目に条件を書ける購読ごとに条件を付けられるキュー自体では絞らない
届かないとき既定で24時間・185回まで再試行し、尽きると捨てる。移し先を設定すれば、そこへ移す再試行し、尽きると捨てる。移し先を設定すれば、そこへ移す保持期間の間、キューに残る
向く場面AWSやSaaSの出来事に反応する多くの相手へ一斉に知らせる仕事をためて順に片付ける

3つは組み合わせて使えます。SNSトピックもSQSキューも、ルールのターゲットに指定できるからです。AWSのFAQは、ルールで必要なイベントに絞り、SNSから多数の宛先へ配る形をよくある構成として挙げています。受け取る処理が止まっていても残しておきたいなら、SQSキューをターゲットにします。

CloudWatch Eventsの後継がEventBridge

CloudWatch Eventsは、AWSのサービスの出来事をルールで処理する機能でした。EventBridgeは2019年7月に、この仕組みをもとに登場しました。大きく変わったのは、SaaSのパートナーのイベントも受け取れるようになった点です。

EventBridgeはCloudWatch EventsのAPIを使っています。そのため、既存のデフォルトバスやルールはそのまま引き継げました。いまもAWS CLIのコマンド名はaws eventsです。CloudWatch Eventsの旧ガイドのURLを開くと、EventBridgeのユーザーガイドへ転送されます。古い記事のCloudWatch Eventsのルールは、EventBridgeのルールと読み替えて構いません。

名前は似ていますが、Amazon CloudWatchの監視の機能とは別物です。CloudWatchは、数値とログを集めて異常を見つけます。EventBridgeは、届いた出来事を宛先へ渡します。

イベントバスの種類とEventBridge Pipes

デフォルトイベントバスのほかに、自分のアプリ用のバスやSaaSのパートナー用のバスも作れます。自作のバスのうち、ルールとターゲットで振り分けるものがあります。AWSのドキュメントでの名前はCustom Event Bus - Classicです。

新しいアプリ向けに、AWSはCustom Event Busから始めることを勧めています。このバスでは、ルールの代わりに購読者を作ります。購読者は条件と宛先を持ち、受け取る側のチームが作ります。イベントも1日から365日の間で保持できます。

EventBridge Pipesは、1つの送り元を1つの宛先につなぐ機能です。多くの送り元と宛先を振り分けるのがイベントバスで、1対1の連携に使うのがPipesです。

EventBridgeのルールが動かないときに確かめること

ルールを作ったのに宛先が動かないときは、次の点を確かめます。

  • イベントパターンの値が、実際のイベントの値と合っているか。
  • イベントが届くバスにルールを作ったか。ルールは自分のバスのイベントしか見ません。
  • S3のイベントなら、バケットでEventBridgeへの送信を有効にしたか。有効にしてから反映まで約5分かかります。
  • EventBridgeにターゲットを呼ぶ権限があるか。
  • スケジュールルールなら、時刻をUTC+0で書いたか。

宛先が使えないなどでイベントを届けられないとき、EventBridgeは既定で24時間、最大185回まで届け直します。それでも届かないイベントは捨てられます。権限が足りない、宛先が消えているといったエラーでは、届け直しもしません。こうしたイベントを残しておきたいなら、デッドレターキューとしてSQSの標準キューを設定します。

逆に、ルールが動きすぎることもあります。ターゲットの処理が同じルールに一致するイベントを起こすと、無限に繰り返します。S3のACLの変更を検知して直すルールが、自分の変更でまた動く例をAWSは挙げています。料金も増えるので、パターンはできるだけ細かく書きます。

EventBridgeの料金は、イベントの種類で変わる

ルールで振り分けるバスでは、AWSのサービスが自動で送る管理イベントの受信は無料です。同じアカウントのサービスへ渡す分も無料です。S3のように有効にしてから送るイベントは、管理イベントとは別の扱いです。自分のアプリやSaaSのイベントは、件数に応じて料金がかかります。EventBridge Schedulerは、毎月1,400万回の呼び出しまで無料です。

Custom Event Busは、件数ではなくデータ量で料金が決まります。ここに書いた内容は、2026年10月31日に料金ページで確かめたものです。最新の値はEventBridgeの料金ページで確認してください。

参考にした資料

練習問題(全5問)

Q1EventBridgeのルールが受け持つ仕事はどれ?
Q21つのイベントが2つのルールに一致した。どうなる?
Q3スケジュールルールで、日本時間の毎日0時に動かしたい。cron式はどれ?
Q4CloudWatch EventsとEventBridgeの関係として正しいものはどれ?
Q5S3で作られたオブジェクトのイベントを、多数の宛先へ配りたい。AWSのFAQがよくある形として挙げる構成はどれ?

選んでから「採点する」を押すと、解説つきで答え合わせができます。

関連記事

AWSの記事を続けて読む

AWS 全38本中11本目