AWS CDK中Event Bridge规则实现问题求助
解决方案:修正Event Bridge规则的事件模式并关联现有事件总线
核心问题分析
你之前调整的事件模式错误地将replay-name放在了detail层级下,而实际上它是事件的顶级字段;同时$or条件需要正确对应到detail.distance和detail.duration的数值判断。
修正后的CDK代码
cfn_rule = aws_events.CfnRule( self, id=f"{stack_id}-rule-to-invoke-lambda", name="rule-to-invoke-lambda", # 关联现有事件总线(已正确配置,确保event_bus是现有总线的引用) event_bus_name=event_bus.event_bus_name, # 正确匹配控制台配置的事件模式 event_pattern={ "source": ["mts-simulation"], "replay-name": [{"exists": true}], "$or": [ {"detail.distance": [{"numeric": [">=", 0]}]}, {"detail.duration": [{"numeric": [">=", 0]}]} ] }, targets=[ aws_events.CfnRule.TargetProperty( arn=lambda_function.function_arn, id=f"{stack_id}-target-to-lambda-function", input_transformer=aws_events.CfnRule.InputTransformerProperty( input_template='{"uptime":"<detail-uptime>",' ' "distance": "<detail-distance>",' '"duration": "<detail-duration>","timestamp": "<timestamp>"}', input_paths_map={ "timestamp": "$.time", "detail-uptime": "$.detail.system_uptime", "detail-distance": "$.detail.distance", "detail-duration": "$.detail.duration", }, ), ) ], )
关键修正点说明
- 顶级字段
replay-name配置:将"replay-name": [{"exists": true}]放在事件模式顶级层级,和source、$or同级,匹配事件的实际结构。 $or条件还原:保留原控制台的detail.distance和detail.duration路径,确保匹配事件中detail嵌套字段的数值判断逻辑。- 现有事件总线关联:你代码中
event_bus_name=event_bus.event_bus_name的配置是正确的,只要event_bus变量是对现有事件总线的有效引用(比如通过aws_events.EventBus.from_event_bus_name获取),就能完成关联。
验证建议
部署后可通过Event Bridge控制台查看规则的事件模式,确认与手动配置的一致;同时发送测试事件验证规则是否能正确触发Lambda。
内容的提问来源于stack exchange,提问作者sumanth shetty
相关产品推荐
相关产品推荐

