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

Fra*_*ter 3 amazon-web-services amazon-ecs aws-step-functions aws-fargate

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

但是,我现在需要运行一个 Fargate 任务,然后将参数从该 Fargate 任务传递给后续的 lambda。我创建了一个 python 脚本,充当容器定义中的入口点。显然,在 lambda 函数中,handler(event, context)充当入口点,通过定义 a ,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"]
Run Code Online (Sandbox Code Playgroud)

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

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

小智 10

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

client = boto3.client('stepfunctions')
client.send_task_success(
    taskToken=os.environ["TASK_TOKEN"],
    output=output
)
Run Code Online (Sandbox Code Playgroud)

将其传回。