Cloud-Funktionen für Firebase rechtzeitig auslösen?

Antworten:

112

Update 2019-04-18

Es gibt jetzt eine sehr einfache Möglichkeit, geplanten Code für Cloud-Funktionen über Firebase bereitzustellen.

Sie können entweder eine einfache Textsyntax verwenden:

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

Oder das flexiblere Cron-Tabellenformat:

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

Weitere Informationen hierzu finden Sie unter:

Beachten Sie, dass sich Ihr Projekt in einem Blaze-Plan befinden muss, damit dies funktioniert. Daher lasse ich die folgenden alternativen Optionen als Referenz.

Wenn Sie einen einzelnen Aufruf einer Cloud-Funktion mit einer Verzögerung innerhalb der Ausführung eines anderen Triggers planen möchten , können Sie dies mithilfe von Cloud-Aufgaben einrichten. In diesem Artikel finden Sie ein ausführliches Beispiel dafür, wie dies funktionieren kann.

Ursprüngliche Antwort unten ...


Es gibt noch keinen eingebauten Runat / Cron-Trigger.

Derzeit ist es am besten, einen externen Dienst zu verwenden, um regelmäßig eine HTTP-Funktion auszulösen. Weitere Informationen finden Sie in diesem Beispiel im Repo für Funktionsbeispiele . Oder verwenden Sie den kürzlich eingeführten Google Cloud Scheduler, um Cloud-Funktionen über PubSub oder HTTPS auszulösen:

Geben Sie hier die Bildbeschreibung ein

Ich empfehle außerdem dringend, diesen Beitrag im Firebase-Blog zu lesen: Planen von (Cron) Jobs mit Cloud-Funktionen für Firebase und dieses Video: Timing von Cloud-Funktionen für Firebase mithilfe eines HTTP-Triggers und Cron .

Dieser letzte Link verwendet cron-job.org , um Cloud-Funktionen auszulösen, und funktioniert für Projekte, für die ein kostenloser Plan vorliegt . Beachten Sie, dass jeder Ihre Funktion ohne Berechtigung aufrufen kann. Daher möchten Sie möglicherweise einen Missbrauchsschutzmechanismus in den Code selbst aufnehmen.

Frank van Puffelen
quelle
1
Daran hat sich nichts geändert. Einschließlich der Tatsache, cron-job.orgdass Jen im Blog-Beitrag darüber spricht, ist die Verwendung kostenlos.
Frank van Puffelen
2
Das Video von Jen wurde als veraltet markiert. Gibt es also einen anderen Weg, dies zu tun?
B-FG
2
Der Ansatz ist heute genauso gültig wie zu dem Zeitpunkt, als das Video (und der Blog-Beitrag) erstellt wurden. Die Syntax hat sich geringfügig geändert, aber ich glaube nicht, dass dieser spezielle Fall davon betroffen ist. Wenn Sie Probleme haben, diese Funktion auszuführen, öffnen Sie eine Frage, die zeigt, was Sie bereits getan haben.
Frank van Puffelen
1
Wow, endlich haben sie einen Weg implementiert, es einfach zu machen! Endlich !!!! Vielen Dank für das Update
schankam
1
Auf der Cloud Scheduler-Seite: Each Cloud Scheduler job costs $0.10 (USD) per monthWenn Sie "Job" annehmen, bedeutet dies nicht jedes Mal, wenn das geplante Objekt ausgelöst wird, sondern die Kosten pro Timer? dh ein Job, der jede Minute ausgeführt wird, kostet nur 0,10 USD? (Ausgenommen alle Cloud-Funktionen, die aufgerufen werden).
Aaron Ash
12

Sie können eine AppEngine-Instanz starten, die durch einen Cron-Job ausgelöst und an PubSub gesendet wird. Ich habe einen Blog-Beitrag speziell dazu geschrieben. Vielleicht möchten Sie einen Blick darauf werfen:

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

mhaligowski
quelle
1
Was sind die geschätzten monatlichen Kosten für einen Cron-Job, der einmal pro Stunde ausgelöst wird?
Ehtesham Hasan
3
@EhteshamHasan Sieht so aus, als wäre es möglicherweise kostenlos: cloud.google.com/free . Derzeit 28 Instanzstunden / Tag frei; Außerdem gibt es die f1-micro-Instanz von Google Compute Engine mit Linux, auf der Cronen kostenlos ausgeführt werden.
bitsoflogic