跳至主要内容

Amazon EventBridge:事件驱动架构指南

本指南通过实践示例、搭建步骤与最佳实践,带您使用 Amazon EventBridge 构建可扩展的事件驱动应用。
· 11分钟 阅读

使用 AI 探索

Amazon EventBridge 是一项功能强大的无服务器事件总线服务,可帮助开发者以极低的运维开销构建事件驱动架构。 

在我从事云原生系统的工作中,深刻体会到实时响应与服务解耦对于构建可扩展、易维护的应用至关重要,而 EventBridge 正是为此而生。

什么是 Amazon EventBridge?

在进入配置之前,了解 EventBridge 是什么、为何重要,以及它如何融入 AWS 更广泛的事件驱动工具生态非常关键。

Amazon EventBridge 概览

Amazon EventBridge 是一项全托管、无服务器的事件总线服务,使应用能够以近实时的方式通过事件进行通信。 

它简化了在事件生产者(变更来源,如 S3、DynamoDB 或自定义应用)与事件消费者(对这些变更作出响应的服务,如 Lambda、Step Functions 或 SNS)之间进行事件路由的工作。

Image containing a visual diagram of Amazon EventBridge routing events from producers to multiple targets.

展示 Amazon EventBridge 将事件从生产者路由到多个目标的可视化示意图。来源:AWS Blogs

EventBridge 以可扩展性与灵活性为核心设计。 

它可自动扩展以处理每秒数百万条事件,并通过基于 JSON 的规则实现复杂的路由逻辑。

其关键能力包括:

  • 与 90 多项 AWS 服务的原生集成(如 EC2、CodePipeline、CloudTrail)
  • 支持外部 SaaS 事件源,如 Zendesk、Shopify 和 Datadog
  • 内置模式发现与注册表,可自动检测并记录事件结构
  • 事件归档与重放,支持调试、审计或对历史事件再处理

这使 EventBridge 成为构建解耦、具备弹性的云架构的基础工具。

EventBridge 与事件驱动架构

EventBridge 构建于事件驱动架构(EDA)模型之上。

在 EDA 中,服务通过发布与响应事件进行通信,而不是彼此进行同步调用。

例如,与其调用其他服务的 API 来启动任务,不如直接发布一个事件,如"ImageUploaded",而其他监听该事件的服务将据此作出反应。

下图展示了该设置,其中 Amazon API Gateway 作为通往核心 EventBridge 事件总线的安全入口。

Image showing Amazon API Gateway as a secure entry point to the core EventBridge bus.

展示 Amazon API Gateway 作为核心 EventBridge 总线安全入口的图示。来源:AWS Blogs

事件驱动架构的优势:

Image demonstrating the benefits of event-driven architecture.

展示事件驱动架构优势的图示。

  • 松耦合:服务彼此独立,不需相互感知。
  • 可扩展性:系统可独立扩展各个组件。
  • 容错性:系统某部分的故障不会级联影响其他部分。
  • 异步处理:提升响应速度与系统性能。

EventBridge 作为 AWS 上 EDA 的骨干,使您能够将微服务、云资源乃至第三方系统灵活连接,而无需紧耦合。

> 如果您想系统掌握 AWS 的事件驱动生态,可探索AWS Cloud Technology and Services 课程。

EventBridge 与其他事件驱动选项的区别

AWS 提供多种事件与消息处理工具,但 EventBridge 具备区别于 SNS 与 SQS 的独特特性。

SNS(Simple Notification Service) 

SNS 适合简单的发布/订阅消息场景。

您可以向主题发布消息,并将其投递给多个订阅者,如电子邮件、短信或 Lambda。 

但其在复杂路由与事件过滤方面有所不足。

SQS(Simple Queue Service)

SQS 提供可靠、可扩展的消息队列以存储与处理消息。 

消费者轮询队列获取消息,适用于异步、解耦系统,但不支持实时的推送式路由。

