【问题标题】:Pass data across loop in AWS Step Functions在 AWS Step Functions 中跨循环传递数据
【发布时间】:2020-02-05 07:46:29
【问题描述】:

我有一个 AWS Step Function,它包含一个 "Map"(循环输入中的一个数组),然后是按顺序执行的一些任务以及所有结果。但是,在最后一步中,我希望能够访问一些未在中间步骤中使用的原始输入数据。我应该如何做到最好?

到目前为止我所尝试的:

  • 通过映射任务传递所有输入数据。然而,这很快就失败了,因为函数之间可以传递多大的结果是有限制的,并且经过数百次迭代,原始输入会乘以数百次。

  • 使用Parallel 状态,并在并行执行的一个分支中添加一个空状态,该分支仅传递输入,而所有迭代都发生在另一个分支中。这感觉像是 hack,因为我的步骤结​​构现在很难反映代码的实际逻辑。

这样做的“正确”方法是什么?

                     Iterate
                     over Fiz
                     +--------+   +-------------+    +------------+
{                    | +---+  |   |             |    |            |
  Foo: "Bar", --> -------+ |  +---+      Y      +----+     Z      |
  Fiz: [...],        | +-+ |      |             |    |            |
}                    +-----+      +-------------+    +------------+

在上面的方框 Z 中,我想同时访问 'Foo' 和 Y 的输出

【问题讨论】:

    标签: amazon-web-services aws-step-functions


    【解决方案1】:

    事实证明,SFN 中的每个步骤都可以访问原始输入,但您必须使用Parameters 明确声明插入它们。所有输入都在$$.Execution.Input 中可用。

    当使用Parameters 时,您将覆盖所有其他输入,因此您将必须定义您想要从上一步传递的内容。换句话说:如果 Y 将 {fruit: "apple"} 传递给 Z,并且您希望 Z 同时看到该输入和原始输入 {Foo: "Bar"} ,您可以在 SFN 的 Z 步骤中添加以下内容:

    {
        "Parameters": {
            "Foo.$": "$$.Execution.Input.Foo",
            "fruit.$": "$.apple"
    }
    

    注意第一种情况下的双 $$ 和第二种情况下的单 $

    【讨论】:

      猜你喜欢
      • 2023-04-06
      • 1970-01-01
      • 2018-05-18
      • 2023-03-30
      • 1970-01-01
      • 1970-01-01
      • 2020-08-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多