12 ימי דיגיטלאושן (יום 5) – אוטומציה של תזכורות ליומולדת עם טריגרים יומיים

ברוכים הבאים ליום 5 של 12 ימי DigitalOcean! אתמול, הגדרתם את שירות תזכורת יומולדת שלכם לרוץ על פונקציות DigitalOcean, כלומר זה עכשיו עבור בענן וללא שרתים. 🎉 היום, תקחו את זה צעד קדימה על ידי אוטומציה לרוץ בלווין שלה—ללא צורך בקלט ידני.

עד סיום המדריך הזה, השירות שלכם (או כל פונקציה אחרת שאתם עובדים עליה) ירוץ אוטומטית בזמן קבוע בכל יום. זה אומר כי לא תצטרכו עוד לזכור להפעיל אותו בעצמכם—זה פשוט עובד.

למה לאוטומציה?

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

🚀 מה שתלמד

עד סיום היום, תדע כיצד:

  1. להגדיר טריגר יומי כדי להפעיל את הפונקציה שלך באופן אוטומטי.
  2. ללמוד שני דרכים לעשות זאת – דרך לוח הבקרה של DigitalOcean או עם CLI של doctl ו־project.yml.
  3. לבדוק את ההגדרה כדי לוודא שהיא עובדת.

🛠 מה שתצטרך

לפני התחלת הפעולה, וודא שיש לך את הפריטים הבאים:

  1. פונקציה שכבר פורסמה ב־DigitalOcean (לדוגמה, שירות תזכורת יום הולדת מ־יום 4: בניית שירות תזכורת ליום הולדת) לאוטומציה עם טריגרים.
  2. אם אתה משתמש ב-CLI של doctl, תצטרך את קובץ project.yml עבור הפונקציה שלך. תוכל לבדוק את היום 4 להוראות על התקנה והגדרת ה-CLI של doctl, ויצירת קובץ project.yml.

🧑‍🍳 מתכון ליום 5: אוטומציה של פונקציות עם טריגרים

שלב 1: הגדרת טריגר עבור הפונקציה שלך

ה-CLI של DigitalOcean מציע לך שני אפשרויות להגדרת טריגרים:

  1. אפשרות 1: השתמש בפאנל הבקרה להתקנה מהירה וקלה.
  2. אפשרות 2: השתמש ב-CLI של doctl לשליטה עם יכולות תכנותיות יותר חזקות.

אזהרה: זכור שטריגרים שנוצרו בלוח הבקרה יאבדו אם תפרוס מחדש את הפונקציה באמצעות ה-CLI. אם אתה מתכוון לפרוס מחדש לעיתים קרובות, השתמש באפשרות 2 כדי להוסיף טריגרים ישירות לקובץ project.yml.

אפשרות 1: שימוש בלוח הבקרה ליצירת טריגר

הדרך הקלה ביותר להגדיר טריגר היא דרך לוח הבקרה של DigitalOcean. זה מהיר, לא דורש התקנה, ומתאים להגדרות פשוטות חד פעמיות.

  • נווט אל עמוד הפונקציות הראשי בלוח המחוונים של DigitalOcean.
  • מצא את הפונקציה שלך (למשל, reminders/birthdays) ולחץ על הכרטיסייה טריגרים.

  • לחץ על צור טריגר, הוסף שם לטריגר שלך. זה יכול להיות כל דבר תיאורי, כמו daily-birthday-trigger. השם חייב להכיל רק תווים אלפאנומריים, מקפים ונקודות.
  • הוסף ביטוי קרון לקביעת לוח הזמנים. לדוגמה, 0 9 * * * פירושו שהפונקציה תרוץ כל יום בשעה 9:00 בבוקר.

הערה: אם אינך בטוח איך קרון עובד? בדוק את crontab.guru למדריך שימושי.

  • שמור את הטריגר.

