如何解决 gcloud crashed (ReadTimeout): HTTPSConnectionPool(host='cloudfunctions.googleapis.com', port=443): Read timed out。 (读取超时=300)

How to resolve gcloud crashed (ReadTimeout): HTTPSConnectionPool(host='cloudfunctions.googleapis.com', port=443): Read timed out. (read timeout=300)

我在终端使用 gcloud 命令触发云函数时收到错误:

gcloud functions call function_name

在云功能日志页面上没有显示任何错误,并且任务顺利完成,但是,在任务完成后,此错误显示在终端上。

gcloud crashed (ReadTimeout): HTTPSConnectionPool(host='cloudfunctions.googleapis.com', port=443): Read timed out. (read timeout=300)

注意:我的函数超时设置为 540 秒,完成作业大约需要 320 秒

我认为问题在于 gcloud functions call 在 300 秒后超时并且无法配置更长的超时以匹配 Cloud Function。

我创建了一个简单的 Golang 云函数:

func HelloFreddie(w http.ResponseWriter, r *http.Request) {
    log.Println("Sleeping")
    time.Sleep(400*time.Second)
    log.Println("Resuming")
    fmt.Fprint(w, "Hello Freddie")
}

并部署它:

gcloud functions deploy ${NAME} \
--region=${REGION} \
--allow-unauthenticated \
--entry-point="HelloFreddie" \
--runtime=go113 \
--source=${PWD} \
--timeout=520 \
--max-instances=1 \
--trigger-http \
--project=${PROJECT}

然后我 time 使用 gcloud functions call ${NAME} ...

time \
  gcloud functions call ${NAME} \
  --region=${REGION} \
  --project=${PROJECT}

这超时了:

ERROR: gcloud crashed (ReadTimeout): HTTPSConnectionPool(host='cloudfunctions.googleapis.com', port=443): Read timed out. (read timeout=300)

real    5m1.079s
user    0m0.589s
sys     0m0.107s

NOTE 5m1s ~== 300s

但是,使用 curl:

time \
  curl \
  --request GET \
  --header "Authorization: Bearer $(gcloud auth print-access-token)" \
  $(\
    gcloud functions describe ${NAME} \
    --region=${REGION}
    --project=${PROJECT} \
    --format="value(httpsTrigger.url)")

产量:

Hello Freddie
real    6m43.048s
user    0m1.210s
sys     0m0.167s

NOTE 6m43s ~== 400s

因此,gcloud functions call 在 300 秒后超时,这是不可配置的。

已向 Google 的问题跟踪程序提交 issue