Cloud Functions for Firebase se déclenche à temps?

Réponses:

113

Mise à jour 18/04/2019

Il existe désormais un moyen très simple de déployer du code planifié sur Cloud Functions via Firebase.

Vous pouvez soit utiliser une syntaxe de texte simple:

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

Ou le format de table cron plus flexible:

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

Pour en savoir plus, consultez:

Notez que votre projet doit être sur un plan Blaze pour que cela fonctionne, donc je laisse les options alternatives ci-dessous pour référence.

Si vous souhaitez planifier un appel unique d'une fonction cloud sur un délai à partir de l'exécution d'un autre déclencheur, vous pouvez utiliser Cloud Tasks pour le configurer. Lisez cet article pour un exemple détaillé de la façon dont cela peut fonctionner.

Réponse originale ci-dessous ...


Il n'y a pas encore de déclencheur de type runat / cron intégré.

Pour le moment, la meilleure option est d'utiliser un service externe pour déclencher périodiquement une fonction HTTP. Pour plus d'informations, consultez cet exemple dans le référentiel functions-samples . Ou utilisez le Google Cloud Scheduler récemment introduit pour déclencher Cloud Functions via PubSub ou HTTPS:

entrez la description de l'image ici

Je recommande également vivement de lire cet article sur le blog Firebase: Comment planifier des tâches (Cron) avec Cloud Functions pour Firebase et cette vidéo: Timing Cloud Functions pour Firebase à l'aide d'un déclencheur HTTP et Cron .

Ce dernier lien utilise cron-job.org pour déclencher Cloud Functions et fonctionne pour les projets qui sont sur un plan gratuit. Notez que cela permet à quiconque d'appeler votre fonction sans autorisation, vous pouvez donc vouloir inclure un mécanisme de protection contre les abus dans le code lui-même.

Frank van Puffelen
la source
1
Rien n'a changé à ce sujet. Y compris le fait que cron-job.orgJen parle dans le billet de blog est gratuit.
Frank van Puffelen
2
La vidéo de Jen a été marquée comme obsolète. Alors, y a-t-il une autre façon de le faire?
b-fg
2
L'approche est aussi valable aujourd'hui qu'elle l'était lorsque la vidéo (et l'article de blog) ont été réalisés. La syntaxe a légèrement changé, mais je ne pense pas que ce cas particulier en soit affecté. Si vous rencontrez des difficultés pour que cela fonctionne, ouvrez une question qui montre ce que vous avez déjà fait.
Frank van Puffelen
1
Wow, ils ont finalement mis en place un moyen de le faire simplement! Finalement !!!! Merci pour la mise à jour
schankam
1
À partir de la page Cloud Scheduler:, en Each Cloud Scheduler job costs $0.10 (USD) per monthsupposant que "tâche" ne signifie pas chaque fois que l'objet planifié se déclenche, mais le coût par minuterie? c'est-à-dire qu'un travail qui s'exécute toutes les minutes ne coûte que 0,10 $? (à l'exclusion des fonctions cloud qu'il appelle).
Aaron Ash
12

Ce que vous pouvez faire, c'est lancer une instance AppEngine qui est déclenchée par une tâche cron et émise vers PubSub. J'ai écrit un article de blog spécifiquement à ce sujet, vous voudrez peut-être jeter un coup d'œil:

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

mhaligowski
la source
1
Quel est le coût estimé par mois, pour un travail cron qui se déclenche une fois par heure?
Ehtesham Hasan
3
@EhteshamHasan On dirait que c'est potentiellement gratuit: cloud.google.com/free . Actuellement, 28 heures d'instance / jour sont gratuites; En outre, il existe l'instance f1-micro de Google Compute Engine avec Linux exécutant des crons pour un guichet automatique gratuit.
bitsoflogic