AWS Step Functions如何将前序状态A、B的输入输出共同传递给下游状态C
AWS Step Functions 多状态历史结果传递方案
完全可以实现,以下是两种可行的落地方法:
方案1:差异化resultPath分层存储(推荐)
Step Functions 的 resultPath 本质是指定当前状态输出写入到输入JSON的哪个路径,只要给不同状态的输出指定不同的非根路径,就不会丢失之前的所有数据,具体配置逻辑如下:
- 给A状态配置
resultPath: $.a_output:A执行完成后,A的原始输入会保留在根路径,A的输出会写入到a_output字段,整体传给B - 给B状态配置
resultPath: $.b_output:B执行完成后,B的输出会写入到新的b_output字段,原有根路径的原始输入、a_output字段都会保留,最终传递给C的输入就包含了所有需要的三类数据
以下是状态机的核心配置示例:
{ "States": { "A": { "Type": "Task", "Resource": "arn:aws:lambda:xxxxx:function:funcA", "ResultPath": "$.a_output", "Next": "B" }, "B": { "Type": "Task", "Resource": "arn:aws:lambda:xxxxx:function:funcB", "ResultPath": "$.b_output", "Next": "C" }, "C": { "Type": "Task", "Resource": "arn:aws:lambda:xxxxx:function:funcC", "End": true } } }
实际流转示例:
- A的原始输入:
{"user_id": "123", "type": "test"} - A执行完成后传给B的输入:
{"user_id": "123", "type": "test", "a_output": {"taskA_status": "success"}} - B执行完成后传给C的输入:
{"user_id": "123", "type": "test", "a_output": {"taskA_status": "success"}, "b_output": {"taskB_status": "success"}}
方案2:使用Parameters自定义传递结构
如果需要调整传递给C的输入结构,不需要保留完整的历史输入层级,可以在B状态中通过Parameters字段手动拼接需要的所有字段,灵活性更高:
"B": { "Type": "Task", "Resource": "arn:aws:lambda:xxxxx:function:funcB", "ResultPath": "$.b_output", "Parameters": { "original_input.$": "$", "a_result.$": "$.a_output", "b_result.$": "$.b_output" }, "Next": "C" }
注意事项
不要给任何状态配置 ResultPath: $,该配置会让当前状态的输出直接覆盖整个输入,之前留存的所有数据都会丢失。
内容的提问来源于stack exchange,提问作者Yunhan Zou
相关产品推荐
相关产品推荐