EventBridge

EventBridge 融合二者优势,具备实时路由、丰富过滤、模式校验与 SaaS 集成等能力。 

它专为需要灵活规则、多个目标与跨服务无缝集成的复杂大规模事件驱动系统而设计。

CloudWatch Events

CloudWatch Events 是 EventBridge 的前身。 

EventBridge 作为下一代替代方案,新增了:

  • SaaS 合作伙伴集成
  • 自定义事件总线
  • 模式发现与注册表
  • 改进的规则与权限管理

如果您仍在使用 CloudWatch Events,建议迁移至 EventBridge 以获得更丰富的能力。

以下是所讨论服务的快速对比:

Feature

SNS

SQS

EventBridge

Delivery Model

Push (pub/sub)

Polling (queue)

Push (with rule-based routing)

Event Filtering

Basic (message attributes)

None

Advanced (JSON pattern matching)

Fan-out Support

Yes

No

Yes

Schema Support

No

No

Yes (schema registry)

Integration with SaaS

Limited

Limited

Yes (native SaaS integrations)

Event Replay

No

With retention

Yes

Dead-letter Queue (DLQ)

Yes

Yes

Yes

Amazon EventBridge 的核心组件与关键功能

要高效使用 Amazon EventBridge,必须了解其核心构建模块。 

这些组件协同工作,以极低的基础设施开销实现动态的事件驱动工作流。 

下面详细解析每个组件的作用与用法。

事件总线

EventBridge 的核心是事件总线,它是所有事件流经的通道。 

事件总线从 AWS 服务、自定义应用或 SaaS 提供方接收事件,并根据匹配规则将其路由到相应目标。

下图展示了 AWS 控制台中的 EventBridge Buses 区域。

Image containing a screenshot of the AWS Console showing the EventBridge Buses section.

展示 AWS 控制台中 EventBridge Buses 区域的截图。

事件总线类型

AWS 中可用的事件总线类型包括:

默认事件总线:

  • 在每个 AWS 账户中自动预置。
  • 主要用于接收来自 AWS 服务的事件(如 EC2 状态变更或 S3 事件)。
  • 如无其他需要,您也可将自定义事件发送到默认总线。

自定义事件总线:

  • 由您创建,用于支持不同的域、服务或工作负载。
  • 非常适合隔离应用事件,或区分开发与生产环境。
  • 可更精细地控制访问策略与事件路由。

用例示例:

为不同领域创建独立事件总线,例如电商运营与分析分别使用不同总线,以保持事件流的隔离与可管理性。

创建自定义事件总线:

aws events create-event-bus --name my-app-bus

理解规则与目标

规则定义哪些事件应路由到哪些目标。 

它们使用 JSON 模式匹配来过滤总线上的入站事件,并将其转发至一个或多个目标。

规则的要点:

  • 您可以基于任意事件属性进行过滤,如来源、detail-type或嵌套的 detail 字段。
  • 多个规则可以匹配同一事件,从而实现扇出(fan-out)行为。
  • 单个规则可包含多个目标,使事件触发并行处理流水线。

支持的目标包括:

  • AWS Lambda
  • Step Functions
  • Kinesis Data Streams
  • SNS、SQS
  • ECS 任务
  • API Gateway

Image containing AWS service icons for supported targets.

展示受支持目标的 AWS 服务图标。

以下示例演示如何定义事件规则并将其关联到 Lambda 函数作为目标:

aws events put-rule \
  --name "ImageUploadRule" \
  --event-pattern file://event-pattern.json \
  --event-bus-name my-app-bus

aws events put-targets \
  --rule "ImageUploadRule" \
  --targets "Id"="1","Arn"="arn:aws:lambda:region:account-id:function:ImageProcessor"

示例事件模式(event-pattern.json):

{
  "source": ["myapplication.upload"],
  "detail-type": ["Image Uploaded"]
}

Pipes

