1

有一个 Http 触发 Cloud 函数可以成功执行。

功能代码:

在此处输入图像描述

使用堆栈驱动程序记录:

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

现在,我创建了一个云调度程序来每天凌晨 04:00 触发这个云功能。

使用堆栈驱动程序的调度程序日志记录:

{
 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"  
 }
4

2 回答 2

2

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

如果您是从 sdk 创建 CS,您应该查看参数--attempt-deadline,这将允许 CS 等待更多时间。

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

于 2020-03-03T10:40:53.423 回答
1

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

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

希望这可以帮助

于 2020-04-20T15:27:42.070 回答