Serverless Framework如何正确定义Step Functions并行分支?
错误根因
Step Functions Parallel状态的Branches字段为数组结构,每个并行分支是数组内的独立对象,每个对象单独配置StartAt、States属性。
原有YAML配置存在两类问题:
- 未使用YAML数组语法声明分支,将两个分支的
StartAt、States直接平铺为Branches节点下的同级键,YAML语法不允许同一层级存在重复键,直接触发部署报错 - 存在语法笔误:
ResultPath字段多写冗余双引号,ConfirmBookPriceIsValid任务节点的属性缩进错误,同时遗漏原工作流中用于合并结果的ReturnCombinedDataPass节点
正确配置示例
将每个并行分支作为Branches下的数组项(以-开头标记数组元素),修正缩进和语法笔误,补全缺失节点即可,完整可用配置如下:
stepFunctions: stateMachines: Process-BookPricingCreated-StateMachine: name: myStateMachine definition: Comment: Parallel Evaluation of multiple Book Pricing atributes. StartAt: VerifyBookPricingAttributes States: VerifyBookPricingAttributes: Type: Parallel Next: ReturnCombinedData Branches: # 第一个分支:库存校验 - StartAt: ConfirmBookAvailability States: ConfirmBookAvailability: Type: Task Comment: This state will query DynamoDB table representing RS catalog. If the Book is found - availability will be confirmed Resource: arn:aws:lambda:us-east-1:000000000000:function:ConfirmBookAvailability ResultPath: $.BookAvailability End: true # 第二个分支:价格校验 - StartAt: ConfirmBookPriceIsValid States: ConfirmBookPriceIsValid: Type: Task Comment: This state will query DynamoDB table representing Book Prices. If the input BookPrice matches the Dynamo valid record - the pricing will be confirmed Resource: arn:aws:lambda:us-east-1:000000000000:function:ConfirmBookPriceIsValid ResultPath: $.IsBookPriceValid End: true # 结果合并节点 ReturnCombinedData: Type: Pass Parameters: comment: Combining the result CombinedDetails: "BookAvailability.$": "$[0].BookAvailability" "IsBookPriceValid.$": "$[1].IsBookPriceValid" End: true
配置注意事项
- YAML中数组元素必须以
-标记,对应JSON里的[]数组结构,Parallel下有多少个并行分支,就写多少个带-前缀的分支对象 - YAML对缩进要求严格,同一节点下的属性必须保持相同缩进层级
- 带
.$后缀的参数键如果触发语法校验问题,可以给键加双引号包裹,和原JSON定义的执行逻辑完全一致
内容的提问来源于stack exchange,提问作者Eugene Goldberg
相关产品推荐
相关产品推荐