EventBridge Pipes 简化了源(如 DynamoDB Streams)与目标(如 SQS 或 Lambda)之间的连接,无需自定义代码。

下图展示了 AWS 控制台中的 EventBridge Pipes 区域。

Image containing a screenshot of the AWS Console showing the EventBridge Pipes section.

展示 AWS 控制台中 EventBridge Pipes 区域的截图。

Pipes 的关键特性:

  • 过滤:使用事件模式限制通过管道的事件。
  • 富化:通过调用 Lambda,在投递前为事件添加上下文。
  • 转换:使用输入转换器改变事件结构。

何时使用 Pipes:

  • 将数据流(如 Kinesis 或 DynamoDB)连接到下游消费者。
  • 集成不同事件格式的 AWS 服务。

Scheduler

EventBridge Scheduler 支持基于时间的任务执行,适用于自动化日常备份、每小时数据同步或按计划触发工作流等操作。

下图展示了 AWS 控制台中的 EventBridge Scheduler 区域。

Image containing a screenshot of the AWS Console showing the EventBridge Scheduler section.

展示 AWS 控制台中 EventBridge Scheduler 区域的截图。

关键特性包括:

  • 一次性或周期性执行
  • 支持 cron 表达式或基于 rate 的表达式
  • 控制时区、开始/结束窗口与重试逻辑

创建计划事件:

aws scheduler create-schedule \
  --name "DailyETLJob" \
  --schedule-expression "rate(1 day)" \
  --flexible-time-window '{"Mode":"OFF"}' \
  --target '{"Arn":"arn:aws:lambda:region:account-id:function:RunETL", "RoleArn":"arn:aws:iam::account-id:role/SchedulerExecutionRole"}'

该计划会每天调用 RunETL Lambda 函数。

模式注册表与事件重放

模式注册表有助于开发者理解并记录事件结构。 

它会自动发现来自 AWS 服务与自定义应用的模式,并将其存储在注册表中。

模式注册表的好处包括:

  • 生成 Java、Python 与 TypeScript 的强类型代码绑定。
  • 提升一致性,减少事件驱动应用中的解析错误。

事件重放允许您将总线上的事件归档并在之后重放。 

这在以下场景中非常有价值:

  • 调试失败的工作流
  • 在修复缺陷后重放事件
  • 恢复丢失或延迟的数据处理

Image containing a conceptual diagram illustrating EventBridge routing events.

展示 EventBridge 路由事件的概念性示意图。来源:AWS Blogs

启用事件归档:

aws events create-archive \
  --archive-name "MyApplicationArchive" \
  --event-source-arn "arn:aws:events:region:account-id:event-bus/my-application-bus" \
  --retention-days 7

重放已归档事件:

aws events start-replay \
  --replay-name "MyReplay" \
  --source-arn "arn:aws:events:region:account-id:archive/MyApplicationArchive" \
  --destination "arn:aws:events:region:account-id:event-bus/my-application-bus"

这些组件——事件总线、规则、Pipes、Scheduler 与模式注册表——共同构建了一个全面且灵活的平台,用于在 AWS 上搭建与管理健壮的事件驱动架构。 

它们各自的角色有助于服务解耦、提升可扩展性,并加快应用开发速度。

使用 EventBridge 构建事件驱动应用

在完成基础设置后,接下来将 Amazon EventBridge 应用于实际的应用工作流。 

在您的应用中设置 EventBridge

以下示例展示如何使用 AWS CLI 从应用发出自定义事件:

aws events put-events --entries '[
  {
    "Source": "myapplication.media",
    "DetailType": "ImageUploaded",
    "Detail": "{\"bucket\": \"my-bucket-name\", \"key\": \"image.jpg\"}",
    "EventBusName": "default"
  }
]'

说明:

  • Source:发出事件的服务名称或域。
  • DetailType:事件的类型。
  • Detail:负载,以字符串化 JSON 的形式编码。
  • EventBusName:接收并路由事件的总线。

