הגדרת התראות באימייל

Managed Airflow (דור 3) | Managed Airflow (דור 2) | Managed Airflow (דור 1 מדור קודם)

בדף הזה מוסבר איך להגדיר שירותי SMTP בסביבת Managed Airflow.

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

  • אם סביבת Managed Airflow שלכם מוגדרת לכתובת IP פרטית, צריך לוודא שיש לה קישוריות לנקודת קצה ל-API של שירות האימייל החיצוני (כמו https://api.sendgrid.com או שרת ה-SMTP המועדף).

הגדרת שירותי אימייל של SendGrid

כדי לקבל התראות, צריך להגדיר את משתני הסביבה כך שיישלחו אימיילים דרך שירות האימייל SendGrid.

הרשמה ל-SendGrid

אם עדיין לא עשיתם את זה, נרשמים ל-SendGrid ב Google Cloud מסוף, לוחצים על Manage On Provider (ניהול אצל הספק) כדי לעבור לדומיין של SendGrid, ולוחצים על Settings (הגדרות) כדי לאחזר את שם המשתמש וליצור מפתח API. מפתחים יכולים להתחיל עם 12,000 אימיילים בחינם בחודש. Google Cloud

מעבר אל SendGrid Email API

הגדרת משתנים

‫SendGrid משתמש במפתח ה-API ובכתובת האימייל של השולח כדי לשלוח אימיילים. אפשר לספק את המידע הזה באחת מהדרכים הבאות:

  • (מומלץ) שמירת ערכים ב-Secret Manager

  • אחסון ערכים ב-Airflow

אחסון ערכים ב-Secret Manager

כדי לאחסן ערכים ב-Secret Manager:

  1. מגדירים את Secret Manager בסביבה. חשוב להגדיר הרשאות ואפשרויות הגדרה של Airflow עבור קצה העורף של הסודות.

  2. עוקפים את אפשרויות התצורה הבאות של Airflow:

    קטע מפתח ערך
    email email_conn_id sendgrid_default
    email email_backend airflow.providers.sendgrid.utils.emailer.send_email
  3. יוצרים סוד לחיבור SendGrid בשם airflow-connections-sendgrid_default. מגדירים את הערך של הסוד ל-URI של החיבור. לדוגמה:

    sendgrid://<username>:<sendgrid_api_key>@smtp.sendgrid.net:587
    

    מידע נוסף על אחסון חיבורים ב-Secret Manager זמין במאמר ניהול חיבורים ב-Airflow.

  4. מגדירים את כתובת האימייל ב-SendGrid. אי אפשר להגדיר את כתובת האימייל באמצעות סוד. במקום זאת, מבטלים את אפשרות ההגדרה הבאה של Airflow:

    קטע מפתח ערך
    email from_email כתובת האימייל של השולח, לדוגמה noreply@example.com.

שמירת ערכים ב-Airflow

  1. עוקפים את אפשרויות התצורה הבאות של Airflow:

    קטע מפתח ערך
    email email_conn_id sendgrid_default
    email email_backend airflow.providers.sendgrid.utils.emailer.send_email
  2. ב-Airflow, מגדירים את החיבור בשם sendgrid_default. מציינים את מפתח ה-API של Sendgrid ב-URI של החיבור. לדוגמה:

    gcloud composer environments run ENVIRONMENT_NAME \
      --location LOCATION \
      connections add -- \
      --conn-uri "sendgrid://USERNAME:SENDGRID_API_KEY@smtp.sendgrid.net:587" \
      sendgrid_default
    

    מחליפים את מה שכתוב בשדות הבאים:

    • ENVIRONMENT_NAME: השם של הסביבה.
    • LOCATION: האזור שבו נמצאת הסביבה.
    • USERNAME: שם המשתמש ב-SendGrid.
    • SENDGRID_API_KEY: מפתח ה-API של SendGrid.
  3. מגדירים את כתובת האימייל ב-SendGrid. אי אפשר להגדיר את כתובת האימייל באמצעות סוד. במקום זאת, מבטלים את אפשרות ההגדרה הבאה של Airflow:

    קטע מפתח ערך
    email from_email כתובת האימייל של השולח, לדוגמה noreply@example.com.

בדיקת ההגדרה של SendGrid

כדי לבדוק את ההגדרה של SendGrid:

  1. יוצרים DAG לבדיקה שמשתמש ב-EmailOperator. לדוגמה:

import datetime

import airflow
from airflow.operators.email import EmailOperator


with airflow.DAG(
    "composer_sample_sendgrid",
    start_date=datetime.datetime(2022, 1, 1),
) as dag:
    task_email = EmailOperator(
        task_id="send-email",
        conn_id="sendgrid_default",
        # You can specify more than one recipient with a list.
        to="user@example.com",
        subject="EmailOperator test for SendGrid",
        html_content="This is a test message sent through SendGrid.",
        dag=dag,
    )
  1. מעלים את ה-DAG לסביבה ובודקים שהמשימה הושלמה.
  2. נכנסים ל-SendGrid באמצעות פרטי הכניסה שלכם.
  3. בממשק המשתמש של SendGrid, עוברים לדף Activity (פעילות).
  4. מחפשים את האימייל ברשימה. אפשר לראות שהאימייל עבר עיבוד ב-SendGrid ונמסר.
  5. אם האימייל לא עובר עיבוד ולא נמסר:

    • בודקים את ההגדרה של SendGrid.
    • מוודאים שהפעלתם את העורף האחורי של Secret Manager. חשוב לוודא שהענקתם הרשאות נוספות והגדרתם שינויים באפשרויות ההגדרה של Airflow.
    • בודקים את מסנן הספאם בתוכנת האימייל.

הגדרת שירותי SMTP של צד שלישי

כדי לשלוח אימייל דרך שירות SMTP של צד שלישי, צריך לשנות את אפשרות ההגדרה של email_backend Airflow ולהגדיר פרמטרים אחרים שקשורים ל-SMTP.

כדי להגדיר שירות SMTP של צד שלישי, צריך להגדיר מחדש את אפשרויות ההגדרה הבאות של Airflow:

קטע מפתח ערך
email email_backend airflow.utils.email.send_email_smtp
smtp smtp_host שם המארח של שרת ה-SMTP.
smtp smtp_user שם המשתמש בשרת ה-SMTP.
smtp smtp_port היציאה של שרת ה-SMTP. יציאה 25 לא זמינה. אפשר להשתמש ביציאות אחרות, כמו יציאות SMTP סטנדרטיות 465 ו-587.
smtp smtp_password אי אפשר להגדיר סיסמה באמצעות smtp_password. כדי להגדיר סיסמת SMTP, פועלים לפי ההוראות במאמר הגדרת סיסמת SMTP.
smtp smtp_mail_from כתובת האימייל של השולח, לדוגמה noreply-composer@.
smtp smtp_starttls כדי לשפר את האבטחה, מגדירים את האפשרות True.
smtp smtp_ssl כדי לשפר את האבטחה, מגדירים את האפשרות True.

הגדרת סיסמת SMTP לשירות SMTP של צד שלישי

שמירת סיסמת SMTP בטקסט פשוט בקובץ ההגדרות של Airflow היא פרקטיקה לא טובה מבחינת אבטחה. לכן, ב-Managed Airflow אין תמיכה בשיטה הזו. במקום זאת, אפשר להשתמש בשתי שיטות אחרות להגדרת סיסמת SMTP.

שימוש בפקודה כדי לאחזר את סיסמת ה-SMTP

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

כדי להשתמש בשיטה הזו, צריך לשנות את אפשרות ההגדרה הבאה של Airflow:

קטע מפתח ערך
smtp smtp_password_cmd מציינים פקודה שמחזירה את סיסמת ה-SMTP.

שימוש בסוד שמאוחסן ב-Secret Manager כדי לאחזר סיסמת SMTP

אתם יכולים להגדיר את Secret Manager כקצה העורפי של הסודות של Airflow.

אחרי שמגדירים את Secret Manager בסביבת Composer, אפשר לאחסן סיסמת SMTP ב-Secret Manager:

  1. יוצרים סוד חדש:

    echo -n "SMTP_PASSWORD" | gcloud beta secrets create \
      airflow-config-smtp-password \
      --data-file=- \
      --replication-policy=automatic
    

    מחליפים את SMTP_PASSWORD בסיסמת ה-SMTP.

  2. מגדירים את Airflow כך שיקבל את סיסמת ה-SMTP מ-Secret Manager. כדי לעשות זאת, מבטלים את ההגדרה של אפשרות התצורה הבאה ב-Airflow. ‫Airflow מוסיף אוטומטית את הקידומת airflow-config- לערך שאתם מציינים עבור smtp_password_secret כשהוא מאחזר את הסוד airflow-config-smtp-password מ-Secret Manager.

    קטע מפתח ערך
    smtp smtp_password_secret smtp-password

המאמרים הבאים