EventBridge:事件总线与规则
将事件发布到自定义 EventBridge 总线,编写事件模式规则,将事件筛选并路由到 Lambda、SQS 或 Step Functions 目标
EventBridge:事件总线与规则 是 CoddyKit 上的免费 Cloud & IT Cert Prep 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Cloud & IT Cert Prep 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Cloud & IT Cert Prep 课程共包含 4 节课。
什么是 Amazon EventBridge?
Amazon EventBridge(前身为 CloudWatch Events)是一种无服务器事件总线,可以使用来自 AWS 服务、自有应用程序和 SaaS 提供商的事件,轻松连接各个应用程序。事件是 JSON 对象;EventBridge 根据事件模式规则将事件路由到一个或多个目标。与 SQS(点对点)不同,EventBridge 是发布/订阅路由层,一个事件可以同时分发到多个目标。
事件总线:Default、Custom 和 Partner
EventBridge 有三种事件总线类型。Default 总线接收来自 AWS 服务的事件(EC2 状态变化、S3 事件、CloudTrail API 调用等)。Custom 总线是您为自己的应用程序事件创建的总线,可将应用程序事件与 AWS 服务事件隔离开来。Partner 总线通过预构建的集成直接接收 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"
}]'事件模式规则
事件模式规则使用 JSON 模式定义要匹配的事件,可根据事件字段的任意组合进行筛选(source、detail-type、account、region,或 detail 对象中的字段)。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 可以将匹配的事件路由到 20 多种目标类型,包括 Lambda 函数、SQS 队列、SNS 主题、Step Functions 状态机、Kinesis 数据流、API Gateway 端点、ECS 任务,甚至另一个 EventBridge 总线(用于跨账户路由)。每条规则最多可以配置 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/速率)
EventBridge 规则也可以按计划触发,而不是匹配事件。对于固定间隔触发器,请使用速率表达式(例如 rate(5 minutes));对于基于日历的计划,请使用cron 表达式。计划规则非常适合触发 Lambda 函数执行批量清理任务、发送定期报告或运行每晚的 DMS 任务,从而不再需要基于 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 测试事件重放、从目标遗漏事件的错误中恢复,或使用历史事件为新服务补录数据都很有用。与其他发布/订阅系统相比,这是 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 支持跨账户事件路由:您可以在另一账户中的目标总线上创建基于资源的策略,允许源账户放置事件。这样,集中式监控账户就能接收所有工作负载账户的事件;也可以采用共享服务总线架构,由平台团队将事件路由到各消费方团队的总线。跨区域路由的工作方式类似,但需要明确配置跨区域事件总线目标。
# 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 管道
EventBridge 管道可以在源(SQS、Kinesis、DynamoDB Streams、Kafka)与目标之间创建点对点集成,并可在两者之间选择性地进行筛选和增强(通过 Lambda、Step Functions 或 API Gateway)。管道比编写轮询 Lambda 消费者更简单,因为它们会自动处理轮询、批处理、筛选和路由。当您需要直接的源到目标连接,而不需要完整的发布/订阅总线时,可以使用管道。
# 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 的比较
这三种服务的功能有所重叠,但适用场景不同。SNS:向订阅者(电子邮件、HTTP、SQS、Lambda)进行基于推送的分发,提供简单的发布/订阅功能,但不支持筛选。SQS:用于点对点解耦的持久消息队列,采用消费者拉取语义。EventBridge:基于内容的路由总线,提供架构注册表、归档/重放、SaaS 合作伙伴和跨账户传送,最适合在众多服务之间进行复杂的事件路由。当您需要复杂的路由规则,而不只是简单的分发时,请使用 EventBridge。
EventBridge 架构注册表
EventBridge 架构注册表会自动检测并编录流经事件总线的事件结构。它以 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 解决方案架构师(SAA-C03)相关概念的理解。
课程回顾
本课程介绍了以下内容:EventBridge 使用基于内容的模式规则,将事件同时路由到多个目标;归档和重放功能可以保留并重新处理历史事件,而无需更改代码;EventBridge 管道为来自流式来源的数据提供托管的源到目标管道。接下来,我们将学习如何使用 Step Functions 编排多步骤无服务器工作流。
常见问题解答
「EventBridge:事件总线与规则」课时是免费的吗?
是的 — 「EventBridge:事件总线与规则」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Cloud & IT Cert Prep 课程的其余内容,请升级到 CoddyKit PRO。 Cloud & IT Cert Prep 课程共包含 4 节课。
「EventBridge:事件总线与规则」这节课中我会学到什么?
将事件发布到自定义 EventBridge 总线,编写事件模式规则,将事件筛选并路由到 Lambda、SQS 或 Step Functions 目标 你通过在浏览器中直接运行的动手代码来练习 Cloud & IT Cert Prep,全天候 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
- 编舞模式与编排模式