【发布时间】:2020-04-27 04:47:54
【问题描述】:
我有两个要运行的脚本,function_1 和 function_2,其中 function_2 必须在成功执行 function_1 后运行。
为了在 GCP 上执行此操作,我将每个脚本转换为一个云函数,我将其设置为由 Pub/Sub 触发,这是 GCP 中的标准。假设我想使用 Composer 安排这些功能。由于没有执行云函数的操作员,我必须使用 Pub/Sub 操作员向我的主题发送一条消息,这将依次执行该函数。
这是我的问题:是否可以仅在 function_1 成功运行后才在 Composer 中执行 function_2 的触发器?由于我的 DAG 任务不是函数的执行,而是将消息发送到 Pub/Sub(它反过来运行函数),所以我不明白如何在上游函数完全运行后运行 function_2而不是在发送 Pub/Sub 消息时执行。
【问题讨论】:
-
我有两个问题:1)你的函数运行需要多长时间? 2) 在函数结束时,是否可以向 PubSub 主题发布消息,说明函数是否有效?
-
1) 当前函数只需要 1-2 分钟,所以我可以让它基于时间,但是当函数失败时这不起作用。 2) 可以向 PubSub 发布消息。但是,如果收到特定的 PubSub 消息,是否可以让 Composer 只进行下一步?
-
您可以使用 Airflow XCOM (airflow.apache.org/docs/stable/concepts.html#xcoms) 代替 pubsub 来存储 function1 结果。另外,对于 1-2 分钟的运行,我会考虑 CloudRun:它比云功能更容易测试,如果您有重叠运行,它可能比云功能更便宜。
标签: google-cloud-platform google-cloud-functions airflow google-cloud-pubsub google-cloud-composer