在 Amazon EventBridge 中使用通配符模式匹配过滤事件 计算博客
使用通配符模式匹配在 Amazon EventBridge 中过滤事件
by James Beswick于2023年10月12日在Amazon EventBridge无服务器永久链接 分享
关键要点
新特性:Amazon EventBridge 支持使用通配符过滤器简化事件规则管理。事件路由:通过为事件总线设定规则,可以根据事件模式有效路由事件。S3 事件通知:借助通配符规则,可简化处理存储在 Amazon S3 中的交易数据的逻辑。IAM 过滤:可以使用通配符过滤器轻松监控和记录 IAM 策略的变动。错误事件合并:通配符允许从多个服务收集错误事件,简化观察和审计过程。Amazon EventBridge 最近宣布在规则事件模式中支持 通配符过滤器。EventBridge 事件总线是一个无服务器事件路由器,能够帮助您解耦事件驱动的系统。您可以在系统、AWS 服务或第三方 SaaS 服务之间路由事件。您可以将规则附加到事件总线上,以定义从生产者到消费者的事件路由逻辑。
您可以在规则上设置事件模式,以过滤传入事件并定向特定消费者。新的 通配符过滤器允许您构建更灵活的事件匹配模式,从而减少规则管理并优化事件消费者。以下图示展示了这些 EventBridge 属性之间的协作关系。
通配符过滤器使用通配符字符来匹配字符串值中的零个、一个或多个字符。例如,像 png 这样的过滤字符串会匹配以 png 结尾的字符串。
网络魔法梯子您还可以在过滤器中使用 多个通配符字符。例如,像 Title 这样的过滤字符串会匹配在中间包含 Title 的字符串值。在使用通配符过滤器时,要小心避免匹配到超出预期的事件。

