You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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
    }
  }
}

实际流转示例:

  1. A的原始输入:{"user_id": "123", "type": "test"}
  2. A执行完成后传给B的输入:{"user_id": "123", "type": "test", "a_output": {"taskA_status": "success"}}
  3. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 22:15:01