首次调用Google Cloud Function总是超时

时间:2019-10-07 20:02:23

标签: express google-cloud-platform google-cloud-functions serverless

我有一个google cloud功能,在一段时间不活动或重新部署后似乎超时。后续对端点的调用工作正常,只是初始调用不起作用。以下是我的云功能的简化版本。我基本上使用快速应用程序作为处理程序。也许问题出在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;

当前设置为60s,像健康路线这样的路线不应该花费那么长时间。

一些有趣的日志条目

"Function execution took 60004 ms, finished with status: 'timeout'" 
textPayload: "Error: Retry total timeout exceeded before any response was received
    at repeat (/srv/functions/node_modules/google-gax/build/src/normalCalls/retries.js:80:31)
    at Timeout.setTimeout [as _onTimeout] (/srv/functions/node_modules/google-gax/build/src/normalCalls/retries.js:113:25)
    at ontimeout (timers.js:436:11)
    at tryOnTimeout (timers.js:300:5)
    at listOnTimeout (timers.js:263:5)
    at Timer.processTimers (timers.js:223:10)" 

3 个答案:

答案 0 :(得分:0)

可以将Google Cloud Function视为传入事件请求的事件处理程序。可以从REST请求,发布/订阅或云存储中触发云功能。对于REST请求,请考虑将提供的功能作为该功能提供的唯一“处理程序”。

您提供的代码(假定为Node.JS)是在快速请求对象和响应对象中传递的函数。在该函数的主体中,您负责处理请求。

具体而言,您的Cloud Function不应设置快速表达或尝试以其他方式修改环境。 Cloud Function提供了要在外部调用的环境,而您提供了要调用的逻辑。其他一切(缩放等)均由Google处理。

答案 1 :(得分:0)

云功能执行时间受超时持续时间的限制,您可以在功能部署时指定超时时间。默认情况下,功能在1分钟后超时。 正如official documentation中所述:

  

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

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

gcloud functions deploy FUNCTION_NAME --timeout=TIMEOUT FLAGS...

有关您的选项的更多详细信息,请访问here。 但是,也许如果您的代码需要很长时间才能执行,您可能还考虑使用其他无服务器选项,例如Cloud Run

答案 2 :(得分:0)

我的信誉不足,无法对您的第一个问题发表评论。我遇到过类似的问题,但是使用Firebase云功能。我的只有在部署它后才能工作,然后在一个小时左右的闲置状态后出现超时错误。

您设法解决了这个问题吗?

**从GitHub存储库中检出此线程以获取grpc。 https://github.com/grpc/grpc-node/issues/1064