Время первого вызова облачной функции Google всегда истекло - PullRequest
0 голосов
/ 07 октября 2019

У меня есть облачная функция Google, которая, по-видимому, перестает работать после определенного времени бездействия или после повторного развертывания. Последующие вызовы в конечную точку работают просто отлично, это просто начальный вызов, который не работает. Ниже приведена упрощенная версия моей облачной функции. Я в основном использую экспресс-приложение в качестве обработчика. Возможно, проблема в том, что приложение 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'" 
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 голосов
/ 08 октября 2019

Время выполнения облачной функции ограничено временем ожидания, которое можно указать во время развертывания функции. По умолчанию функция отключается через 1 минуту. Как указано в официальной документации :

Когда выполнение функции превышает тайм-аут, вызывающая сторона немедленно возвращает статус ошибки. Ресурсы ЦП, используемые экземпляром функции тайм-аута, регулируются, и обработка запроса может быть немедленно приостановлена. Приостановленная работа может продолжаться или не выполняться по последующим запросам, что может вызвать неожиданные побочные эффекты.

Обратите внимание, что этот период может быть продлен до 9 минут. Чтобы установить предел времени ожидания функций, вы можете использовать эту команду gcloud:

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

Более подробную информацию о ваших опциях можно найти по здесь . Но, может быть, если выполнение вашего кода занимает много времени, вы можете также рассмотреть возможность использования другой опции без сервера, например Cloud Run .

0 голосов
/ 18 октября 2019

У меня недостаточно репутации, чтобы прокомментировать ваш начальный вопрос. У меня была похожая проблема, но я использовал облачные функции Firebase. Мой будет работать только после того, как я разверну его, а затем через час или около того бездействия я получаю сообщение об ошибке тайм-аута.

Вам удалось решить проблему?

** Проверить эту тему отрепозиторий GitHub для GRPC. https://github.com/grpc/grpc-node/issues/1064

0 голосов
/ 07 октября 2019

Облачная функция Google может рассматриваться как обработчик событий для входящего запроса события. Облачная функция может быть запущена из запроса REST, из паба / саба или из облачного хранилища. Для запроса REST рассмотрите функцию, которую вы предоставляете, как единственный и единственный «обработчик», который предлагает функция.

Код, который вы предоставляете (при условии Node.JS), является функцией, которая передается в экспресс-запросе. объект и объект ответа. В теле функции вы несете ответственность за обработку запроса.

В частности, ваша облачная функция не должна настраивать экспресс или пытаться каким-либо образом изменить среду. Облачная функция обеспечивает среду, которая будет вызываться извне, и вы предоставляете логику для вызова. Все остальное (масштабирование и т. Д.) Обрабатывается Google.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...