Express 谷歌云函数的首次调用总是超时

Express 谷歌云函数的首次调用总是超时,express,google-cloud-platform,google-cloud-functions,serverless,Express,Google Cloud Platform,Google Cloud Functions,Serverless,我有一个谷歌云功能,它在停用一段时间后,或者如果我重新部署它,它似乎会超时。对端点的后续调用工作正常,只是初始调用不起作用。下面是我的云功能的过度简化版本。我基本上使用express应用程序作为处理程序。也许问题在于express应用程序不是第一次运行,而是在后续调用中运行 const express = require('express'); const app = express(); const cors = require('cors'); app.use(cors()) app.

我有一个谷歌云功能,它在停用一段时间后,或者如果我重新部署它,它似乎会超时。对端点的后续调用工作正常,只是初始调用不起作用。下面是我的云功能的过度简化版本。我基本上使用express应用程序作为处理程序。也许问题在于express应用程序不是第一次运行,而是在后续调用中运行

const express = require('express');
const app = express();

const cors = require('cors');

app.use(cors())

app.get('/health', (req, res) => {
  res.send('OK');
});

module.exports = app;
目前,我们已经设定到60年代,像健康路线这样的路线应该不会花那么长时间

一些有趣的日志条目

"Function execution took 60004 ms, finished with status: 'timeout'" 

GoogleCloud函数可以被视为传入事件请求的事件处理程序。可以从REST请求、发布/订阅或云存储触发云功能。对于REST请求,请考虑您提供的函数作为函数提供的唯一的“处理程序”。

您提供的代码(假设Node.JS)是一个在express请求对象和响应对象中传递的函数。在函数体中,您负责处理请求


具体而言,您的云功能不应设置express或尝试以其他方式修改环境。云函数提供外部调用的环境,您提供要调用的逻辑。其他一切(缩放等)都由Google处理。

云函数执行时间受超时时间限制,您可以在函数部署时指定超时时间。默认情况下,函数在1分钟后超时。 正如合同中所述:

当函数执行超过超时时,将立即向调用方返回错误状态。超时函数实例使用的CPU资源被限制,请求处理可能会立即暂停。暂停的工作可能会或可能不会在后续请求中继续,这可能会导致意外的副作用

请注意,此时间段最多可延长9分钟。要设置功能超时限制,可以使用以下gcloud命令:

gcloud functions deploy FUNCTION_NAME --timeout=TIMEOUT FLAGS...
有关您的选项的更多详细信息,请访问。
但是,如果你的代码需要很长的时间来执行,你也可以考虑使用另一个无服务器选项,比如,

谷歌函数有一个非常缓慢的冷启动。函数的超时时间是多少?是60秒。没有cors时它的行为是否相同?我可以尝试删除该中间件,但我希望它将是相同的。这是您的整个程序吗?如果您在60秒后超时,则会发生其他情况。请详细回答你的问题。包括Stackdriver的日志。嗨,Kolban,谢谢你的回复。我使用express作为处理程序,我没有试图修改环境(我没有使用应用程序来侦听请求),只是处理请求(因为express应用程序本质上需要一个请求对象和响应对象,正如Google功能所期望的那样。如果它不是每次都能工作,我会理解,但它只是不能在第一次调用时工作。作为参考,问题是为什么它需要这么长时间和超时,而不是它正在超时。函数的开始时间不应该是60多岁。如果这是你使用的所有代码,并且仍然面临同样的问题,你可以考虑打开一张支持票来进行更深层次的调查,因为我重述了你的情况,我没有面对你面临的问题。
gcloud functions deploy FUNCTION_NAME --timeout=TIMEOUT FLAGS...