Jak*_* T. 11 amazon-web-services aws-lambda aws-step-functions
我有一个AWS Step Function State格式如下:
"MyState": {
"Type": "Task",
"Resource": "<MyLambdaARN>",
"ResultPath": "$.value1"
"Next": "NextState"
}
Run Code Online (Sandbox Code Playgroud)
我想添加第二个值,但无法找到任何地方.AWS示例均未显示要添加到输出的多个ResultPath值.
我会在它们之间加一个逗号吗?
"MyState": {
"Type": "Task",
"Resource": "<MyLambdaARN>",
"ResultPath": "$.value1, $.value2"
"Next": "NextState"
}
Run Code Online (Sandbox Code Playgroud)
或者有更好的格式化方法吗?
Zod*_*man 29
让我们直接回答:你不能指定多个ResultPath
值,因为它没有意义.亚马逊确实解释了它是如何工作的,所以我理解为什么这会令人困惑.
但是,您可以从状态机中的状态返回多个结果值.
一般细节
任何State的输入都是JSON对象.State的输出是JSON对象.
ResultPath
指示State Machine如何处理State的输出(结果).如果没有指定ResultPath
,则默认为$
"State"的所有输入都将丢失,由State的输出替换.
如果要允许输入JSON中的数据通过State,则指定a ResultPath
来描述要在输入JSON上添加/覆盖的属性以传递给下一个State.
你的场景
在您的情况下,$.value1
表示您的State的输出JSON是输入JSON,value1
其中包含lambda的输出JSON的新/覆盖属性.
如果要在输出中使用多个值,则lambda应返回包含多个值的JSON对象,该值将是value1
属性的值.
如果您不关心允许输入值通过您的状态,请将其省略ResultPath
为默认值$
.包含多个值的输出JSON将是下一个State的输入.
支持方案
这是我用来输入和输出的简单状态机:
{
"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
}
}
}
Run Code Online (Sandbox Code Playgroud)
使用以下输入执行此操作:
{
"Input 1": 10000,
"Input 2": "YOLO",
"Input 3": true
}
Run Code Online (Sandbox Code Playgroud)
检查每个阶段的输入和输出.你应该注意以下几点:
ResultPath
始终将输出定向到Result
输入的属性.State1
被输出覆盖State2
.净效应Result.Value1
消失并Result.Value2
"更新".希望这能说明如何ResultPath
有效地使用.
归档时间: |
|
查看次数: |
6769 次 |
最近记录: |