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

如何将waitForTaskToken步骤的输入数据传递至后续步骤?

解决方案:保留原始数据传递至StateC

针对你的需求,有两种可行的方法可以让StateC获取到生成TaskToken前的原始数据,无需修改send-task-token-success的发送内容:


方法1:用ResultPath合并原始输入与回调数据

默认情况下,waitForTaskToken类型的Task状态会用send-task-token-success发送的额外数据完全覆盖当前输入。通过配置ResultPath,可以让状态输出同时保留原始输入和回调数据。

修改StateB的配置,新增ResultPath字段:

StateB:
  Type: Task
  Resource: 'arn:aws:states:::lambda:invoke.waitForTaskToken'
  Parameters:
    FunctionName:
      Fn::GetAtt: [ LambdaB, Arn ]
    Payload:
      input.$: '$'
      taskToken.$: '$$.Task.Token'
  TimeoutSeconds: 300
  ResultPath: "$.callbackResult"  # 将回调数据存入指定字段,原始输入保留
  Next: StateC

修改后,StateB的输出结构会变成:

{
  "原始输入字段1": "对应值",
  "原始输入字段2": "对应值",
  "callbackResult": "send-task-token-success发送的额外数据"
}

StateC可以直接读取到原始输入的所有数据,同时也能获取回调的额外数据。


方法2:用执行上下文存储原始数据

如果不想修改主数据结构,可以在进入StateB前,通过Pass状态把原始数据存入Step Functions的执行上下文,之后在StateC中引用上下文数据。

修改状态机定义,在StateA和StateB之间新增一个Pass状态:

StartAt: StateA
States:
  StateA:
    Type: Task
    Resource:
      Fn::GetAtt: [LambdaA, Arn]
    Next: SaveOriginalData
  SaveOriginalData:
    Type: Pass
    Parameters:
      "originalData.$": "$"
    ResultPath: "$$.Execution.Context"
    Next: StateB
  StateB:
    Type: Task
    Resource: 'arn:aws:states:::lambda:invoke.waitForTaskToken'
    Parameters:
      FunctionName:
        Fn::GetAtt: [ LambdaB, Arn ]
    Payload:
      input.$: '$'
      taskToken.$: '$$.Task.Token'
    TimeoutSeconds: 300
    OutputPath: '$'
    Next: StateC
  StateC:
    Type: Task
    Resource:
      Fn::GetAtt: [LambdaC, Arn]
    Parameters:
      "originalData.$": "$$.Execution.Context.originalData"  # 从上下文读取原始数据
      "callbackData.$": "$"  # 读取回调的额外数据
    End: true

这种方式下,StateC的输入会同时包含原始数据和回调数据,且不会改变StateB的输出逻辑。注意:执行上下文有8KB的大小限制,若原始数据过大不建议使用此方法。

内容的提问来源于stack exchange,提问作者zlZimon

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 14:18:00