【问题标题】: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 容器中捕获引发的异常 - 如果有人有更好的方法,我会全力以赴。