גישה לממשק האינטרנט של Airflow

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

‫Apache Airflow כולל ממשק משתמש באינטרנט שנקרא Airflow UI, שבו אפשר לנהל DAG של Airflow, לראות יומני הפעלה של DAG, לנטר את Airflow ולבצע פעולות ניהוליות.

מידע על שרת האינטרנט של Airflow

לכל סביבת Managed Airflow יש שרת אינטרנט שמריץ את ממשק המשתמש של Airflow. שרת האינטרנט הוא חלק מארכיטקטורת סביבת Airflow מנוהלת.

שרת האינטרנט מנתח את קובצי ההגדרה של ה-DAG בתיקייה dags/, וצריכה להיות לו גישה לנתונים ולמשאבים של ה-DAG כדי לטעון את ה-DAG ולטפל בבקשות HTTP.

שרת האינטרנט מרענן את ה-DAG כל 60 שניות, שזה ערך ברירת המחדל ב-Managed Airflow.worker_refresh_interval שגיאה בשרת אינטרנט יכולה להתרחש אם שרת האינטרנט לא יכול לנתח את כל ה-DAG בתוך מרווח הרענון.

חריגה מ-60 שניות לטעינת DAG יכולה לקרות אם יש מספר גדול של קובצי DAG או אם יש עומס עבודה משמעותי לטעינת קובצי ה-DAG. כדי לוודא ששרת האינטרנט יישאר נגיש ללא קשר לזמן הטעינה של ה-DAG, אפשר להגדיר טעינה אסינכרונית של DAG כדי לנתח ולטעון DAG ברקע במרווח זמן שהוגדר מראש (זמין בגרסה composer-1.7.1-airflow-1.10.2 ואילך). התצורה הזו יכולה גם לקצר את זמן הרענון של DAG.

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

אם אתם ממשיכים להיתקל בבעיות בשרת האינטרנט בגלל ניתוח DAG, מומלץ להשתמש בטעינת DAG אסינכרונית.

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

  • צריך להיות לכם תפקיד שמאפשר לכם לראות סביבות Managed Airflow. מידע נוסף מופיע במאמר בקרת גישה.

  • במהלך יצירת הסביבה, Managed Airflow מגדיר את כתובת ה-URL של שרת האינטרנט שמריץ את ממשק המשתמש של Airflow. אי אפשר לשנות את כתובת ה-URL.

  • התכונה Airflow UI Access Control (בקרת גישה מבוססת-תפקידים ב-Airflow) לממשק המשתמש של Airflow נתמכת בסביבות מנוהלות של Airflow שפועלות ב-Composer מגרסה 1.13.4 ואילך, ב-Airflow מגרסה 1.10.10 ואילך וב-Python 3.

גישה לממשק המשתמש של Airflow

שירות שרת האינטרנט של Airflow נפרס בדומיין appspot.com ומספק גישה לממשק המשתמש של Airflow. ‫Managed Airflow (Legacy Gen 1) מספק גישה לממשק על סמך זהויות משתמשים וקישורי מדיניות IAM שהוגדרו למשתמשים. ‫Managed Airflow (Legacy Gen 1) משתמש בשרת proxy לאימות זהויות (IAP) למטרה הזו.

אחרי יצירת סביבת Managed Airflow חדשה, יכולות לחלוף עד 25 דקות עד שממשק המשתמש יסיים את האירוח ויהיה נגיש.

גישה לממשק המשתמש של Airflow ממסוף Google Cloud

כדי לגשת לממשק המשתמש של Airflow ממסוף Google Cloud :

  1. נכנסים לדף Environments במסוף Google Cloud .

    מעבר אל Environments

  2. בעמודה Airflow webserver, לוחצים על הקישור Airflow של הסביבה.

  3. נכנסים לחשבון Google עם ההרשאות המתאימות.

קבלת כתובת ה-URL של ממשק המשתמש של Airflow באמצעות Google Cloud CLI

אפשר לגשת לממשק המשתמש של Airflow מכל דפדפן אינטרנט. כדי לקבל את כתובת ה-URL של ממשק המשתמש של Airflow, מריצים את הפקודה הבאה ב-CLI של Google Cloud:

