我想在 Airflow 中创建一个 DAG 来触发 ECS 任务。然后,此 ECS 任务将向 Airflow 返回一些参数,允许 DAG 使用这些参数触发下一个依赖的 ECS 任务。我一直在寻找一种在任务之间传递这些参数的方法,据我所知,最好的方法似乎是使用 XComs。
但是,我使用的 EcsRunTaskOperator 似乎没有捕获任务的 stdout 输出(如果我错了,请纠正我)。默认情况下,它仅将 ecs_task_arn 传递给 XCom。所以,我想知道如何才能实现这一目标。
我遇到了一个替代解决方案,我可以从 CloudWatch 读取日志,解析它们,然后将值推送到 XCom。但是,我想知道是否有更好的方法来做到这一点 - 让我可以将值从 ECS 直接推送到 XCom,而不涉及其他服务(例如 S3、消息队列或 CloudWatch)。
如果操作员能够捕获 ECS stdout 并将输出传递给 XCom,那会非常方便,但似乎不太可行。有什么想法或建议吗?
XCom 是“交叉通信”的缩写形式,用于在 Airflow 任务之间进行通信。
与外部系统交互,使用Airflow REST API更合适。您可以在此处查看一个
trigger a new DAG run
端点。 https://airflow.apache.org/docs/apache-airflow/stable/stable-rest-api-ref.html#operation/post_dag_run。它还具有 conf
字段,您可以在其中放置配置的 JSON 对象。确保 ECS 可以验证并触发您的 Airflow 端点。
从API文档中,我们也可以与XCom交互一些API。但不幸的是,它仅适用于获取列表 XCom 条目并获取条目本身,因为 XCom 应该在任务级别进行通信。因此,Xcom 并不是您用例的最佳选择。