14

如何将输入传递到TaskAWS Step Functions 中的状态到输出?

在阅读了AWS 文档中的输入和输出处理页面后,我尝试了各种InputPath,ResultPathOutputPath.

状态定义:

"First State": {
    "Type": "Task",
    "Resource": "[My Lambda ARN]",
    "Next": "Second State",
    "InputPath": "$.someKey",
    "OutputPath": "$"
}

输入:

{
    "someKey": "someValue"
}

预期结果

我希望First State(以及因此的输入Second State)的输出是

{
    "someKey": "someValue"
}

实际结果

[empty]

如果输入更复杂怎么办,例如

{
    "firstKey": "firstValue",
    "secondKey": "secondValue"
}

我想转发所有这些而不用担心(子)路径。

4

3 回答 3

27

亚马逊状态语言规范中指出:

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

因此,我将状态定义更新为

"First State": {
    "Type": "Task",
    "Resource": "[My Lambda ARN]",
    "Next": "Second State",
    "ResultPath": null
}

结果,当传递输入示例时,Task输入有效负载将被复制到输出,即使是丰富的对象,例如:

{
    "firstKey": "firstValue",
    "secondKey": "secondValue"
}
于 2017-12-05T10:40:09.850 回答
6

对于那些发现自己在这里使用 CDK 的人,解决方案是使用显式aws_stepfunctions.JsonPath.DISCARD枚举而不是 None/null。

from aws_cdk import (
    aws_stepfunctions,
    aws_stepfunctions_tasks,
)

aws_stepfunctions_tasks.LambdaInvoke(
    self,
    "my_function",
    lambda_function=lambda_function,
    result_path=aws_stepfunctions.JsonPath.DISCARD,
)

https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-stepfunctions.JsonPath.html#static-discard

于 2021-01-07T09:38:26.933 回答
-1

我一直在寻找将输入从一个并行状态传递到另一个并行状态的解决方案,并且上述选项非常有效。例如我的步进函数是这样的……tas1->parallel task2 -> parallel trask3 -> task4。因此,当它从并行任务 3 开始时,输入值被清除,因此 ptask3 失败。使用上述选项,我能够将相同的输入从 ptask2 传递到 ptas3。

于 2020-10-09T05:50:05.697 回答