AWS步骤函数

时间:2017-12-05 10:05:13

标签: amazon-web-services 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"
}

我想转发所有内容而不必担心(子)路径。

3 个答案:

答案 0 :(得分:7)

Amazon States Language中声明:

  

如果ResultPath的值为null,则意味着将丢弃状态自身的原始输出,并且其原始输入将成为其结果。

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

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

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

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

答案 1 :(得分:2)

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

答案 2 :(得分:-1)

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