您可以使用 SDK(如 Boto3、AWS SDK for JavaScript)将这类逻辑直接集成到 Lambda 函数、后端服务或容器化工作负载中。

在 AWS 服务间路由事件

在 AWS 服务之间路由事件可实现无缝集成,例如通过 EventBridge 将 S3 操作触发 Lambda 函数。

示例场景:通过 EventBridge 将 Amazon S3 连接到 Lambda 函数。

步骤 01:创建一个 S3 存储桶并上传对象。

步骤 02:通过 EventBridge 启用 S3 事件通知:

  • 进入该 S3 存储桶。
  • 在事件通知下启用 "EventBridge" 选项。

步骤 03:创建 EventBridge 规则以匹配事件模式:

{
  "source": ["aws.s3"],
  "detail-type": ["Object Created"],
  "detail": {
    "bucket": {
      "name": ["my-bucket"]
    }
  }
}

步骤 04:将 Lambda 函数附加为该规则的目标,以处理上传的对象。

该模式便于后续扩展处理,例如添加 Step Functions 或 SNS 作为其他目标以发送通知。

实用示例:图像上传与缩放工作流

我们来看一个典型的事件驱动流水线:

01:用户向 S3 上传图像。

02:S3 向默认的 EventBridge 总线发出事件。

03:EventBridge 匹配 s3:ObjectCreated:* 规则并将事件路由至 Lambda 函数。

04:该 Lambda 对图像进行缩放,将结果保存到另一个 S3 存储桶,并记录日志。

该模式之所以强大,原因在于:

  • 可扩展(即可每秒处理成千上万条事件)。
  • 模块化(即可替换图像缩放函数而无需改动其他组件)。
  • 可并行(即可同时将同一事件发送至分析或通知流水线)。

通过添加规则提升可扩展性与灵活性

您可以通过为单个规则添加多个目标轻松实现事件扇出:

aws events put-targets --rule image-uploaded \
  --targets '[
    {"Id": "resizeLambda", "Arn": "arn:aws:lambda:region:account-id:function:ResizeImage"},
    {"Id": "notifySNS", "Arn": "arn:aws:sns:region:account-id:ImageUploadedTopic"}
]'

这使您的应用可以并行处理事件、通知用户并更新日志,而无需将这些任务耦合在一起。

优化性能并确保安全

通过设计精确的事件模式,尽量减少不必要的处理并降低风险,从而优化性能与安全。

设计高效的事件模式

避免使用范围过宽或“全捕获”的模式导致不必要的执行;请进行精确过滤:

{
  "source": ["myapplication.service"],
  "detail-type": ["ImageUploaded"],
  "detail": {
    "bucket": ["media-uploads"]
  }
}

这样可以降低成本、改善时延,并确保仅处理相关事件。

实施稳健的安全控制

安全是任何无服务器架构的重中之重。请遵循以下指南:

  • 使用 IAM 最小权限:仅授予发布或消费事件所需的权限。
  • 启用加密:EventBridge 支持使用 AWS KMS 的静态数据加密。
  • 为投递失败实现 DLQ(死信队列):
"DeadLetterConfig": {
  "Arn": "arn:aws:sqs:region:account-id:my-dlq"
}

DLQ 会捕获无法投递的事件,便于您后续诊断与再处理。

> 如果您想深入了解如何保障云应用安全与管理 AWS 权限,请查看 AWS Security and Cost Management 课程。

管理成本与服务配额

要有效管理成本与性能,了解 EventBridge 的定价模型并定期监控服务配额非常重要。

理解定价结构

计费基于以下项目:

  • 发布的事件(按每百万事件计费)
  • 重放的事件
  • Pipes 使用量
  • Scheduler 作业

免费层每月包含 100,000 条事件,对大多数开发与小型生产用例而言已相当充裕。

监控并调整服务配额

通过以下方式跟踪并申请提升:

