Managed Airflow (דור 3) | Managed Airflow (דור 2) | Managed Airflow (דור 1 מדור קודם)
בדף הזה מוסבר איך להגדיר שירותי SMTP בסביבת Managed Airflow.
לפני שמתחילים
אם סביבת Managed Airflow שלכם מוגדרת לכתובת IP פרטית, צריך לוודא שיש לה קישוריות לנקודת קצה ל-API של שירות האימייל החיצוני (כמו
https://api.sendgrid.comאו שרת ה-SMTP המועדף).רכיבי Airflow בסביבות עם כתובות IP ציבוריות יוצרים חיבורים יוצאים, כולל שליחת הודעות אימייל, מכתובות IP ציבוריות ומפורטים שהוקצו באופן אוטומטי. אם אתם רוצים שסביבות עם כתובות IP ציבוריות ישלחו אימייל מכתובות IP ומיציאות שנקבעו מראש, אתם יכולים לקשר רשת VPC לסביבה ולהעביר אותה לכתובת IP פרטית. מידע נוסף על רשתות ב-Managed Airflow (דור 3) זמין במאמר בנושא שינוי סוג הרשת של סביבה.
מתזמן Airflow ב-Managed Airflow (דור 3) תומך רק בקצה עורפי מותאם אישית לאימייל הבא:
- airflow.providers.sendgrid.utils.emailer.send_email
- airflow.utils.email.send_email_smtp
אם מגדירים קצה עורפי אחר של אימייל בהתאמה אישית, ההגדרה הזו לא תועבר למתזמן. כתוצאה מכך, שליחת אימייל ישירות מהמתזמן תוביל לכך שהמתזמן לא יגיב ויכשל שוב ושוב.
תהליכי העבודה (workers) ומעבדי ה-DAG ב-Airflow תומכים בבקאנדים מותאמים אישית אחרים, כך שאפשר לשלוח אימייל מהרכיבים האלה. מקרה נפוץ שבו נשלח אימייל ישירות מהמתזמן הוא התראות באימייל על כשלים ב-DAG. כפתרון עקיף, אפשר לשלוח התראות על כשל ב-DAG באמצעות קריאה חוזרת רשומה. הם יישלחו מהמעבד של DAG. אפשר גם להשתמש בשרתי קצה עורפיים מותאמים אישית אחרים עם אופרטורים של Airflow ששולחים אימייל. במקרה כזה, האימייל יישלח מעובד של Airflow שמבצע את המשימה.
הגדרת שירותי אימייל של SendGrid
כדי לקבל התראות, צריך להגדיר את משתני הסביבה כך שיישלחו אימיילים דרך שירות האימייל SendGrid.
הרשמה ל-SendGrid
אם עדיין לא עשיתם את זה, נרשמים ל-SendGrid ב Google Cloud מסוף, לוחצים על Manage On Provider (ניהול אצל הספק) כדי לעבור לדומיין של SendGrid, ולוחצים על Settings (הגדרות) כדי לאחזר את שם המשתמש וליצור מפתח API. מפתחים Google Cloud יכולים להתחיל עם 12,000 אימיילים בחינם בחודש.
הגדרת משתנים
SendGrid משתמש במפתח ה-API ובכתובת האימייל של השולח כדי לשלוח אימיילים. אפשר לספק את המידע הזה באחת מהדרכים הבאות:
אחסון ערכים ב-Secret Manager
כדי לאחסן ערכים ב-Secret Manager:
מגדירים את Secret Manager בסביבה. חשוב להגדיר הרשאות ואפשרויות של תצורת Airflow עבור קצה העורף של הסודות.
עוקפים את אפשרויות התצורה הבאות של Airflow:
קטע מפתח ערך emailemail_conn_idsendgrid_defaultemailemail_backendairflow.providers.sendgrid.utils.emailer.send_emailיוצרים סוד לחיבור SendGrid בשם
airflow-connections-sendgrid_default. מגדירים את הערך של הסוד ל-URI של החיבור. לדוגמה:sendgrid://<username>:<sendgrid_api_key>@smtp.sendgrid.net:587מידע נוסף על אחסון חיבורים ב-Secret Manager זמין במאמר ניהול חיבורים ב-Airflow.
מגדירים את כתובת האימייל ב-SendGrid. אי אפשר להגדיר את כתובת האימייל באמצעות סוד. במקום זאת, מבטלים את אפשרות ההגדרה הבאה של Airflow:
קטע מפתח ערך emailfrom_emailכתובת האימייל של השולח, לדוגמה noreply@example.com.
שמירת ערכים ב-Airflow
עוקפים את אפשרויות התצורה הבאות של Airflow:
קטע מפתח ערך emailemail_conn_idsendgrid_defaultemailemail_backendairflow.providers.sendgrid.utils.emailer.send_emailב-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.
-
מגדירים את כתובת האימייל ב-SendGrid. אי אפשר להגדיר את כתובת האימייל באמצעות סוד. במקום זאת, מבטלים את אפשרות ההגדרה הבאה של Airflow:
קטע מפתח ערך emailfrom_emailכתובת האימייל של השולח, לדוגמה noreply@example.com.
בדיקת ההגדרה של SendGrid
כדי לבדוק את ההגדרה של SendGrid:
- יוצרים DAG לבדיקה שמשתמש ב-
EmailOperator. לדוגמה:
- מעלים את ה-DAG לסביבה ובודקים שהמשימה הושלמה.
- נכנסים ל-SendGrid באמצעות פרטי הכניסה ל-SendGrid.
- בממשק המשתמש של SendGrid, עוברים לדף Activity (פעילות).
- מחפשים את האימייל ברשימה. אפשר לראות שהאימייל עבר עיבוד ב-SendGrid ונמסר.
אם האימייל לא עובר עיבוד ולא נמסר:
- בודקים את ההגדרה של 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:
יוצרים סוד חדש:
echo -n "SMTP_PASSWORD" | gcloud beta secrets create \ airflow-config-smtp-password \ --data-file=- \ --replication-policy=automaticמחליפים את
SMTP_PASSWORDבסיסמת ה-SMTP.מגדירים את Airflow כך שיקבל את סיסמת ה-SMTP מ-Secret Manager. כדי לעשות זאת, מבטלים את ההגדרה של אפשרות התצורה הבאה ב-Airflow. Airflow מוסיף אוטומטית את הקידומת
airflow-config-לערך שאתם מציינים עבורsmtp_password_secretכשהוא מאחזר את הסודairflow-config-smtp-passwordמ-Secret Manager.קטע מפתח ערך smtpsmtp_password_secretsmtp-password