将输入直通到 AWS Step Functions 中的输出

Passthrough input to output in AWS Step Functions

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

阅读 AWS 文档中的 Input and Output Processing 页面后,我尝试了 InputPathResultPathOutputPath 的各种组合。

状态定义:

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

我愿意全部转发而不用担心(子)路径。

Amazon States Language 规范中指出:

If the value of ResultPath is null, that means that the state’s own raw output is discarded and its raw input becomes its result.

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

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

因此,当传递输入示例时 Task 输入有效负载将被复制到输出,即使对于像这样的丰富对象也是如此:

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

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

对于那些发现自己在这里使用 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