Menjadwalkan fungsi

Jika Anda ingin menjadwalkan fungsi untuk dijalankan pada waktu yang ditentukan, gunakan subpaket firebase-functions/v2/scheduler. Metode onSchedule membuat topik Pub/Sub dan menggunakan Cloud Scheduler untuk memicu peristiwa pada topik tersebut yang memastikan bahwa fungsi Anda berjalan sesuai jadwal yang diinginkan.

Sebelum memulai

Untuk menggunakan solusi ini di project Firebase, project Anda harus menggunakan paket harga Blaze. Jika belum menggunakan paket Blaze, upgrade paket harga Anda.

Meskipun penagihan diperlukan, biaya keseluruhan dapat dikelola, karena setiap tugas Cloud Scheduler memerlukan biaya $0,10 (USD) per bulan, dan terdapat kuota tiga tugas per akun Google, tanpa dikenai biaya. Gunakan kalkulator harga paket Blaze untuk membuat perkiraan biaya berdasarkan penggunaan yang Anda proyeksikan.

Pub/Sub dan Cloud Scheduler API harus diaktifkan untuk project Anda. Fitur ini seharusnya sudah diaktifkan untuk sebagian besar project Firebase. Anda dapat memverifikasinya di Google Cloud Platform Console.

Menulis fungsi terjadwal

Di Cloud Functions for Firebase, logika penjadwalan berada di kode fungsi Anda, tanpa persyaratan waktu deploy khusus. Untuk membuat fungsi terjadwal, gunakan onSchedule untuk memulai tugas Cloud Scheduler. Misalnya, untuk membersihkan akun pengguna yang tidak aktif sekali sehari, Anda dapat menggunakan contoh seperti berikut:

// Run once a day at midnight, to clean up the users
// Manually run the task here https://console.cloud.google.com/cloudscheduler
exports.accountcleanup = onSchedule("every day 00:00", async (event) => {
  // Fetch all user details.
  const inactiveUsers = await getInactiveUsers();

  // Use a pool so that we delete maximum `MAX_CONCURRENT` users in parallel.
  const promisePool = new PromisePool(
      () => deleteInactiveUser(inactiveUsers),
      MAX_CONCURRENT,
  );
  await promisePool.start();

  logger.log("User cleanup finished");
});

Baik sintaksis Unix Crontab maupun App Engine didukung oleh Cloud Scheduler. Misalnya, untuk menggunakan Crontab guna memilih zona waktu tertentu yang akan digunakan untuk menjalankan fungsi terjadwal, lakukan sesuatu seperti ini:

exports.scheduledFunctionCrontab = functions.pubsub.schedule('5 11 * * *')
  .timeZone('America/New_York') // Users can choose timezone - default is UTC
  .onRun((context) => {
  console.log('This will be run every day at 11:05 AM Eastern!');
  return null;
});

Nilai untuk timeZone harus berupa nama zona waktu dari database tz. Lihat referensi Cloud Scheduler untuk mengetahui informasi selengkapnya tentang properti yang didukung.

Men-deploy fungsi terjadwal

Saat Anda menerapkan fungsi terjadwal, tugas penjadwal dan topik pub/sub terkait dibuat secara otomatis. Firebase CLI mencerminkan nama topik, dan Anda dapat melihat tugas dan topik di GCP Console. Topiknya diberi nama sesuai dengan konvensi berikut:

firebase-scheduled-function_name-region

Contoh:

firebase-scheduled-scheduledFunctionCrontab-us-east1.