让我们直接回答这个问题:你不能指定多个ResultPath
值,因为它没有意义。亚马逊在解释它是如何工作的方面做得很糟糕,所以我明白为什么这会让人困惑。
但是,您可以从状态机中的状态返回多个结果值。
一般细节
任何 State 的输入都是 JSON 对象。State 的输出是一个 JSON 对象。
ResultPath
指示状态机如何处理状态的输出(结果)。如果不指定ResultPath
,则默认情况下,$
这意味着状态的所有输入都将丢失,由状态的输出代替。
如果您想允许来自输入 JSON 的数据通过您的 State,您可以指定 aResultPath
来描述要在输入 JSON 上添加/覆盖以传递到下一个 State 的属性。
你的场景
在您的情况下,$.value1
意味着您的状态的输出 JSON 是具有新/覆盖属性的输入 JSON,该属性value1
包含您的 lambda 的输出 JSON。
如果您希望输出中有多个值,您的 lambda 应该返回一个包含多个值的 JSON 对象,这将是value1
属性的值。
如果您不关心允许输入值通过您的状态,请将其保留ResultPath
为默认值$
。包含多个值的输出 JSON 将成为下一个状态的输入。
支持场景
这是我用来处理输入和输出的简单状态机:
{
"StartAt": "State1",
"States": {
"State1": {
"Type": "Pass",
"Result": { "Value1": "Yoyo", "Value2": 1 },
"ResultPath": "$.Result",
"Next": "State2"
},
"State2": {
"Type": "Pass",
"Result": { "Value2": 5 },
"ResultPath": "$.Result",
"Next": "State3"
},
"State3": {
"Type": "Pass",
"Result": "Done",
"End": true
}
}
}
使用以下输入执行此操作:
{
"Input 1": 10000,
"Input 2": "YOLO",
"Input 3": true
}
检查每个阶段的输入和输出。您应注意以下事项:
- 输入一直通过,因为
ResultPath
始终将输出定向到Result
输入的属性。
- 的输出
State1
被 的输出覆盖State2
。净效应Result.Value1
消失并Result.Value2
“更新”。
希望这能阐明如何ResultPath
有效使用。