Google-Cloud-Scheduler 因 http 触发 Cloud Function 而失败

Google-Cloud-Scheduler fail with http trigger Cloud Function

有一个Http trigger Cloud函数执行成功。

函数代码:

使用 stackdriver 记录:

"Function execution took 301394 ms, finished with status code: 200" 

现在,我创建了一个云调度程序,每天在 04:00 上午触发此云功能。

Scheduler-Logging with stackdriver:

{
 httpRequest: {…}  
  insertId: "..."  
  jsonPayload: {
   @type: "type.googleapis.com/google.cloud.scheduler.logging.AttemptFinished"   
   jobName: "......"   
   status: "UNKNOWN"   
   targetType: "HTTP"   
   url: "https://...."   
  }
  logName: "...."  
  receiveTimestamp: "2020-03-02T06:20:36.391816880Z"  
  resource: {…}  
  severity: "ERROR"  
  timestamp: "2020-03-02T06:20:36.391816880Z"  
 }

我成功重现了您的问题,这正是我的想法,Cloud Scheduler 没有等待 Cloud Function 的响应。如果您有一个最多需要 9 分钟执行的 CF,即使您将截止日期延长到 9 分钟,这也只是在 CF 端,CS 将停止等待,使请求的状态为 UNKNOWN(因此,FAILED)。

如果你是从sdk创建CS,你应该看看参数--attempt-deadline,这会让CS等待更多。

如果您不需要看到来自 CS 的响应,您可以尝试使用 Pub/Sub 来启动进程而无需等待。

Google 支持人员发现并确认的内容: 1. 通过 GCP Cloud Console 创建的作业只能运行 60 秒,即使 Cloud Function 设置为最长 540 秒,它也会 returns 失败。注意,CF 会执行成功。 2. 为了克服,使用 gcloud SDK 命令通过命令行创建作业: https://cloud.google.com/sdk/gcloud/reference/scheduler/jobs/create/http

当我们设置 --attempt-deadline=1200s 时返回 SUCCESS,这超过 540secs CF 执行时间。

希望对您有所帮助