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

Мы думали, что для ускорения этого процесса нужно вызывать каждую функцию (их немного, на данный момент около 20, наш счет не уйдет на Луну), когда мы открываем приложение, перед входом в систему и просто возвращаем нулевое значение без выполнения какого-либо другого кода внутри него. Это приведет к их горячей загрузке для использования в следующие несколько минут, избегая холодных запусков и позволяя нам быстро и легко протестировать наш внешний + внутренний код.

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

Есть ли способ запустить эти функции и отправить им данные через параметр? Или это есть какой-то другой подход к этой ситуации?

3
Franco Muñiz 20 Сен 2018 в 04:30

2 ответа

Лучший ответ

Триггеры, не основанные на HTTP, называются «фоновыми триггерами». Не существует способа программно запустить фоновую функцию, развернутую в облачных функциях, без фактического выполнения действия, которое могло бы ее запустить. Нет прямого вызова, как это бывает, когда вы используете локальный эмулятор.

Вам нужно будет придумать действие, которое выглядит как реальное, но содержит некоторые данные, говорящие о том, что не следует действовать в соответствии с ним. Например, добавление данных в вашу базу данных со специальным полем, которое указывает, что они не должны работать и должны быть немедленно удалены вместо этого.

4
Doug Stevenson 20 Сен 2018 в 01:38

Я нашел документацию по прямым триггерам, которая, по крайней мере, соответствует моему опыту работы с < a href = "https://console.cloud.google.com/functions/" rel = "nofollow noreferrer"> консоль функций Google Cloud , где функции можно запускать вручную. Существует также интересный пример командной строки, который позволяет передавать данные функциям. Обратите внимание на то, что они говорят о квотах и разработке по сравнению с производством, хотя я заметил, что ваш вопрос касался разработки.

Для поддержки быстрой итерации и отладки Cloud Functions предоставляет команду вызова в интерфейсе командной строки и функции тестирования в пользовательском интерфейсе консоли GCP. Это позволяет напрямую вызывать функцию, чтобы убедиться, что она ведет себя должным образом. Это вызывает немедленное выполнение функции, даже если она могла быть развернута для ответа на определенное событие.

Примечание. Прямые триггеры используют API вызовов. Этот API имеет ограниченную квоту, которую нельзя увеличить. Он предназначен для тестирования и отладки и не должен использоваться в производственной среде.

...

gcloud functions call YOUR_FUNCTION_NAME --data '{"name":"Keyboard Cat"}'

2
Chris Chiasson 2 Сен 2019 в 18:21