ניהול חיבורי Airflow

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

בדף הזה מוסבר איך לנהל חיבורים ל-Airflow בסביבה שלכם ולגשת אליהם מ-DAG.

מידע על חיבורים ב-Airflow

בקישורים של Aiflow נשמרים פרטי הכניסה ופרטי קישור אחרים, כמו שמות משתמשים, מחרוזות קישור וסיסמאות. ה-DAGs משתמשים בחיבורים כדי לתקשר עם משאבים ב- Google Cloud ולגשת אליהם, וגם לשירותים אחרים מתוך ה-DAGs.

אופרטורים של Airflow ב-DAGs משתמשים בחיבור שמוגדר כברירת מחדל לאופרטור, או שאתם מציינים שם חיבור מותאם אישית.

מידע על אבטחת החיבור

רוב האופרטורים של Airflow לא מקבלים פרטי כניסה ישירות. במקום זאת, הם משתמשים בחיבורי Airflow.

כשיוצרים סביבה חדשה, Managed Airflow יוצר מפתח fernet ייחודי וקבוע לסביבה ומאבטח את תוספי החיבור כברירת מחדל. אפשר לראות את fernet_key בדף Configuration בממשק המשתמש של Airflow.

מידע נוסף על אבטחת חיבורים וסיסמאות ב-Airflow זמין במאמרים Securing Connections ו-Masking sensitive data במסמכי התיעוד של Airflow.

מידע על סוגי החיבורים

‫Airflow משתמש בחיבורים מסוגים שונים כדי להתחבר לשירותים ספציפיים. לדוגמה, Google Cloud סוג החיבור מתחבר לשירותים אחרים ב- Google Cloud. דוגמה נוספת: סוג החיבור S3 מתחבר לקטגוריה ב-Amazon S3.

כדי להוסיף סוג חיבור ל-Airflow, צריך להתקין חבילת PyPI עם סוג החיבור הזה. חלק מהחבילות מותקנות מראש בסביבה שלכם. לדוגמה, אפשר להשתמש בחיבור מחבילת apache-airflow-providers-google בלי להתקין חבילות PyPI מותאמות אישית.

חיבורים שהוגדרו מראש

‫Managed Airflow מגדיר את חיבורי ברירת המחדל הבאים בסביבה שלכם. אתם יכולים להשתמש בחיבורים האלה כדי לגשת למשאבים בפרויקט בלי להגדיר אותם.

  • google_cloud_default
  • bigquery_default
  • google_cloud_datastore_default
  • google_cloud_storage_default

הוספת חיבור ב-Secret Manager

אפשר לאחסן חיבור ב-Secret Manager בלי להוסיף אותו ל-Airflow. מומלץ להשתמש בגישה הזו כשמאחסנים פרטי כניסה ומידע רגיש אחר.

כדי להוסיף חיבור ב-Secret Manager:

  1. הגדרת Secret Manager בסביבה

  2. מוסיפים סוד עם שם שתואם לתבנית של החיבורים.

    לדוגמה: airflow-connections-example_connection. ב-DAGs, משתמשים בשם החיבור בלי הקידומת: example_connection.

  3. מוסיפים פרמטרים לחיבור:

    פורמט JSON

    מוסיפים את הייצוג של החיבור ב-JSON כערך של הסוד. לדוגמה:

    {
      "conn_type": "mysql",
      "host": "example.com",
      "login": "login",
      "password": "password",
      "port": "9000"
    }
    

    מידע נוסף על פורמט החיבור ב-JSON זמין בתיעוד של Airflow.

    פורמט ה-URI

    מוסיפים את ייצוג ה-URI של החיבור כערך של secret:‎

    • הסוד צריך לאחסן ייצוג URI של החיבור. לדוגמה, mysql://login:password@example.com:9000.

    • ה-URI חייב להיות מקודד בקידוד URL. לדוגמה, סיסמה שכוללת רווח צריכה לעבור קידוד URL באופן הבא: mysql://login:secret%20password@example.com:9000.

    ל-Airflow יש שיטה נוחה ליצירת כתובות URI של חיבורים. דוגמה לאופן קידוד של כתובת URL מורכבת עם תוספות JSON זמינה במסמכי Airflow.

  4. מוודאים שכל פרמטרי החיבור נקראים בצורה נכונה מ-Secret Manager.

הוספת חיבור ב-Airflow

במקום לאחסן את החיבורים ב-Secret Manager, אפשר לאחסן אותם ב-Airflow.

כדי להוסיף חיבור ב-Airflow:

Airflow CLI