aws service-quotas list-service-quotas --service-code events

需重点监控的配额:

  • 每个事件总线的规则数量
  • 每条规则的目标数量
  • 每秒调用次数

在负载提升时,负责任地扩展使用量可确保系统的可靠性。

高级 EventBridge 配置与替代方案

对于更复杂的事件驱动架构,您可考虑高级的 EventBridge 功能与替代模式,以增强控制力、安全性与调度灵活性。

跨账户事件分发

启用 AWS 账户之间的安全事件共享:

{
  "Statement": [{
    "Effect": "Allow",
    "Principal": {"AWS": "arn:aws:iam::123456789012:root"},
    "Action": "events:PutEvents",
    "Resource": "arn:aws:events:region:account-id:event-bus/shared-bus"
  }]
}

使用 AWS CloudTrail 审计使用情况并确保合规。

EventBridge Scheduler 的高级特性

超越基础调度,可使用:

  • 灵活的重试策略
  • 时间窗口合规性
  • 支持 cron 或 rate() 表达式

示例 cron 表达式:

在每周一上午 9:00 触发工作流:

--schedule-expression "cron(0 9 ? * MON *)"

何时考虑替代方案

根据您的需求,您也可考虑其他更契合特定用例的 AWS 服务。 

例如:

Use Case

Alternative

FIFO or strict ordering

Amazon SQS FIFO

High throughput and low latency

Amazon MSK (Kafka)

Complex orchestration

Step Functions

Simple notifications

Amazon SNS

结语

Amazon EventBridge 是现代云原生应用的基础构件,帮助您构建可扩展、松耦合的系统,跨 AWS 与 SaaS 平台对实时事件作出响应,并以极低的基础设施开销集成工作流。 

要成功使用 EventBridge,请专注于设计模块化的事件域,践行最小权限与死信队列等最佳实践,并持续监控使用量、配额与成本。

如果您想进一步提升 AWS 专业知识,请探索AWS Cloud Practitioner 课程路径!

FAQs

EventBridge 与 SNS、SQS 有何不同?

EventBridge 提供基于规则的过滤、模式支持与 SaaS 平台集成,这些特性在 SNS 或 SQS 中不可用。

EventBridge 是否为无服务器服务?

是的,EventBridge 是全托管的无服务器服务,会根据事件量自动伸缩。

我可以使用 EventBridge 触发 Lambda 函数吗?

是的。EventBridge 可基于自定义规则与过滤条件将事件路由至 Lambda 函数。

什么是 EventBridge Pipes,何时应使用?

Pipes 支持源与目标之间的直接点对点集成,并提供过滤、转换与富化功能。

如何保障我的 EventBridge 工作流安全?

使用 IAM 策略、加密与死信队列来保护并监控您的事件驱动架构。

EventBridge 是否支持跨账户事件路由?

是的,EventBridge 通过基于资源的策略与权限支持跨账户事件路由。

什么是 EventBridge Scheduler?

Scheduler 是用于基于时间触发事件的内置功能,支持重试逻辑与灵活的调度选项。

EventBridge 的计费方式如何?

EventBridge 的定价基于发布、投递与重放事件的数量,并提供相当宽裕的免费层。

我可以在 EventBridge 中重放历史事件吗?

是的,利用事件重放功能,可以对已归档事件进行重放以便排障或再处理。

Don Kaluarachchi

作者

Don Kaluarachchi

我是 Don——一名顾问、开发者、工程师、数字架构师和作者(基本上,我身兼数职 👨‍💻🎩)。我热衷于让数字平台顺畅运行,并不断寻找改进的方法。不写代码的时候,我会写写关于人工智能、数据科学以及各类技术主题的文章。
 
多年来,我参与过从构建与优化软件到部署 AI 模型、设计云端解决方案等各类项目。我拥有伦敦布鲁内尔大学的人工智能理学硕士学位和计算机科学理学学士学位。

主题