Cloud Functions for Firebase terpicu tepat waktu?

Jawaban:

113

Perbarui 2019-04-18

Sekarang ada cara yang sangat sederhana untuk menerapkan kode terjadwal di Cloud Functions melalui Firebase.

Anda dapat menggunakan sintaks teks sederhana:

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

Atau format tabel cron yang lebih fleksibel:

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

Untuk mempelajari lebih lanjut tentang ini, lihat:

Perhatikan bahwa proyek Anda harus menggunakan paket Blaze agar ini berfungsi, jadi saya meninggalkan opsi alternatif di bawah ini untuk referensi.

Jika Anda ingin menjadwalkan satu pemanggilan Cloud Function pada penundaan dari dalam eksekusi pemicu lain, Anda dapat menggunakan Cloud Tasks untuk menyiapkannya. Baca artikel ini untuk contoh tambahan tentang cara kerjanya.

Jawaban asli di bawah ...


Belum ada pemicu tipe runat / cron bawaan.

Untuk saat ini, opsi terbaik adalah menggunakan layanan eksternal untuk memicu fungsi HTTP secara berkala. Lihat contoh ini di repo function-samples untuk informasi selengkapnya. Atau gunakan Google Cloud Scheduler yang baru-baru ini diperkenalkan untuk memicu Cloud Functions melalui PubSub atau HTTPS:

masukkan deskripsi gambar di sini

Saya juga sangat merekomendasikan membaca posting ini di blog Firebase: Cara Menjadwalkan (Cron) Pekerjaan dengan Cloud Functions for Firebase dan video ini: Timing Cloud Functions for Firebase menggunakan HTTP Trigger dan Cron .

Tautan terakhir tersebut menggunakan cron-job.org untuk memicu Cloud Functions, dan berfungsi untuk proyek yang menggunakan paket gratis. Perhatikan bahwa ini memungkinkan siapa saja untuk memanggil fungsi Anda tanpa otorisasi, jadi Anda mungkin ingin memasukkan beberapa mekanisme perlindungan penyalahgunaan dalam kode itu sendiri.

Frank van Puffelen
sumber
1
Tidak ada yang berubah dalam hal ini. Termasuk fakta yang cron-job.orgdibicarakan Jen di postingan blog itu gratis untuk digunakan.
Frank van Puffelen
2
Video dari Jen telah diberi tag sebagai tidak berlaku lagi. Jadi apakah ada cara lain untuk melakukannya?
b-fg
2
Pendekatan tersebut sama validnya saat ini seperti saat video (dan posting blog) dibuat. Sintaksnya sedikit berubah, tetapi menurut saya kasus khusus ini tidak terpengaruh olehnya. Jika Anda kesulitan membuat ini berfungsi, buka pertanyaan yang menunjukkan apa yang telah Anda lakukan.
Frank van Puffelen
1
Wow, akhirnya mereka menerapkan cara yang sederhana! Akhirnya !!!! Terima kasih atas pembaruannya
schankam
1
Dari halaman Cloud Scheduler Each Cloud Scheduler job costs $0.10 (USD) per month:, dengan asumsi "tugas" tidak berarti setiap kali hal yang dijadwalkan diaktifkan, tetapi biaya per timer? yaitu pekerjaan yang berjalan setiap menit hanya berharga $ 0,10? (tidak termasuk fungsi cloud apa pun yang dipanggilnya).
Aaron Ash
12

Yang dapat Anda lakukan adalah menjalankan instance AppEngine yang dipicu oleh tugas cron dan dikirim ke PubSub. Saya menulis posting blog khusus tentang itu, Anda mungkin ingin melihatnya:

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

mhaligowski
sumber
1
Berapa perkiraan biaya per bulan, untuk pekerjaan cron yang terpicu sekali setiap jam?
Ehtesham Hasan
3
@EhteshamHasan Sepertinya ini berpotensi gratis: cloud.google.com/free . Saat ini gratis 28 jam instans / hari; Juga, ada instance f1-micro dari Google Compute Engine dengan Linux yang menjalankan crons gratis atm.
bitsoflogic