gcloud composer environments describe ENVIRONMENT_NAME \
  --location LOCATION

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

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

הפקודה gcloud מציגה את המאפיינים של סביבת Managed Airflow, כולל כתובת ה-URL של ממשק המשתמש של Airflow. כתובת ה-URL מופיעה בתור airflowUri.

config:
  airflowUri: https://example-tp.appspot.com

הגדרת טעינה אסינכרונית של DAG

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

התהליך מתעורר מדי פעם כדי לטעון מחדש את ה-DAG, והמרווח מוגדר על ידי האפשרות collect_dags_interval.

כדי להפעיל טעינה אסינכרונית של DAG:

  1. השבתת סריאליזציה של DAG. אי אפשר להשתמש בטעינה אסינכרונית של DAG עם סריאליזציה של DAG. שימוש באפשרויות ההגדרה של async_dagbag_loader ו-store_serialized_dags Airflow יוצר שגיאות HTTP 503 וגורם לשיבוש בסביבה.

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

    קטע מפתח ערך הערות
    webserver async_dagbag_loader True ערך ברירת המחדל הוא False.
    webserver collect_dags_interval 30 ערך ברירת המחדל הוא 30. כדי שהרענון יהיה מהיר יותר, צריך להשתמש בערך קטן יותר.
    webserver dagbag_sync_interval 10 ערך ברירת המחדל הוא 10.
    webserver worker_refresh_interval 3600 ערך ברירת המחדל הוא 60. עם טעינה אסינכרונית של DAG, אפשר להשתמש במרווח רענון ארוך יותר.

הפעלה מחדש של שרת האינטרנט

כשמבצעים ניפוי באגים או פותרים בעיות בסביבות Managed Airflow, לפעמים אפשר לפתור בעיות מסוימות על ידי הפעלה מחדש של שרת האינטרנט של Airflow. אפשר להפעיל מחדש את שרת האינטרנט באמצעות restartWebServer API או באמצעות הפקודה restart-web-server ב-Google Cloud CLI:

gcloud composer environments restart-web-server ENVIRONMENT_NAME \
  --location=LOCATION

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

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

הגדרת גישה לרשת של שרת אינטרנט

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

אי אפשר להגדיר את טווחי כתובות ה-IP המותרים ככתובות IP פרטיות.

המסוף

  1. נכנסים לדף Environments במסוף Google Cloud .

    מעבר אל Environments

  2. ברשימת הסביבות, לוחצים על שם הסביבה. הדף Environment details ייפתח.

  3. עוברים לכרטיסייה Environment configuration (הגדרת הסביבה).

  4. בקטע תצורת רשת, מאתרים את הפריט בקרת גישה לשרת אינטרנט ולוחצים על עריכה.

  5. בתיבת הדו-שיח Web server network access control (בקרת גישה לרשת של שרת האינטרנט):

    • כדי לספק גישה לשרת האינטרנט של Airflow מכל כתובות ה-IP, בוחרים באפשרות Allow access from all IP addresses.

    • כדי להגביל את הגישה רק לטווחים ספציפיים של כתובות IP, בוחרים באפשרות Allow access only from specific IP addresses. בשדה טווח כתובות IP, מציינים טווח כתובות IP בסימון CIDR. בשדה Description, מציינים תיאור אופציונלי לטווח הזה. אם רוצים לציין יותר מטווח אחד, לוחצים על הוספת טווח כתובות IP.

    • כדי לחסום את הגישה לכל כתובות ה-IP, בוחרים באפשרות Allow access only from specific IP addresses ולוחצים על Delete item לצד הרשומה הריקה של טווח כתובות ה-IP.

gcloud

כשמעדכנים סביבה, הארגומנטים הבאים שולטים בפרמטרים של הגישה לשרת האינטרנט:

  • --web-server-allow-all מאפשר גישה ל-Airflow מכל כתובות ה-IP. זו האפשרות שמוגדרת כברירת המחדל.

  • --update-web-server-allow-ip מגביל את הגישה רק לטווחים ספציפיים של כתובות IP של מקורות. כדי לציין כמה טווחים של כתובות IP, משתמשים בארגומנט הזה כמה פעמים.

  • --web-server-deny-all אוסר גישה לכל כתובות ה-IP.

