AWS Step Functions - 将输入传递给另一个任务

Gus*_*pes 6 amazon-web-services aws-step-functions

如何将我的输入传递到taskAWS Step Functions 中的输出?

我知道这个问题,以及文档:

如果 ResultPath 的值为 null,则意味着该状态自己的原始输出被丢弃,其原始输入成为其结果。

但我需要的是:

  • 鉴于我的意见
{
  "input": "my_input"
}
Run Code Online (Sandbox Code Playgroud)
  • 还有我的 lambda 输出
{
  "output": "my_output"
}
Run Code Online (Sandbox Code Playgroud)

我需要将以下 json 传递给下一个状态:

{
  "input": "my_input",
  "output": "my_output"
}
Run Code Online (Sandbox Code Playgroud)

mat*_*sev 6

想到了两个建议,要么使用 ResultPath 将输入替换为 Result,它允许您

如果您未指定 ResultPath,则默认行为就像您已指定"ResultPath": "$". 因为这告诉状态用结果替换整个输入,状态输入完全被来自任务结果的结果替换。

要使此选项起作用,Lambda 函数必须返回所需的响应:

{
  "input": "my_input",
  "output": "my_output"
}
Run Code Online (Sandbox Code Playgroud)

或者,在 Step Functions 开发人员指南中使用 ResultPath 将结果包含在输入中。接下来,如果您将 Lambda 的返回值更改为仅包含"my_output"您可以指定"ResultPath": "$.output"以实现所需的结果:

{
  "input": "my_input",
  "output": "my_output"
}
Run Code Online (Sandbox Code Playgroud)

  • 谢谢你!实际上,我最终使用了另一个带有 ResultPath 的节点,因为与 lambda 相比,我有更多的空间来处理步骤函数定义。 (2认同)

Gus*_*pes 5

对于遇到这个问题的任何人,根据文档,不可能按照我的要求进行操作,但是您可以做的是:

{
  "States": {
    "my-state": {
      "Type": "task",
      "ResultPath": "$.response"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

这会将 lambda 返回的任何内容附加到response节点中,从而导致:

{
  "input": "my_input",
  "response": {
    "output": "my_output"
  }
}
Run Code Online (Sandbox Code Playgroud)