【问题标题】:AWS Step Function, Map State and Batch Input/OutputAWS Step Function、映射状态和批量输入/输出
【发布时间】:2021-02-28 19:26:02
【问题描述】:

假设我有一个带有地图状态的阶梯函数。 Map State 是一个批处理作业,与 Docker 容器相关联。我想将输入参数传递给容器,并接收其他 SF 状态的输出。

我相信它可能是一个 Lambda 函数,将输入作为数组进行迭代,并将每个元素作为环境变量传递给容器。但是与 foreach + 环境变量一起工作的 lambda 会是什么样子呢?如何捕获 Docker 容器输出(我相信它可能是 S3 文件/目录)?

还有任何替代 Lambda 函数的方法吗?

【问题讨论】:

    标签: docker aws-step-functions aws-batch


    【解决方案1】:

    处理迭代器:

    如果你有一个预定义的输入数组,你想使用地图状态进行迭代,那么你可以将它作为 Map InputPath 和 ItemsPath 传递,但在某些情况下,你可能需要设置一个 lambda 来执行为您创建该列表。

    您的 ItemsPath 可能类似于:

     "list": [
              {
                "input": "<my_cool_input parameters>"
              },
              {
                "input": "<my_cool_input parameters>"
              }...
             ]
    

    处理输出:

    据我所知,目前无法将批量计算的输出直接返回到状态机。所以你需要采取间接的方法。

    一种方法是将 docker 容器的输出写入某个临时位置,例如 dynamodb 或 s3。然后,您需要在 step 函数中执行一个步骤来读取 dynamodb 的输出(您可以直接执行此操作,不需要 lambda,如果您写入 s3,那么您将需要一个 lambda 来读取输出)。

    似乎也需要这种方法来从 docker 容器中捕获引发的异常 - 如果有人有更好的方法,我会全力以赴。

    【讨论】:

    • 似乎这是目前最好的解决方案。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多