ברגע שיצרת את הטריגר שלך, זה רעיון טוב לבדוק אותו כדי לוודא שהכל עובד כפי שמצופה. קפוץ אל בדוק את האוטומציה למטה כדי ללמוד כיצד.

אזהרה: בעוד שהלוח בקרה פשוט ויעיל, כל טריגרים שתיצור כאן יימחקו או יוחלפו אם תחזיר את הפונקציה באמצעות CLI. עבור עדכונים תכופים או פריסות מתוכנתות, דלג ל-אפשרות 2.

אפשרות 2: שימוש ב-doctl CLI עם project.yml

אתה יכול גם ליצור טריגרים על ידי הוספתם ישירות לקובץ ה-project.yml שלך. שיטה זו היא מהימנה יותר עבור פריסות תכופות מכיוון שהיא מבטיחה שהטריגרים שלך תמיד כלולים בקונפיגורציית הפונקציה. בניגוד לאופציית לוח הבקרה שתוארה קודם, גישה זו מונעת מהטריגרים להיות מוחלפים או לאבד במהלך הפריסות מחדש.

כך תוכל להגדיר זאת:

  • פתח את קובץ project.yml מיום 4: הפעלת הודעות יום הולדת עם פונקציות של DigitalOcean. זה עשוי להיראות משהו כזה:

    packages:
      - name: reminders
        shared: false
        environment:
          DO_DB_NAME: "${DB_NAME}"
          DO_DB_USER: "${DB_USER}"
          DO_DB_PASSWORD: "${DB_PASSWORD}"
          DO_DB_HOST: "${DB_HOST}"
          DO_DB_PORT: "${DB_PORT}"
          TWILIO_ACCOUNT_SID: "${TWILIO_ACCOUNT_SID}"
          TWILIO_AUTH_TOKEN: "${TWILIO_AUTH_TOKEN}"
          TWILIO_PHONE_FROM: "${TWILIO_PHONE_FROM}"
          TWILIO_PHONE_TO: "${TWILIO_PHONE_TO}"
        functions:
          - name: birthdays
            runtime: python:default
    
  • הוסף מיקום triggers להגדרת לוח זמנים לתצורת הפונקציה שלך:

    triggers:
      - name: יומי-הולדת-טריגר
        sourceType: מתוזמן
        sourceDetails:
        cron: "0 9 * * *"
    
  • קובץ project.yml עודכן לסופו:

    packages:
      - name: reminders
        shared: false
        environment:
          DO_DB_NAME: "${DB_NAME}"
          DO_DB_USER: "${DB_USER}"
          DO_DB_PASSWORD: "${DB_PASSWORD}"
          DO_DB_HOST: "${DB_HOST}"
          DO_DB_PORT: "${DB_PORT}"
          TWILIO_ACCOUNT_SID: "${TWILIO_ACCOUNT_SID}"
          TWILIO_AUTH_TOKEN: "${TWILIO_AUTH_TOKEN}"
          TWILIO_PHONE_FROM: "${TWILIO_PHONE_FROM}"
          TWILIO_PHONE_TO: "${TWILIO_PHONE_TO}"
        functions:
          - name: birthdays
            runtime: python:default
            triggers:
              - name: daily-birthday-trigger
                sourceType: scheduler
                sourceDetails:
                  cron: "0 9 * * *"
    

    זה אומר ל-DigitalOcean להפעיל את הפונקציה birthdays בכל יום ב-9:00 בבוקר.

    1. triggers קטע: מגדיר את שם, הסוג והלוח זמנים של הטריגר. ניתן לתת לטריגר שם תיאורי כלשהו, כמו daily-birthday-trigger.

    2. cron: מציין את הזמן שבו הפונקציה תרוץ באופן יומי בזמן אוניברסלי. הביטוי cron 0 9 * * * לדוגמה, מתזמן את הרצת הפונקציה להתרחש בכל יום ב-9:00 בבוקר.

  • שמור את הקובץ ופרוס אותו על ידי הרצת הפקודה הבאה מתיקיית ה-my-birthday-reminder-service:

    doctl serverless deploy my-birthday-reminder-service
    

    חשוב: ודא שאתה מריץ את הפקודה מתיקיית האב, ולא מתוך תיקיית my-birthday-reminder-service. הרצת הפקודה ממיקום לא נכון עלולה לגרום לשגיאה כמו זו:

    ❯ doctl serverless deploy my-birthday-reminder-service
    Error: ENOENT: no such file or directory, lstat
    
  • לאחר שהפריסה תצליח, תראה הודעת אישור דומה לזו:

    Deployed functions
      - reminders/birthdays
    Deployed triggers:
      - daily-birthday-trigger
    

  • גש ללוח המחוונים שלך כדי לוודא שהזיק הוקם תחת הקטע פונקציות.

