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


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

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

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

למרות שנדרש חיוב, אפשר לצפות שהעלות הכוללת תהיה לניהול, כי כל משימה ב-Cloud Scheduler עולה 0.10 $בחודש, ויש מגבלה של שלוש משימות לכל חשבון 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;
});

Cloud Scheduler תומך גם ב-Unix Crontab וגם בסינטקס של App Engine. לדוגמה, כדי להשתמש ב-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. מידע נוסף על המאפיינים הנתמכים זמין בחומר העזרה של Cloud Scheduler.

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

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

firebase-scheduled-function_name-region

לדוגמה:

firebase-scheduled-scheduledFunctionCrontab-us-east1.