gcloud composer environments update ENVIRONMENT_NAME \
    --location LOCATION \
    --update-web-server-allow-ip ip_range=WS_IP_RANGE,description=WS_RANGE_DESCRIPTION

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

  • ENVIRONMENT_NAME: השם של הסביבה.
  • LOCATION: האזור שבו נמצאת הסביבה.
  • WS_IP_RANGE: טווח כתובות ה-IP, בסימון CIDR, שיכולות לגשת לממשק המשתמש של Airflow.
  • WS_RANGE_DESCRIPTION: תיאור טווח כתובות ה-IP.

דוגמה:

gcloud composer environments update example-environment \
    --location us-central1 \
    --update-web-server-allow-ip ip_range=192.0.2.0/24,description="example range" \
    --update-web-server-allow-ip ip_range=192.0.4.0/24,description="example range 2"

API

  1. יוצרים בקשת API מסוג [environments.patch][api-patch].

  2. בבקשה הזו:

    1. בפרמטר updateMask, מציינים את המסכה config.webServerNetworkAccessControl.

    2. בגוף הבקשה, מציינים איך צריך לשמור את יומני המשימות של Airflow:

      • כדי לספק גישה ל-Airflow מכל כתובות ה-IP, צריך לציין רכיב config ריק (אסור שרכיב webServerNetworkAccessControl יהיה קיים).

      • כדי להגביל את הגישה רק לטווחים ספציפיים של כתובות IP, מציינים טווח אחד או יותר ב-allowedIpRanges.

      • כדי לאסור גישה לכל כתובות ה-IP, צריך לציין רכיב webServerNetworkAccessControl ריק. הרכיב webServerNetworkAccessControl חייב להיות נוכח, אבל אסור לו להכיל רכיב allowedIpRanges.

{
  "config": {
    "webServerNetworkAccessControl": {
      "allowedIpRanges": [
        {
          "value": "WS_IP_RANGE",
          "description": "WS_RANGE_DESCRIPTION"
        }
      ]
    }
  }
}

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

  • WS_IP_RANGE: טווח כתובות ה-IP, בסימון CIDR, שיכולות לגשת לממשק המשתמש של Airflow.
  • WS_RANGE_DESCRIPTION: תיאור טווח כתובות ה-IP.

דוגמה:

// PATCH https://composer.googleapis.com/v1/projects/example-project/
// locations/us-central1/environments/example-environment?updateMask=
// config.webServerNetworkAccessControl

{
  "config": {
    "webServerNetworkAccessControl": {
      "allowedIpRanges": [
        {
          "value": "192.0.2.0/24",
          "description": "example range"
        },
        {
          "value": "192.0.4.0/24",
          "description": "example range 2"
        }
      ]
    }
  }
}

Terraform

בבלוק allowed_ip_range, בשורה web_server_network_access_control specify IP ranges that can access שרת אינטרנט.

resource "google_composer_environment" "example" {
  provider = google-beta
  name = "ENVIRONMENT_NAME"
  region = "LOCATION"

  config {

    web_server_network_access_control {

      allowed_ip_range {
        value = "WS_IP_RANGE"
        description = "WS_RANGE_DESCRIPTION"
      }

    }

  }
}

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

  • WS_IP_RANGE: טווח כתובות ה-IP, בסימון CIDR, שיכולות לגשת לממשק המשתמש של Airflow.
  • WS_RANGE_DESCRIPTION: תיאור טווח כתובות ה-IP.

דוגמה:

resource "google_composer_environment" "example" {
  provider = google-beta
  name = "example-environment"
  region = "us-central1"

  config {

    web_server_network_access_control {
      allowed_ip_range {
        value = "192.0.2.0/24"
        description = "example range"
      },
      allowed_ip_range {
        value = "192.0.4.0/24"
        description = "example range 2"
      }

    }
}

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