פונקציות תזמון


אם רוצים לתזמן את הפעלת הפונקציות בשעות ספציפיות, צריך להשתמש ב-handler‏ onSchedule כדי ליצור נושא Pub/Sub שמשתמש ב-Cloud Scheduler להפעלת אירועים בנושא הזה.

לפני שמתחילים

כדי להשתמש בפתרון הזה בפרויקט Firebase, הפרויקט צריך להיות במסלול התמחור Blaze. אם אתם לא מנויים לתוכנית Blaze, אתם צריכים לשדרג את תוכנית התמחור.

למרות שנדרש חיוב, העלות הכוללת צפויה להיות נמוכה, כי כל Cloud Scheduler משימה עולה 0.10$ (USD) לחודש, ויש מכסת שלוש משימות לכל חשבון Google ללא תשלום. אפשר להשתמש במחשבון התמחור של Blaze כדי ליצור הערכת עלויות על סמך השימוש החזוי.

צריך להפעיל בפרויקט את ממשקי ה-API‏ Pub/Sub ו-Cloud Scheduler. האפשרויות האלה כבר אמורות להיות מופעלות ברוב הפרויקטים ב-Firebase. אפשר לוודא זאת במסוף Google Cloud.

כתיבה של פונקציה מתוזמנת

ב-Cloud Functions for Firebase, לוגיקת התזמון נמצאת בקוד הפונקציות, ללא דרישות מיוחדות בזמן הפריסה. כדי ליצור פונקציה מתוזמנת, משתמשים ב-functions.pubsub.schedule('your schedule').onRun((context)). לדוגמה, כדי להריץ פונקציה כל חמש דקות באמצעות התחביר של App Engine cron.yaml, אפשר לעשות משהו כזה:

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

App Engine syntax ו-Unix Crontab נתמכים על ידי Cloud Scheduler. לדוגמה, כדי להשתמש ב-Crontab כדי לבחור אזור זמן ספציפי שבו תופעל פונקציה מתוזמנת, אפשר לעשות משהו כזה:

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

הערך של timeZone חייב להיות שם של אזור זמן מתוך tz database. מידע נוסף על מאפיינים נתמכים מופיע במאמר Cloud Schedulerהפניה.

פריסת פונקציה מתוזמנת

כשפורסים פונקציה מתוזמנת, נוצרים באופן אוטומטי משימת התזמון ונושא ה-Pub/Sub שקשורים אליה. ‫Firebase CLI מחזיר את שם הנושא, ואפשר לראות את העבודה והנושא במסוף Google Cloud. השם של הנושא נקבע לפי המוסכמה הבאה:

firebase-scheduled-function_name-region

לדוגמה:

firebase-scheduled-scheduledFunctionCrontab-us-east1.