Облачные функции для Firebase срабатывают вовремя?

Ответы:

115

Обновление 2019-04-18

Теперь есть очень простой способ развернуть запланированный код в облачных функциях через Firebase.

Вы можете использовать простой текстовый синтаксис:

export scheduledFunctionPlainEnglish =
functions.pubsub.schedule('every 5 minutes').onRun((context) => {
    console.log('This will be run every 5 minutes!');
})

Или более гибкий формат таблицы cron:

export scheduledFunctionCrontab =
functions.pubsub.schedule('5 11 * * *').onRun((context) => {
    console.log('This will be run every day at 11:05 AM UTC!');
});

Чтобы узнать больше об этом, см .:

Обратите внимание, что ваш проект должен быть включен в план Blaze, чтобы это работало, поэтому я оставляю альтернативные варианты ниже для справки.

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

Оригинальный ответ ниже ...


Встроенного триггера типа runat / cron пока нет.

На данный момент лучшим вариантом является использование внешней службы для периодического запуска функции HTTP. См. Этот образец в репозитории functions-samples для получения дополнительной информации. Или используйте недавно представленный Google Cloud Scheduler, чтобы запускать облачные функции через PubSub или HTTPS:

введите описание изображения здесь

Я также настоятельно рекомендую прочитать этот пост в блоге Firebase: Как планировать (Cron) задания с помощью облачных функций для Firebase и это видео: Временные облачные функции для Firebase с использованием HTTP-триггера и Cron .

Последняя ссылка использует cron-job.org для запуска облачных функций и работает для проектов с бесплатным тарифным планом. Обратите внимание, что это позволяет любому вызывать вашу функцию без авторизации, поэтому вы можете включить какой-либо механизм защиты от злоупотреблений в сам код.

Франк ван Пуффелен
источник
1
Ничего не изменилось вокруг этого. Включая тот факт, cron-job.orgчто то, о чем Джен говорит в своем блоге, можно использовать бесплатно.
Франк ван Пуффелен
2
Видео от Джен было помечено как устаревшее. Так есть ли другой способ сделать это?
b-fg
2
Этот подход так же актуален сегодня, как и при создании видео (и сообщения в блоге). Синтаксис немного изменился, но я не думаю, что это повлияет на этот конкретный случай. Если у вас возникли проблемы с выполнением этой работы, задайте вопрос, который показывает, что вы уже сделали.
Франк ван Пуффелен
1
Вау, наконец-то они реализовали способ сделать это просто! В заключение !!!! Спасибо за обновление
schankam
1
Со страницы Cloud Scheduler: Each Cloud Scheduler job costs $0.10 (USD) per monthпредполагается, что «задание» означает не каждый раз, когда срабатывает запланированная вещь, а стоимость таймера? то есть задание, которое выполняется каждую минуту, стоит всего 0,10 доллара? (за исключением вызываемых им облачных функций).
Аарон Эш
13

Что вы можете сделать, так это запустить экземпляр AppEngine, который запускается заданием cron и отправляет его в PubSub. Я написал сообщение в блоге специально об этом, вы можете взглянуть:

https://mhaligowski.github.io/blog/2017/05/25/scheduled-cloud-function-execution.html

малиговский
источник
1
Какова ориентировочная стоимость в месяц для задания cron, которое запускается один раз в час?
Этешам Хасан
3
@EhteshamHasan Похоже, это потенциально бесплатно: cloud.google.com/free . В настоящее время бесплатно 28 инстансов часов в день; Кроме того, есть экземпляр f1-micro от Google Compute Engine с Linux, на котором работает crons бесплатно.
bitsoflogic 06