【问题标题】:Google Cloud Composer - having a Cloud Function be a downstream dependent of another Cloud FunctionGoogle Cloud Composer - 让 Cloud Function 成为另一个 Cloud Function 的下游依赖项
【发布时间】:2020-04-27 04:47:54
【问题描述】:

我有两个要运行的脚本,function_1function_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


【解决方案1】:

Airflow 1.10.1 版本Google Cloud Functions Operator 发布,这样就解决了问题,不需要使用Pub/Sub。

假设如果您正在运行

参考:

https://airflow.apache.org/docs/stable/howto/operator/gcp/function.html

https://airflow.apache.org/docs/stable/_api/airflow/operators/http_operator/index.html#module-airflow.operators.http_operator

【讨论】:

  • 我有权访问 Google Cloud Functions 运算符,但该运算符仅具有删除或部署函数的功能,不能执行它。所以它不能解决问题。您将如何使用 http_operator,通过在函数末尾触发消息让 Composer 知道它已完成运行?
  • 目前还没有官方的方式来做到这一点。这个答案 (stackoverflow.com/questions/57485742/…) 显示基本相同,我同意目前这是解决此问题的最佳方法。
  • @SANN3 您是否有任何关于让 Composer 等待运行任务直到收到响应代码的文档?我找不到任何
  • @NeonBlueHair 是的 http_operator 等待响应,因此触发第一个 GCF 并在 GCF 内部完成工作并返回响应。然后根据响应,您可以继续 Airflow 中的第二步。在上面的链接中查找 response_check。
猜你喜欢
  • 2017-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-14
  • 2020-01-23
  • 1970-01-01
相关资源
最近更新 更多