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


אם רוצים לתזמן פונקציות כך שיפעלו במועדים מסוימים, משתמשים במטפל 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;
});

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.