EventBridge:イベントバスとルール
カスタムEventBridgeバスにイベントを発行し、イベントパターンルールを記述してイベントをフィルタリングし、Lambda、SQS、Step Functionsのターゲットへルーティングします。
「EventBridge:イベントバスとルール」はCoddyKit上の無料Cloud & IT Cert Prepレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはCloud & IT Cert Prep学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Cloud & IT Cert Prepコースには全4レッスンが含まれています。
Amazon EventBridgeとは
Amazon EventBridge(旧称 CloudWatch Events)は、AWSサービス、自社アプリケーション、SaaSプロバイダーからのイベントを使ってアプリケーションを簡単に接続できる、サーバーレスのイベントバスです。イベントはJSONオブジェクトであり、EventBridgeはイベントパターンルールに基づいて、1つ以上のターゲットにルーティングします。SQSがポイントツーポイント方式であるのに対し、EventBridgeはpub/subルーティングレイヤーです。1つのイベントを複数のターゲットに同時にファンアウトできます。
イベントバス:デフォルト、カスタム、パートナー
EventBridgeには3種類のイベントバスがあります。デフォルトバスは、AWSサービスからのイベント(EC2の状態変更、S3イベント、CloudTrail API呼び出しなど)を受信します。カスタムバスは、自社アプリケーションのイベント用に作成するバスです。AWSサービスのイベントからアプリケーションイベントを分離できます。パートナーバスは、事前構築済みの統合を通じてSaaSプロバイダー(Zendesk、Datadog、GitHub、Shopify)からイベントを直接受信します。ポーリング用のLambdaは必要ありません。
# Create a custom event bus for your application
aws events create-event-bus --name my-app-bus
# Put a custom event onto the bus
aws events put-events --entries '[{
"Source": "com.myapp.orders",
"DetailType": "OrderPlaced",
"Detail": "{\"orderId\": \"ORD-123\", \"total\": 99.99}",
"EventBusName": "my-app-bus"
}]'イベントパターンルール
イベントパターンルールは、イベントフィールド(source、detail-type、account、region、またはdetailオブジェクト内のフィールド)の任意の組み合わせをJSONパターンでフィルタリングし、一致するイベントを定義します。EventBridgeは、バス上のすべてのルールに対して各イベントを評価します。一致したイベントは、ルールに設定されたターゲットに転送されます。ルールレベルではOR、パターンオブジェクト内ではANDとして評価されます。
# Create a rule that matches EC2 instance state changes to 'stopped'
aws events put-rule \
--name ec2-stopped-alert \
--event-bus-name default \
--event-pattern '{
"source": ["aws.ec2"],
"detail-type": ["EC2 Instance State-change Notification"],
"detail": {
"state": ["stopped"]
}
}' \
--state ENABLEDターゲットの設定
EventBridgeは、Lambda関数、SQSキュー、SNSトピック、Step Functionsステートマシン、Kinesis Data Streams、API Gatewayエンドポイント、ECSタスク、さらに別のEventBridgeバス(アカウント間ルーティング用)など、20種類を超えるターゲットに一致したイベントをルーティングできます。各ルールには最大5つのターゲットを設定できます。EventBridgeはターゲットを非同期で呼び出し、失敗時には指数バックオフで再試行します。
# Add an SNS topic and Lambda function as targets for the rule
aws events put-targets \
--rule ec2-stopped-alert \
--event-bus-name default \
--targets '[{
"Id": "notify-ops",
"Arn": "arn:aws:sns:us-east-1:123456789012:ops-alerts"
}, {
"Id": "auto-remediate",
"Arn": "arn:aws:lambda:us-east-1:123456789012:function:RestartEC2"
}]'入力変換
デフォルトでは、EventBridgeはイベントJSON全体をターゲットに渡します。入力変換を使うと、配信前にイベントの形を変更できます。特定のフィールドを抽出したり、新しいJSONオブジェクトを構成したり、カスタム文字列を作成したりできます。Lambda関数やAPIエンドポイントがEventBridgeイベントエンベロープ全体ではなく、特定の形式のペイロードを必要とする場合に便利です。データの形を変えるだけの中継用Lambdaも不要になります。
# Input transformer: extract orderId and total from detail
# InputPathsMap extracts values by JSON path
{
'InputPathsMap': {
'orderId': '$.detail.orderId',
'total': '$.detail.total'
},
'InputTemplate': '{
"message": "New order <orderId> for $<total>",
"channel": "ops"
}'
}スケジュールルール(Cron/Rate)
EventBridgeのルールは、イベントとの一致ではなく、スケジュールに基づいて実行することもできます。固定間隔でトリガーするにはrate式(例:rate(5 minutes))を使用し、カレンダーに基づいてスケジュールするにはcron式を使用します。スケジュールルールは、バッチクリーンアップ処理、定期レポートの送信、夜間のDMSタスクの実行などでLambda関数を起動するのに最適です。EC2ベースのcronジョブを置き換えられます。
# Create a scheduled rule that fires every day at midnight UTC
aws events put-rule \
--name nightly-cleanup \
--schedule-expression 'cron(0 0 * * ? *)' \
--state ENABLED
aws events put-targets \
--rule nightly-cleanup \
--targets '[{
"Id": "cleanup-lambda",
"Arn": "arn:aws:lambda:us-east-1:123456789012:function:NightlyCleanup"
}]'イベントのアーカイブとリプレイ
EventBridgeでは、バス上のすべてのイベント、またはフィルタリングした一部のイベントをアーカイブし、設定可能な期間にわたってイベントアーカイブに保持できます。その後、いつでもアーカイブ済みイベントをバスにリプレイできます。新しいLambdaバージョンをテストするためにイベントを再生したり、ターゲットがイベントを取りこぼしたバグから復旧したり、履歴イベントで新しいサービスをバックフィルしたりする場合に便利です。これは、他のpub/subシステムにはない、EventBridge独自の強力な運用上のセーフティネットです。
# Create an event archive for the custom bus
aws events create-archive \
--archive-name my-app-archive \
--event-source-arn arn:aws:events:us-east-1:123456789012:event-bus/my-app-bus \
--retention-days 30
# Replay archived events from a specific time window
aws events start-replay \
--replay-name replay-missed-orders \
--event-source-arn arn:aws:events:us-east-1:123456789012:archive/my-app-archive \
--event-start-time 2024-01-10T00:00:00Z \
--event-end-time 2024-01-10T06:00:00Z \
--destination '{"Arn": "arn:aws:events:us-east-1:123456789012:event-bus/my-app-bus"}'アカウント間およびリージョン間のルーティング
EventBridgeでは、別のアカウントにあるターゲットバスにリソースベースポリシーを作成し、送信元アカウントによるイベントのputを許可することで、アカウント間イベントルーティングを実現できます。これにより、中央の監視アカウントですべてのワークロードアカウントからイベントを受信したり、プラットフォームチームがイベントをコンシューマーチームのバスにルーティングする共有サービスバスアーキテクチャを構築したりできます。リージョン間ルーティングも、明示的なリージョン間イベントバスターゲットを使用して同様に機能します。
# Allow a source account (111111111111) to send events to this bus
aws events put-permission \
--event-bus-name my-central-bus \
--action events:PutEvents \
--principal 111111111111 \
--statement-id allow-source-accountEventBridge Pipes
EventBridge Pipesは、ソース(SQS、Kinesis、DynamoDB Streams、Kafka)とターゲットの間に、必要に応じてフィルタリングやエンリッチメント(Lambda、Step Functions、API Gateway経由)を挟んだポイントツーポイント統合を作成します。Pipesは、ポーリング用のLambdaコンシューマーを記述するよりも簡単です。ポーリング、バッチ処理、フィルタリング、ルーティングを自動的に処理します。完全なpub/subバスを使わず、ソースからターゲットへの直接接続が必要な場合にPipesを使用します。
# Create an EventBridge Pipe from SQS to Lambda
aws pipes create-pipe \
--name sqs-to-processor \
--source arn:aws:sqs:us-east-1:123456789012:incoming-orders \
--target arn:aws:lambda:us-east-1:123456789012:function:ProcessOrder \
--role-arn arn:aws:iam::123456789012:role/PipeRole \
--source-parameters '{
"SqsQueueParameters": {"BatchSize": 10}
}' \
--filter-criteria '{
"Filters": [{"Pattern": "{\"body\": {\"orderType\": [\"PRIORITY\"]}}"}]
}'EventBridge、SNS、SQSの比較
これら3つのサービスには重なる部分がありますが、用途は異なります。SNS:サブスクライバー(メール、HTTP、SQS、Lambda)へのプッシュベースのファンアウト。フィルタリングを行わないシンプルなpub/subです。SQS:コンシューマーがプルする方式で、ポイントツーポイントの疎結合を実現する永続的なメッセージキューです。EventBridge:スキーマレジストリ、アーカイブとリプレイ、SaaSパートナー、アカウント間配信を備えた、コンテンツベースのルーティングバスです。多数のサービス間で複雑なイベントルーティングを行う場合に適しています。単純なファンアウトではなく、高度なルーティングルールが必要な場合にEventBridgeを使用します。
EventBridge Schema Registry
EventBridge Schema Registryは、イベントバスを流れるイベントの構造を自動的に検出してカタログ化します。スキーマをOpenAPI 3.0形式で保存するため、開発者は利用可能なイベントを把握し、イベントを型付きオブジェクトにデシリアライズするコードバインディング(Java、Python、TypeScript)を生成できます。これにより、JSONを手動で解析するコードが不要になり、イベント駆動型サービス全体で型安全性を確保できます。自社アプリケーションが生成するイベント用に、カスタムイベントスキーマを手動で登録することもできます。
# Enable schema discovery on a custom event bus
aws schemas create-discoverer \
--source-arn arn:aws:events:us-east-1:123456789012:event-bus/my-app-bus \
--description 'Auto-discover schemas from app bus'
# List discovered schemas
aws schemas list-schemas \
--registry-name discovered-schemas理解度チェック
このレッスンで扱ったAWS Solutions Architect(SAA-C03)の概念について、理解度を確認しましょう。
レッスンのまとめ
このレッスンでは、EventBridgeがコンテンツベースのパターンルールを使って、複数のターゲットに同時にイベントをルーティングすること、アーカイブとリプレイによって、コードを変更せずに履歴イベントを保持して再処理できること、そしてEventBridge Pipesがストリーミングソースからターゲットへのマネージドパイプラインを提供することを学びました。次は、Step Functionsを使った複数ステップのサーバーレスワークフローのオーケストレーションについて学びます。
よくある質問
「EventBridge:イベントバスとルール」レッスンは無料ですか?
はい。「EventBridge:イベントバスとルール」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Cloud & IT Cert Prepコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Cloud & IT Cert Prepコースには全4レッスンが含まれています。
「EventBridge:イベントバスとルール」で何を学びますか?
カスタムEventBridgeバスにイベントを発行し、イベントパターンルールを記述してイベントをフィルタリングし、Lambda、SQS、Step Functionsのターゲットへルーティングします。 ブラウザで直接実行するハンズオンコードでCloud & IT Cert Prepを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Cloud & IT Cert Prepを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのCloud & IT Cert Prepは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。
「EventBridge:イベントバスとルール」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このCloud & IT Cert Prepレッスンでコードを書いて実行できますか?
はい。すべてのCloud & IT Cert Prepレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- EventBridge:イベントバスとルール
- Step Functions:サーバーレスワークフローのオーケストレーション
- リアルタイムイベント処理向けKinesis Data Streams
- コレオグラフィーとオーケストレーションのパターン