Serverless Framework下EventBridge触发Step Functions失败,求解决方案
希望当匹配指定source的事件推送至Event Bus时触发AWS Step Functions,尝试通过Serverless Framework为其配置与Lambda相同的EventBridge触发器,但Lambda可正常触发,Step Functions却无法生效。以下是Lambda和Step Functions的YAML配置块:
Lambda配置
lambdaName: handler: handlers/lambdaName.handler events: - eventBridge: name: subscriber-handler eventBus: arn:aws:events:region:account:event-bus/trigger-stepfunction pattern: source: - 'test-SF-trigger'
Step Functions配置
stepFunctions: stateMachines: XyzStateMachine: name: xyz-state-machine-name id: xyz-state-machine-id events: - eventBridge: name: subscriber-handler eventBus: arn:aws:events:region:account:event-bus/trigger-stepfunction pattern: source: - 'test-SF-trigger' definition: Comment: "AWS Step Functions state machine to fetch data from DB day wise, write it to file and send to DL" StartAt: "state1" States: state1: Type: "Task" Resource: Fn::GetAtt: [XYZ_lambda, Arn] Next: 'state2' .........
请问是否支持这种触发方式?若支持,我缺失了哪些配置?另外,我已可通过CloudFormation创建事件总线和规则并将Step Functions设为目标来触发,但希望确认能否通过上述类似Lambda的配置方式实现。
Serverless Framework支持用这种类似Lambda的eventBridge配置方式触发Step Functions,你的配置主要缺失了以下关键内容:
权限配置:EventBridge需要具备启动Step Functions状态机的权限。Lambda的EventBridge触发器会自动生成相关权限,但Step Functions的配置不会自动创建该权限,需手动添加IAM策略:
给EventBridge服务主体(events.amazonaws.com)授予states:StartExecution权限,目标为你的状态机ARN。可以在Serverless配置中添加iamRoleStatements块,或者为状态机的执行角色补充对应权限。显式指定触发器目标:Lambda的
eventBridge配置会自动将Lambda作为规则目标,但Step Functions需要在配置中明确指定目标。修改后的事件配置示例:events: - eventBridge: name: subscriber-handler-sf eventBus: arn:aws:events:region:account:event-bus/trigger-stepfunction pattern: source: - 'test-SF-trigger' target: !Ref XyzStateMachine规则名称需唯一:你给Lambda和Step Functions的触发器用了同一个规则名
subscriber-handler,但EventBridge规则在同一事件总线内必须唯一,需为Step Functions的触发器更换不同的名称(比如示例中的subscriber-handler-sf)。
补全上述配置后,就能通过这种类似Lambda的方式实现Step Functions的EventBridge触发,无需完全依赖手动编写CloudFormation资源。
内容的提问来源于stack exchange,提问作者jai