本文将描述如何在示例场景中使用通配符过滤器。有关事件驱动架构的详细信息,请访问 无服务器领域。
在 S3 事件通知中使用通配符模式匹配
在新数据可用时,应用程序通常会执行某些操作。一个例子是在您的 Amazon S3 存储桶上处理上载的交易数据。数据可能根据日期、时间和股票符号存储在各个文件夹中。业务规则可能会规定,当股票 XYZ 收到文件时,必须向下游系统发送通知。
以下是 S3 存储桶的典型文件夹结构:
S3 可以在向存储桶写入对象时 发送事件到 EventBridge。S3 事件包括对象键例如:20231001/T132222Z/XYZ/filenameext。当任何对象上传到 XYZ 文件夹时,您可以使用 EventBridge 规则将这些事件发送到诸如 Amazon SQS 的下游服务。
在此次发布之前,您必须先将事件发送到 AWS Lambda 函数。现有的前缀和后缀过滤器不足以满足需求,因为存在额外的日期和时间文件夹。该函数会运行您的代码以检查对象路径中的股票符号。然后,您的代码将转发匹配的事件到 SQS。
借助 EventBridge 规则中的新通配符模式,逻辑变得更加简单。您无需再创建 Lambda 函数来运行自定义匹配代码,而是可以使用规则的过滤模式中的通配符字符,直接与 S3 对象键的某些部分进行匹配。
从 EventBridge 控制台创建一个新规则:
选择下一步。保持标准参数并转到 事件模式 部分。在此,您可以使用基于 JSON 的事件模式。 json { source [awss3] detail { bucket { name [intradaytradingdata] } object { key [{ wildcard /XYZ/ }] } } }
此模式根据特定的存储桶查找事件通知。该模式进一步过滤匹配 /XYZ/ 的对象键的事件。这个规则过滤掉了其他股票符号的通知,仅监听“XYZ”数据,不受数据提取日期和时间的限制。
为了使用过滤后的事件目标,您必须提供 基于资源的策略,以便 EventBridge 可以向队列发送消息。
选择下一步,在保存之前回顾规则详细信息。
在测试之前,请在 S3 控制台中启用 将 S3 事件通知发送到 EventBridge:
测试新通配符模式,向 XYZ 文件夹上载任何示例 CSV 文件,以触发事件通知。
您可以监控 EventBridge CloudWatch 指标,以检查规则是否因 S3 上传而被调用。 SQS CloudWatch 指标则显示规则是否接收到了消息。
基于 Amazon 资源名称 (ARN) 的过滤
客户通常需要在特定角色上添加 AWS 身份与访问管理 (IAM) 策略时执行某些操作。您可以通过创建自定义 EventBridge 规则来实现这一点,这些规则过滤事件以匹配或创建多个规则来达到相同的效果。借助新引入的通配符过滤器,调用操作的任务变得更加简单。
考虑一个附加了细粒度 IAM 策略的 IAM 角色。当您需要确保此角色附加的任何新策略必须来自特定 ARN 时,可以这样实现。
当您将新 IAM 策略附加到角色时,会生成如下事件:
json{ version 0 id 0b85984eec5384ba140e9e0cff7f05b4 detailtype AWS API Call via CloudTrail source awsiam account 123456789012 time 20231007T202328Z region useast1 resources [] detail { eventVersion 108 userIdentity { arn arnawssts123456789012assumedrole/Admin/UserName // 其他详细字段 } eventTime 20231007T202328Z eventSource iamamazonawscom eventName AttachRolePolicy // 其他详细字段 }}
您可以创建一个规则,以组合这些事件属性进行匹配。您可以使用通配符过滤 detailuserIdentityarn,捕获来自特定 ARN 的事件。然后,您可以将这些事件路由到诸如 Amazon CloudWatch Logs 的目标,以记录更改。您也可以将它们路由到 Amazon 简单通知服务 (SNS)。您可以使用 SNS 通知发起审核,并确保新附加的策略在您的对账和审计过程中良好制定。过滤器如下所示:
json{ source [awsiam] detailtype [AWS API Call via CloudTrail] detail { eventSource [iamamazonawscom] eventName [AttachRolePolicy] userIdentity { arn [{ wildcard arnawssts123456789012assumedrole// }] } }}
过滤自定义事件
您可以利用 EventBridge 构建松耦合、可扩展的事件驱动系统。在 AWS 中构建事件驱动应用程序时,您可以将事件发布到默认事件总线,或 创建自定义事件总线。您需要 定义事件的结构,这就是服务发出的 事件模式。
当您将规则附加到事件总线上以路由从生产者到消费者的事件时,您将根据事件模式属性中的值进行匹配。通配符过滤器允许您匹配事先未知的属性值,或针对多个值变体进行匹配。
以电子商务应用程序为例。您可能有多个解耦服务协作,例如购物车服务、库存服务等。这些服务中的每一个都会在客户购物时向事件总线发出事件。
事件可能包含错误,以记录客户在使用系统时遇到的问题。您可以使用一个带有通配符过滤器的规则来匹配所有错误事件,并将它们发送到一个共同的目标。这使得跨服务观察更为简化。
以下是事件流:
您的购物车服务可能会发出超时错误事件:
json{ version 0 id 24a4b957570d590bc2132a72e5dc4c66 detailtype shoppingcarterrortimeout source commybusinessshoppingcart account 123456789012 time 20231006T032844Z region uswest2 resources [] detail { message Operation timed out relatedentity { entitytype order id 123 } // 其他详细字段 }}
示例事件的 detailtype 属性确定了该事件的类型。其他服务可能会以不同前缀的 detailtype 发出错误事件,其他错误类型可能在 detailtype 中具有不同的后缀。
例如,库存服务可能会发出缺货错误事件,如下所示:
json{ version 0 id e456f480cc1e47fa8399ab2e54116958 detailtype shoppinginventoryerroroutofstock source commybusinessshoppinginventory account 123456789012 time 20231006T032844Z region uswest2 resources [] detail { message Product cannot be added to a cart Out of stock relatedentity { entitytype product id 456 } // 其他详细字段 }}
要将这些事件路由到共同的目标,比如 Amazon CloudWatch Logs,您可以创建一个规则,使用通配符过滤器匹配 detailtype。您可以将此与对源的前缀过滤器结合使用,将事件过滤到仅来自购物系统的服务中。过滤器如下所示:
json{ source [{ prefix commybusinessshopping }] detailtype [{ wildcard error }]}
如果没有通配符过滤器,您将需要创建一个 更复杂的匹配模式,可能需要跨多个规则实现。
结论
EventBridge 规则中的通配符过滤器帮助简化事件驱动的应用程序,确保正确的事件传递到目标。这个新特性减少了之前所需的自定义代码。尝试使用通配符过滤器的 EventBridge 规则,体验这一新特性在您的无服务器事件驱动应用程序中的好处。
有关更多无服务器学习资源,请访问 无服务器领域。
标签 贡献,无服务器