Funkcje chmury dla Firebase wyzwalają się na czas?

Odpowiedzi:

115

Aktualizacja 2019-04-18

Obecnie istnieje bardzo prosty sposób wdrażania zaplanowanego kodu w Cloud Functions za pośrednictwem Firebase.

Możesz użyć prostej składni tekstowej:

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

Lub bardziej elastyczny format tabeli cron:

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

Aby dowiedzieć się więcej na ten temat, zobacz:

Pamiętaj, że Twój projekt musi być objęty planem Blaze, aby to zadziałało, więc poniżej zostawiam alternatywne opcje w celach informacyjnych.

Jeśli chcesz zaplanować pojedyncze wywołanie funkcji chmury z opóźnieniem w trakcie wykonywania innego wyzwalacza, możesz to skonfigurować za pomocą zadań w chmurze . Przeczytaj ten artykuł aby się z rozszerzonym przykładem tego, jak to działa.

Oryginalna odpowiedź poniżej ...


Nie ma jeszcze wbudowanego wyzwalacza typu runat / cron.

W tej chwili najlepszym rozwiązaniem jest okresowe uruchamianie funkcji HTTP za pomocą usługi zewnętrznej. Zobacz ten przykład w repozytorium functions-samples, aby uzyskać więcej informacji. Lub użyj niedawno wprowadzonego Google Cloud Scheduler, aby uruchomić Cloud Functions przez PubSub lub HTTPS:

wprowadź opis obrazu tutaj

Gorąco polecam również przeczytanie tego posta na blogu Firebase: Jak zaplanować (Cron) zadania za pomocą funkcji Cloud Functions dla Firebase oraz tego filmu: Synchronizowanie funkcji chmury w Firebase przy użyciu wyzwalacza HTTP i Cron .

Ten ostatni link używa cron-job.org do uruchamiania funkcji Cloud i działa w przypadku projektów objętych bezpłatnym abonamentem. Zwróć uwagę, że umożliwia to każdemu wywołanie Twojej funkcji bez autoryzacji, więc możesz chcieć uwzględnić jakiś mechanizm ochrony przed nadużyciami w samym kodzie.

Frank van Puffelen
źródło
1
Wokół tego nic się nie zmieniło. Włączenie tego, o cron-job.orgczym Jen mówi w poście na blogu, jest bezpłatne.
Frank van Puffelen
2
Film wideo od Jen został oznaczony jako przestarzały. Czy jest więc inny sposób, aby to zrobić?
b-fg
2
Podejście to jest tak samo aktualne dzisiaj, jak wtedy, gdy powstał film (i wpis na blogu). Składnia uległa nieznacznej zmianie, ale nie sądzę, aby miało to wpływ na ten konkretny przypadek. Jeśli masz problem z wykonaniem tej czynności, otwórz pytanie, które pokazuje, co już zrobiłeś.
Frank van Puffelen
1
Wow, w końcu wdrożyli sposób, aby to zrobić po prostu! Wreszcie !!!! Dzięki za aktualizację
schankam
1
Ze strony Cloud Scheduler: Each Cloud Scheduler job costs $0.10 (USD) per monthzałożenie, że „zadanie” nie oznacza każdorazowego uruchomienia zaplanowanej rzeczy, ale koszt licznika czasu? tj. praca wykonywana co minutę kosztuje tylko 0,10 USD? (z wyłączeniem wszelkich funkcji chmury, które wywołuje).
Aaron Ash
13

To, co możesz zrobić, to uruchomić instancję AppEngine, która jest wyzwalana przez zadanie cron i emitowana do PubSub. Napisałem post na blogu specjalnie na ten temat, możesz rzucić okiem:

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

mhaligowski
źródło
1
Jaki jest szacunkowy koszt miesięczny zadania cron, które jest uruchamiane co godzinę?
Ehtesham Hasan
3
@EhteshamHasan Wygląda na to, że jest potencjalnie bezpłatny: cloud.google.com/free . Obecnie 28 godzin instancji dziennie bezpłatnie; Istnieje również instancja f1-micro Google Compute Engine z systemem Linux obsługującym crony dla darmowego bankomatu.
bitsoflogic