amazon-web-services - Step 函数中 ECS 任务的输入和输出
问题描述
之前曾使用 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 任务中获取输出,我认为您必须使用任务令牌集成而不是通常推荐用于 Fargate 任务的运行作业(同步)。您可以将令牌作为容器覆盖 ( "TASK_TOKEN": "$$.Task.Token"
) 传递。然后在你的图像中,你需要一些这样的逻辑:
client = boto3.client('stepfunctions')
client.send_task_success(
taskToken=os.environ["TASK_TOKEN"],
output=output
)
把它传回去。
推荐阅读
- centos - Nagios 错误:/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
- javascript - 在 React 中动态添加后的 getElementById
- sql - SQL Server:合并具有相同ID但不同列值的两行
- python - 为什么没有在 tkinter 单选按钮中设置默认值?
- azure - Azure Active Directory 是否也识别机器/IP/网络以登录或有任何设置
- python - pyad.adsearch.ADQuery() 失败并出现 com_error
- javascript - 无法在反应中读取未定义的属性“名称”?
- node.js - 如何修复 TypeError:无法读取 null 的属性“客户”
- typescript - 打字稿:迭代模块导出的标识符并根据一些规则验证它们
- sql - 此查询的 Postgresql 索引?