Я хотел бы запланировать выполнение облачной функции на определенное время. Его следует запускать только один раз.
У меня в основном есть функция startTask, которая изменяет некоторые данные в базе данных Firestore. Через X секунд (время передается функции startTask) должна быть вызвана функция finishTask.
Я уже пробовал возиться с Google Cloud Tasks, но мне кажется, что это неправильный путь.
В Google Cloud нет службы, которая бы делала то, что вам нужно, о чем я знаю. Если вам нужно, чтобы X произошло через N секунд после того, как пользователь выполнит Y, вам нужно будет самостоятельно запрограммировать эту службу.
Вы не указываете, какие службы вы используете для вычислений (App Engine, Compute Engine, Kubernetes и т. д.), Но написать службу планирования задач практически на любом языке не очень сложно. Есть много способов сделать это (код на стороне клиента / код на стороне сервера). Многие комбинации ОС / языка поддерживают планирование функции с тайм-аутом и обратным вызовом.
Самый простой способ - создать тему публикации / подписки 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
Поместите код своей функции в текущий каталог и используйте эту команду для развертывания функции, прослушивая тему cron-topic
.
FUNCTION_NAME=cron-topic-listener
gcloud functions deploy ${FUNCTION_NAME} --runtime go111 --trigger-topic cron-topic
События публикации / подписки Примечание отправляются как минимум один раз. В некоторых случаях событие может быть отправлено более одного раза. Убедитесь, что ваша функция идемпотентна
OP просит запланировать запуск облачной функции только однажды.