Step 函数中 ECS 任务的输入和输出

Input and Ouput to ECS task in Step function

之前曾使用 AWS step 函数处理过 lambda 编排。这一直运作良好。设置每个 lambda 的 result_path 会将参数传递给后续的 lambda。

但是,我现在需要 运行 一个 fargate 任务,然后将该 fargate 任务的参数传递给后续的 lambda。我创建了一个 python 脚本作为容器定义中的入口点。显然,在 lambda 函数中,handler(event, context) 充当入口点,通过定义 return {"return_object": "hello_world"},很容易将长参数传递给状态机的下一个状态。

虽然在我的例子中,我有一个任务定义和一个从这个 Dockerfile 创建的容器定义:

FROM python:3.7-slim

COPY my_script.py /my_script.py
RUN ln -s /python/my_script.py /usr/bin/my_script && \
chmod +x /python/my_script.py

ENTRYPOINT ["my_script"]

因此,我能够调用状态机,它会按预期执行 my_script。但是我如何从这个 python 脚本中获取输出并将其传递给状态机中的另一个状态?

我找到了一些关于如何传递输入的文档,但没有找到传递输出的示例。

要从 ECS/Fargate 任务获取输出,我认为您必须使用 Task Token Integration 而不是通常推荐用于 Fargate 任务的 运行 作业(同步)。您可以将令牌作为容器覆盖 ("TASK_TOKEN": "$$.Task.Token") 传递。然后在你的图像中你需要这样的逻辑:

client = boto3.client('stepfunctions')
client.send_task_success(
    taskToken=os.environ["TASK_TOKEN"],
    output=output
)

传回去。