Запустите Google Cloud Function в определенное время - PullRequest
0 голосов
/ 18 декабря 2018

Я бы хотел запланировать выполнение функции облака на определенное время.Он должен быть запущен только один раз.

У меня есть функция startTask, которая изменяет некоторые данные в базе данных Firestore.Через X секунд (время передается функции startTask) должна быть вызвана функция "finishTask".

Я уже пробовал возиться с облачными задачами Google, но мне кажется, что это неправильный способидти.

Ответы [ 2 ]

0 голосов
/ 11 марта 2019

Самый простой способ - создать паб / подтему, cron-topic, на которую подписывается ваша облачная функция.Cloud Scheduler может выдвинуть событие на cron-topic по расписанию

Создать тему и подписку

gcloud pubsub topics create cron-topic
# create cron-sub for testing.  Function will create it's own subscription
gcloud pubsub subscriptions create cron-sub --topic cron-topic

Создать расписание

Команда ниже, но она бетасм. руководство по консоли здесь

# send a message every 3 hours. For testing use `0/2 * * * *` for every 2 min
gcloud beta scheduler jobs create pubsub --topic=cron-topic --schedule='0 */3 * * *'

Создание функции для использования cron-topic Topic

Поместите код функции в текущий каталог и используйте эту команду дляразверните функцию прослушивания cron-topic topic

FUNCTION_NAME=cron-topic-listener
gcloud functions deploy ${FUNCTION_NAME} --runtime go111 --trigger-topic cron-topic

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

0 голосов
/ 18 декабря 2018

В Google Cloud нет службы, которая будет делать то, что вам нужно, о чем я знаю.Если вам нужно, чтобы X происходило через N секунд после того, как пользователь делает Y, вам нужно будет самостоятельно кодировать этот сервис.

Вы не указываете, какие сервисы вы используете для вычислений (App Engine, Compute Engine, Kubernetes и т. Д.).), но написание службы планирования задач практически на любом языке не очень сложно.Есть много способов сделать это (код на стороне клиента / код на стороне сервера).Многие комбинации ОС / языка поддерживают планирование функции с таймаутом и обратным вызовом.

...