Как работать с облачными функциями асинхронно
Описание сценария
- Необходимо реализовать асинхронный вызов облачной функции;
- Необходимо закрыть соединение и отдать ответ функции, не дожидаясь окончания работы облачной функции;
- Необходимо сделать так, чтобы функция работала более 10 минут.
Решение
Напрямую реализовать асинхронные вызовы в Cloud Functions не получится - пока контейнер Serverless Containers или облачная функция выполняются, они не могут вернуть HTTP-ответ. Как только контейнер или функция вернут ответ, их выполнение завершается.
В качестве альтернативного сценария реализовать такой пайплайн возможно при помощи сервисов API Gateway и Data Streams.
- Cоздайте шлюз API Gateway в качестве обработчика вебхука, к которому будет подключен поток данных Data Streams.
- Настройте триггер для потока данных, который будет вызывать контейнер или функцию.
В этом случае шлюз API Gateway вернет код ответа HTTP 200 OK
, а контейнер или функция асинхронно обработают вызов.
Важно
Выполнение кода внутри контейнера Serverless Containers или облачной функции не может выполняться дольше 10 минут, в том числе с использованием триггеров. Мы пишем об этом в документации сервисов.
Если есть возможность разбить вычисление на несколько вызовов, вы можете собрать асинхронный конвейер: когда первый вызов производит вычисления и вызывает следующую стадию через тот же самый поток данных Data Streams. Однако следует учитывать, что в этом случае второй вызов может быть обработан в другом экземпляре контейнера или облачной функции.