מריצים את הפקודה connections add Airflow CLI עם Google Cloud CLI. לדוגמה:

gcloud composer environments run ENVIRONMENT_NAME \
  --location LOCATION \
  connections add -- \
    --conn-type "mysql" \
    --conn-host "example.com" \
    --conn-port "9000" \
    --conn-login "login" \
    --conn-password "password" \
    example_connection

אפשר גם להשתמש בארגומנט --conn-uri:

gcloud composer environments run ENVIRONMENT_NAME \
  --location LOCATION \
  connections add -- \
    --conn-uri "mysql://login:password@example.com:9000" \
    example_connection

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

  • ENVIRONMENT_NAME: השם של הסביבה.
  • LOCATION: האזור שבו נמצאת הסביבה.

ממשק המשתמש של Airflow

פועלים לפי ההוראות ליצירת חיבורים בתיעוד של Airflow.

איך מוודאים ש-Airflow קורא חיבור בצורה נכונה

אפשר להריץ את הפקודה connections get של Airflow CLI דרך Google Cloud CLI כדי לבדוק שהחיבור נקרא בצורה נכונה. לדוגמה, אם מאחסנים חיבור ב-Secret Manager, אפשר לבדוק אם Airflow קורא את כל הפרמטרים של החיבור מסוד.

gcloud composer environments run ENVIRONMENT_NAME \
    --location LOCATION \
    connections get \
    -- CONNECTION_NAME

מחליפים את:

  • ENVIRONMENT_NAME בשם הסביבה.
  • LOCATION עם האזור שבו הסביבה ממוקמת.
  • CONNECTION_NAME בשם החיבור. אם החיבור מאוחסן ב-Secret Manager, משתמשים בשם החיבור בלי הקידומת של החיבור. לדוגמה, מציינים example_connection במקום airflow-connections-example_connection_json.

דוגמה:

gcloud composer environments run example-environment \
    --location us-central1 \
    connections get \
    -- example_connection -o json

שימוש בחיבורי Airflow ב-DAG

בקטע הזה מוסבר איך לגשת לחיבור מ-DAG.

שימוש בחיבור ל-Secret Manager

משתמשים בשם החיבור בלי הקידומת. לדוגמה, אם הסוד נקרא airflow-connections-aws_s3, מציינים aws_s3.

transfer_dir_from_s3 = S3ToGCSOperator(
    task_id='transfer_dir_from_s3',
    aws_conn_id='aws_s3',
    prefix='data-for-gcs',
    bucket='example-s3-bucket-transfer-operators',
    dest_gcs='gs://us-central1-example-environ-361f4221-bucket/data/from-s3/')

אם מאחסנים חיבור שמוגדר כברירת מחדל ב-Secret Manager, אפשר להשמיט את שם החיבור. כדי לראות את שם החיבור שמוגדר כברירת מחדל שבו משתמש אופרטור מסוים, אפשר לעיין במסמכי התיעוד של Airflow. לדוגמה, אופרטור Airflow‏ S3ToGCSOperator משתמש בחיבור aws_default כברירת מחדל. אפשר לשמור את חיבור ברירת המחדל הזה בסוד שנקרא airflow-connections-aws_default.

שימוש בחיבור שמאוחסן ב-Airflow

משתמשים בשם החיבור, כפי שהוא מוגדר ב-Airflow:

transfer_dir_from_s3 = S3ToGCSOperator(
    task_id='transfer_dir_from_s3',
    aws_conn_id='aws_s3',
    prefix='data-for-gcs',
    bucket='example-s3-bucket-transfer-operators',
    dest_gcs='gs://us-central1-example-environ-361f4221-bucket/data/from-s3/')

כדי להשתמש בחיבור ברירת המחדל לאופרטור, משמיטים את שם החיבור. כדי לראות את שם החיבור שמוגדר כברירת מחדל שבו משתמש אופרטור מסוים, אפשר לעיין במסמכי Airflow. לדוגמה, אופרטור S3ToGCSOperator Airflow משתמש בחיבור aws_default כברירת מחדל.

פתרון בעיות

אם בסביבה שלכם אין גישה לסוד שמאוחסן ב-Secret Manager:

  1. מוודאים ש-Secret Manager מוגדר בסביבה שלכם.

  2. בודקים ששם החיבור ב-Secret Manager תואם לחיבור שבו נעשה שימוש ב-Airflow. לדוגמה, אם שם החיבור הוא example_connection, שם הסוד הוא airflow-connections-example_connection.

  3. בודקים ש-Airflow קורא חיבור בצורה נכונה.

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