如何在AWS步骤函数中指定多个结果路径值

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有效地使用.