Serverless Framework v3部署无法创建EventBridge事件规则
排查思路与修复方案
核心问题定位
定时类EventBridge规则可正常创建,是因为Serverless Framework v3对schedule类型规则内置了完整的权限配置、资源校验逻辑;自定义事件模式的规则创建失败无报错,基本是两类原因:事件模式字段不符合AWS官方事件Schema被静默跳过、缺失Lambda的EventBridge调用权限。
逐点修复
- 修正事件模式字段拼写与枚举值错误
你当前配置的两个事件模式存在多处和AWS官方事件结构不匹配的问题,框架检测到Schema不合法时不会抛出阻断部署的错误,会直接跳过对应规则创建:- Elastic Beanstalk健康事件:
detail-type官方准确值为Elastic Beanstalk health event,不是Health status change;detail下的状态字段为EventStatus而非Status;严重等级枚举值为WARNING而非WARN - CodeBuild构建状态变更事件:
detail-type配置正确,但detail下的构建状态字段为驼峰格式buildStatus,不是全小写连字符格式的build-status
- Elastic Beanstalk健康事件:
- 补全Lambda的EventBridge调用权限
自定义事件模式的EventBridge规则,框架不会自动给Lambda执行角色添加允许events服务调用的资源策略,需要手动在IAM配置块中声明,否则就算规则创建成功也无法触发函数。
可用配置参考
修正后的完整serverless.yml配置片段如下:
service: aws-teams-beanstalk frameworkVersion: '3' provider: name: aws region: us-west-2 runtime: python3.8 environment: Stage: ${sls:stage} HookUrl: REMOVED iam: role: statements: - Effect: Allow Action: lambda:InvokeFunction Resource: arn:aws:lambda:${self:provider.region}:*:function:${self:service}-${sls:stage}-send_message Principal: Service: events.amazonaws.com functions: send_message: handler: handler.create_beanstalk_teams_message events: - eventBridge: pattern: source: - aws.elasticbeanstalk detail-type: - "Elastic Beanstalk health event" detail: EventStatus: - "Environment health changed" Severity: - WARNING - SEVERE - ERROR - eventBridge: pattern: source: - aws.codebuild detail-type: - "CodeBuild Build State Change" detail: buildStatus: - SUCCEEDED - FAILED
部署校验步骤
- 执行部署命令时追加
--verbose参数,打印完整CloudFormation执行日志,可查看之前被默认日志等级隐藏的规则创建报错 - 部署完成后进入us-west-2区域的EventBridge控制台,确认对应规则已生成、事件模式匹配正确、目标绑定到部署的send_message函数
- 可使用EventBridge控制台的「发送测试事件」功能,构造对应结构的模拟事件,验证规则可正常匹配并触发函数
内容的提问来源于stack exchange,提问作者Kia Martinez
相关产品推荐
相关产品推荐

