在 AWS Step Functions 中跨循环传递数据
Pass data across loop in AWS Step Functions
我有一个 AWS Step Function,它包含一个 "Map"
(在输入中循环一个数组),然后按顺序执行一系列任务并得到所有结果。但是,在最后一步中,我 也 想要能够访问一些在中间步骤中未使用的原始输入数据。我应该如何最好地做到这一点?
到目前为止我尝试过的:
正在通过地图任务传递所有输入数据。然而,这很快就会失败,因为在函数之间传递的结果有多大是有限制的,并且经过数百次迭代,原始输入将乘以数百次。
使用 Parallel
状态,并在并行执行的一个分支中添加一个空状态,它只是传递输入,而所有迭代都发生在另一个分支中。这感觉像是一个 hack,因为我的步骤结构现在不能很好地反映代码的实际逻辑。
执行此操作的“正确”方法是什么?
Iterate
over Fiz
+--------+ +-------------+ +------------+
{ | +---+ | | | | |
Foo: "Bar", --> -------+ | +---+ Y +----+ Z |
Fiz: [...], | +-+ | | | | |
} +-----+ +-------------+ +------------+
在上面的框 Z 中,我想同时访问 'Foo' 和 Y
的输出
事实证明,SFN 中的每个步骤都可以访问原始输入,但您必须使用 Parameters
明确声明插入它们。 $$.Execution.Input
.
中提供所有输入
使用 Parameters
时,您将覆盖所有其他输入,因此您 还 必须定义要从上一步传递的内容。换句话说:如果 Y 将 {fruit: "apple"}
传递给 Z,并且您希望 Z 看到它和原始输入 {Foo: "Bar"}
,您可以将以下内容添加到 SFN 中的 Z 步骤:
{
"Parameters": {
"Foo.$": "$$.Execution.Input.Foo",
"fruit.$": "$.apple"
}
注意第一种情况是双 $$
,第二种情况是单 $
。
我有一个 AWS Step Function,它包含一个 "Map"
(在输入中循环一个数组),然后按顺序执行一系列任务并得到所有结果。但是,在最后一步中,我 也 想要能够访问一些在中间步骤中未使用的原始输入数据。我应该如何最好地做到这一点?
到目前为止我尝试过的:
正在通过地图任务传递所有输入数据。然而,这很快就会失败,因为在函数之间传递的结果有多大是有限制的,并且经过数百次迭代,原始输入将乘以数百次。
使用
Parallel
状态,并在并行执行的一个分支中添加一个空状态,它只是传递输入,而所有迭代都发生在另一个分支中。这感觉像是一个 hack,因为我的步骤结构现在不能很好地反映代码的实际逻辑。
执行此操作的“正确”方法是什么?
Iterate
over Fiz
+--------+ +-------------+ +------------+
{ | +---+ | | | | |
Foo: "Bar", --> -------+ | +---+ Y +----+ Z |
Fiz: [...], | +-+ | | | | |
} +-----+ +-------------+ +------------+
在上面的框 Z 中,我想同时访问 'Foo' 和 Y
的输出事实证明,SFN 中的每个步骤都可以访问原始输入,但您必须使用 Parameters
明确声明插入它们。 $$.Execution.Input
.
使用 Parameters
时,您将覆盖所有其他输入,因此您 还 必须定义要从上一步传递的内容。换句话说:如果 Y 将 {fruit: "apple"}
传递给 Z,并且您希望 Z 看到它和原始输入 {Foo: "Bar"}
,您可以将以下内容添加到 SFN 中的 Z 步骤:
{
"Parameters": {
"Foo.$": "$$.Execution.Input.Foo",
"fruit.$": "$.apple"
}
注意第一种情况是双 $$
,第二种情况是单 $
。