首页 > 解决方案 > 调度 cron 作业以触发云功能

问题描述

有没有办法使用 cron.yaml 来安排 cron 作业来触发 HTTP 云功能。我试图实现它,但传递整个 URL 会引发错误。

cron:
- description: "Test Call"
  url: https://us-central1-***.cloudfunctions.net/helloGET
  schedule: every 1 mins

当我尝试部署 cron 作业时,我在控制台中看到此错误

Unable to assign value 'https://us-central1-***.cloudfunctions.net/helloGET' to attribute 'url':
Value 'https://us-central1-***.cloudfunctions.net/helloGET' for url does not match expression '^(?:^/.*$)$'
  in "/Users/xyz/Desktop/cron.yaml", line 3, column 8

我知道会抛出错误,因为我有完整的 URL 路径,但如果我只是通过以下内容而不是完整路径

cron:
- description: "Test Call"
  url: /helloGET
  schedule: every 1 mins

然后它能够​​部署 cron 作业,但是当作业运行时,它会引发 404 错误,因为只传递路径而不是完整的 URL,我相信它正在寻找应用程序引擎中的 URL,因为我没有任何代码在应用程序引擎中,我的服务调用在云功能中,它无法找到它。

还有一种方法可以将计划设置为每 1 秒而不是 1 分钟运行一次。

标签: google-app-enginegoogle-cloud-platformgoogle-cloud-functions

解决方案


中的 urlcron.yaml需要是您的应用程序处理的 URl,而不是任意的 - 这就是为什么只有相对路径有效的原因。从语法(强调我的):

网址

必需的。url 字段指定应用程序中将由 Cron 服务调用的 URL。

您可以做的是让您的应用程序 cron 处理程序访问您需要触发 Cloud Function 的任意 URL。请参阅发出 HTTP(S) 请求

至于低于 1 分钟的间隔 - cron 本身不支持。但是有一些方法可以实现几乎相同的效果,例如使用 Google App Engine 刷新高频数据


推荐阅读