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
)
传回去。
之前曾使用 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
)
传回去。