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 执行时间。
希望对您有所帮助
有一个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 执行时间。
希望对您有所帮助