טיפ מקצועי: כדי לבדוק את הזיק שלך, הגדר את ביטוי הכרון זמנית לכמה דקות מעכשיו (לדוגמה, 28 9 * * * אם זה 9:25 בבוקר). לאחר שאישרת שהזיק פועל, עדכן אותו לזמנים הרצויים והפעל מחדש.

שלב 2: בדיקת האוטומציה

בוא נבדוק את הזיקים שלך כדי לוודא שהם עובדים. במקום לחכות שיפעלו בזמנם הרגיל, תוכל להגדיר אותם לרוץ כמה דקות מעכשיו. הנה איך לעשות זאת:

  • הגדר את ביטוי הכרון של הזיק שלך לכמה דקות מהזמן הנוכחי (בזמן UTC). לדוגמה, אם זה 9:25 בבוקר ב-UTC, הגדר את ביטוי הכרון ל- 28 9 * * * כדי שהפונקציה תרוץ ב-9:28 בבוקר UTC.

    הערה: לא בטוחים איך להמיר את הזמן המקומי שלכם ל-UTC? כלים כמו ממיר אזורי זמן יכולים לעזור.

  • שמור את הטריגר המעודכן (אם אתה משתמש בלוח הבקרה) או פרוס מחדש את קובץ project.yml המעודכן שלך (אם אתה משתמש ב-CLI):

    doctl serverless deploy my-birthday-reminder-service
    
  • חכה שהטריגר יתבצע, ואז בדוק את יומני ההפעלה כדי לאשר שהפונקציה רצה בהצלחה:

    doctl serverless activations logs --function reminders/birthdays --last
    

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

פקודה זו תחזיר את פרטי ההפעלה האחרונה של הפונקציה שלך. לדוגמה, תוכל לראות משהו דומה לזה:

=== 59e8e4f482874d79a8e4f48287dd79ef success 12/23 07:46:33 reminders/birthdays:0.0.6
2024-12-23T07:46:33.323205805Z stdout: Message sent for Charlie Brown. Message SID: SM85f5caeb3ec09239e0d8bdaaba2b158b

זה מאשר שהגורם הופעל והפונקציה הופעלה בהצלחה! 🎉

הערה: לאחר שוידאת שהכל עובד, עדכן את ביטוי ה־cron לגרסה הרצויה שלך (לדוגמה, 0 9 * * * עבור 9:00 בבוקר UTC בכל יום) ושמור או הרץ מחדש.

הערה קצרה על יומנים

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

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

🎁 סיכום

הנה מה שהשגת היום:

  1. אוטומטת את שירות תזכורת יום ההולדת שלך (או כל פונקציה אחרת) לפעול מדי יום.
  2. למדת שתי דרכים להגדיר מפעילים—דרך לוח הבקרה ובאמצעות ה-doctl CLI.
  3. בדקת את ההגדרה שלך כדי לוודא שהיא פועלת כמצופה.

הנה המדריכים הקודמים בסדרה זו:

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

Source:
https://www.digitalocean.com/community/tutorials/automating-birthday-reminders-with-triggers