在AWS步进函数中传递到下一状态之前,在输入中覆盖字段



假设我有3种状态,A ->B→C.假设A的输入包括一个名为names的字段,它是List类型的,每个元素包含两个字段firstNamelastName。状态B将处理A和的输入,并返回一个名为newLastName的响应。如果我想覆盖names中的每个元素,以便names[i].lastName = newLastName在将此输入传递到状态C之前,是否有内置语法来实现这一点?谢谢。

通过三个定义属性来控制传递给下一个任务的事件:ResultPathOutputPath用于离开一个任务,InputPath用于进入下一个任务。

您必须首先了解状态机如何制作到下一个任务的事件,以及上述3个参数中的每一个参数如何更改它。

您必须至少有Result Path。如果将lambda的输出放在下面,则这是关键。因此,ResultPath="$.my_path"将导致一个json对象,其顶级键为my_path,其值等于从lambda输出的任何值。

如果这是唯一的属性,它被附加到任何输入上。因此,如果您的输入事件是一个json对象,密钥original_key1some_other_key,您的输出与上面的结果路径将是:

{
"original_key_1": some value,
"some_other_key": some other value,
"my_path": the output of your lambda
}

现在,如果您添加OutputPath,这将切断下一个输出中除了路径之外的所有内容(在添加结果路径之后!)

如果你添加了OutputPath="$.my_path",你最终会得到一个json:

{ output of your lambda }

(你的输出最好是一个json可比对象,比如python字典!)

InputPath做同样的事情…而是输入。它切断了除了所描述的路径之外的所有东西,这是唯一被发送到的东西。但是它并没有阻止输入被追加——因此InputPath + ResultPath导致发送到lambda的内容更少,但所有内容都在exit

上。并没有像你描述的那样真正的循环逻辑——任务和状态机定义是静态方向,而不是动态逻辑。

你可以简单地在lambda中处理它。这是首选的方法。然而,如果你这样做,那么你应该使用OutputPath和ResultPath的组合来"切断"输入,在最后返回它之前,用你想要的任何东西替换传入事件的各个字段。

最新更新