Managed Airflow (דור 3) | Managed Airflow (דור 2) | Managed Airflow (דור 1 מדור קודם)
בדף הזה מוסבר איך להתקין חבילות Python בסביבת Managed Airflow.
מידע על חבילות ב-Managed Airflow
בקטע הזה מוסבר איך חבילות PyPI פועלות ב-Managed Airflow.
חבילות PyPI מותקנות מראש וחבילות PyPI בהתאמה אישית בתמונות של Managed Airflow
תמונות Managed Airflow מכילות חבילות PyPI מותאמות אישית וחבילות PyPI שהותקנו מראש.
חבילות PyPI שמותקנות מראש הן חבילות שכלולות בקובץ האימג' של סביבת Managed Airflow. כל תמונה של Managed Airflow מכילה חבילות PyPI שספציפיות לגרסה שלכם של Managed Airflow ו-Airflow.
חבילות PyPI בהתאמה אישית הן חבילות שאפשר להתקין בסביבה בנוסף לחבילות שהותקנו מראש.
אפשרויות לניהול חבילות PyPI בסביבות Managed Airflow
| אפשרות | להשתמש אם |
|---|---|
| התקנה מ-PyPI | דרך ברירת המחדל להתקנת חבילות בסביבה |
| התקנה ממאגר עם כתובת IP ציבורית | החבילה מתארחת במאגר חבילות שאינו PyPI. למאגר הזה יש כתובת IP ציבורית |
| התקנה ממאגר Artifact Registry | החבילה מתארחת במאגר של Artifact Registry |
| התקנה ממאגר ברשת של הפרויקט | אין לסביבה שלכם גישה לאינטרנט ציבורי. החבילה מתארחת במאגר חבילות ברשת של הפרויקט. |
| התקנה כספריית Python מקומית |
לא ניתן למצוא את החבילה ב-PyPI, ולספרייה אין תלות חיצונית, כמו dist-packages. |
| התקנת פלאגין | החבילה מספקת פונקציונליות ספציפית לפלאגין, כמו שינוי ממשק האינטרנט של Airflow. |
| PythonVirtualenvOperator | לא רוצים שהחבילה תותקן בכל עובדי Airflow, או שהתלות מתנגשת עם חבילות שהותקנו מראש. החבילה נמצאת ב-PyPI ואין לה תלות חיצונית. |
| KubernetesPodOperator ואופרטורים של GKE |
אתם צריכים יחסי תלות חיצוניים שלא ניתן להתקין מ-pip, כמו dist-packages, או שהם נמצאים בשרת pip פנימי. האפשרות הזו דורשת יותר הגדרות ותחזוקה. כדאי לשקול את האפשרות הזו רק אם האפשרויות האחרות לא עובדות. |
לפני שמתחילים
צריך להיות לכם תפקיד שמאפשר להפעיל פעולות של עדכון סביבה. בנוסף, לחשבון השירות של הסביבה צריך להיות תפקיד עם הרשאות מספיקות לביצוע פעולות עדכון.
אם הסביבה שלכם מוגנת על ידי היקף של VPC Service Controls, לפני שמתקינים תלות ב-PyPI צריך להעניק זהויות משתמש נוספות עם גישה לשירותים שגבולות גזרה לשירות מגן עליהם, ולאפשר תמיכה במאגר פרטי של PyPI.
הדרישות צריכות להיות בפורמט שצוין ב-PEP-508, שבו כל דרישה מצוינת באותיות קטנות ומורכבת משם החבילה עם תוספות אופציונליות ומפרטי גרסה.
עדכוני תלות ב-PyPI יוצרים קובצי אימג' של Docker ב-Artifact Registry.
אם עדכון נכשל בגלל התנגשות בין תלויות, הסביבה ממשיכה לפעול עם התלויות הקיימות שלה. אם הפעולה מצליחה, אפשר להתחיל להשתמש בתלות של Python שהותקנו לאחרונה ב-DAG.
PythonVirtualenvOperator לא משתמש בהגדרות מקובץ
pip.confשל הסביבה. אם רוצים להשתמש בתלות ספציפית, כולל התקנה שלהן מאינדקס מותאם אישית, מעבירים את הדרישות בפרמטרrequirementsכרשימה של מחרוזות. מידע נוסף על הפורמט זמין במאמר בנושא פורמט של קובץ דרישות במסמכי התיעוד של pip.
צפייה ברשימת חבילות PyPI
אפשר לקבל את רשימת החבילות של הסביבה בכמה פורמטים.
הצגת חבילות שהותקנו מראש
כדי לראות את רשימת החבילות שהותקנו מראש בסביבה שלכם, אפשר לעיין ברשימת החבילות של תמונת ה-Managed Airflow של הסביבה.
הצגת כל החבילות
כדי לראות את כל החבילות (גם אלה שהותקנו מראש וגם אלה שהותאמו אישית) בסביבה שלכם:
gcloud
הפקודה הבאה ב-CLI של gcloud מחזירה את התוצאה של הפקודה python -m pip list עבור Airflow worker בסביבה שלכם.
אפשר להשתמש בארגומנט --tree כדי לקבל את התוצאה של הפקודה python -m pipdeptree --warn.
gcloud beta composer environments list-packages \
ENVIRONMENT_NAME \
--location LOCATION
מחליפים את:
-
ENVIRONMENT_NAMEבשם הסביבה. -
LOCATIONעם האזור שבו הסביבה ממוקמת.
הצגת חבילות PyPI בהתאמה אישית
המסוף
במסוף Google Cloud , עוברים לדף Environments.
ברשימת הסביבות, לוחצים על שם הסביבה. הדף Environment details ייפתח.
עוברים לכרטיסייה PyPI Packages (חבילות PyPI).
gcloud
gcloud composer environments describe ENVIRONMENT_NAME \
--location LOCATION \
--format="value(config.softwareConfig.pypiPackages)"
מחליפים את:
-
ENVIRONMENT_NAMEבשם הסביבה. -
LOCATIONעם האזור שבו הסביבה ממוקמת.
התקנת חבילות בהתאמה אישית בסביבת Managed Airflow
בקטע הזה מתוארות שיטות שונות להתקנת חבילות מותאמות אישית בסביבה שלכם.
התקנת חבילות מ-PyPI
אפשר להתקין חבילה מאינדקס החבילות של Python אם אין לה תלות חיצונית או אם היא לא מתנגשת עם חבילות שהותקנו מראש.
כדי להוסיף, לעדכן או למחוק את יחסי התלות של Python בסביבה:
המסוף
במסוף Google Cloud , עוברים לדף Environments.
ברשימת הסביבות, לוחצים על שם הסביבה. הדף Environment details ייפתח.
עוברים לכרטיסייה PyPI packages (חבילות PyPI).
לוחצים על עריכה.
לוחצים על הוספת חבילה.
בקטע PyPI packages (חבילות PyPI), מציינים את שמות החבילות, עם מפרטי גרסאות ותוספים אופציונליים.
לדוגמה:
scikit-learnscipy,>=0.13.3nltk,[machine_learning]
לוחצים על Save.
gcloud
ל-CLI של gcloud יש כמה ארגומנטים לעבודה עם חבילות PyPI מותאמות אישית:
-
--update-pypi-packages-from-fileמחליף את כל חבילות ה-PyPI המותאמות אישית הקיימות בחבילות שצוינו. חבילות שלא מציינים יוסרו. -
--update-pypi-packageמעדכן או מתקין חבילה אחת. -
--remove-pypi-packagesמסיר חבילות שצוינו. --clear-pypi-packagesמסיר את כל החבילות.
התקנת דרישות מקובץ
בכל שורה בקובץ requirements.txt צריך להיות מציין דרישה נפרד.
לדוגמה:
scipy>=0.13.3
scikit-learn
nltk[machine_learning]
מעדכנים את הסביבה ומציינים את הקובץ requirements.txt בארגומנט --update-pypi-packages-from-file.
gcloud composer environments update ENVIRONMENT_NAME \
--location LOCATION \
--update-pypi-packages-from-file requirements.txt
מחליפים את:
-
ENVIRONMENT_NAMEבשם הסביבה. -
LOCATIONעם האזור שבו הסביבה ממוקמת.
התקנת חבילה אחת
מעדכנים את הסביבה ומציינים את החבילה, הגרסה והתוספים בארגומנט --update-pypi-package.
gcloud composer environments update ENVIRONMENT_NAME \
--location LOCATION \
--update-pypi-package PACKAGE_NAMEEXTRAS_AND_VERSION
מחליפים את:
-
ENVIRONMENT_NAMEבשם הסביבה. -
LOCATIONעם האזור שבו הסביבה ממוקמת. -
PACKAGE_NAMEבשם החבילה. -
EXTRAS_AND_VERSIONעם ציון גרסת המפרט ותוספים אופציונליים. כדי להשמיט גרסאות ותוספות, מציינים ערך ריק.
דוגמה:
gcloud composer environments update example-environment \
--location us-central1 \
--update-pypi-package "scipy>=0.13.3"
הסרת חבילות
מעדכנים את הסביבה ומציינים את החבילות שרוצים למחוק בארגומנט --remove-pypi-packages:
gcloud composer environments update ENVIRONMENT_NAME \
--location LOCATION \
--remove-pypi-packages PACKAGE_NAMES
מחליפים את:
-
ENVIRONMENT_NAMEבשם הסביבה. -
LOCATIONעם האזור שבו הסביבה ממוקמת. -
PACKAGE_NAMESברשימה מופרדת בפסיקים של חבילות.
דוגמה:
gcloud composer environments update example-environment \
--location us-central1 \
--remove-pypi-packages scipy,scikit-learn
API
יוצרים בקשת API של environments.patch.
בבקשה הזו:
בפרמטר
updateMask, מציינים את המסכה:- משתמשים במסכת
config.softwareConfig.pypiPackagesכדי להחליף את כל החבילות הקיימות בחבילות שצוינו. חבילות שלא מציינים יימחקו. - משתמשים ב-
config.softwareConfig.pypiPackages.PACKAGE_NAMEכדי להוסיף או לעדכן חבילה ספציפית. כדי להוסיף או לעדכן כמה חבילות, מציינים כמה מסכות עם פסיקים.
- משתמשים במסכת
בגוף הבקשה, מציינים חבילות וערכים לגרסאות ולתוספים:
{ "config": { "softwareConfig": { "pypiPackages": { "PACKAGE_NAME": "EXTRAS_AND_VERSION" } } } }מחליפים את:
-
PACKAGE_NAMEבשם החבילה. -
EXTRAS_AND_VERSIONעם ציון גרסת המפרט ותוספים אופציונליים. כדי להשמיט גרסאות ותוספות, מציינים ערך ריק. - כדי להוסיף יותר מחבילה אחת, מוסיפים עוד רשומות של חבילות אל
pypiPackages.
-
דוגמה:
// PATCH https://composer.googleapis.com/v1/projects/example-project/
// locations/us-central1/environments/example-environment?updateMask=
// config.softwareConfig.pypiPackages.EXAMPLE_PACKAGE,
// config.softwareConfig.pypiPackages.ANOTHER_PACKAGE
{
"config": {
"softwareConfig": {
"pypiPackages": {
"EXAMPLE_PACKAGE": "",
"ANOTHER_PACKAGE": ">=1.10.3"
}
}
}
}
Terraform
הבלוק pypi_packages בבלוק software_config מציין חבילות.
resource "google_composer_environment" "example" {
name = "ENVIRONMENT_NAME"
region = "LOCATION"
config {
software_config {
pypi_packages = {
PACKAGE_NAME = "EXTRAS_AND_VERSION"
}
}
}
}
מחליפים את:
-
ENVIRONMENT_NAMEבשם הסביבה. -
LOCATIONעם האזור שבו הסביבה ממוקמת. -
PACKAGE_NAMEבשם החבילה. -
EXTRAS_AND_VERSIONעם ציון גרסת המפרט ותוספים אופציונליים. כדי להשמיט גרסאות ותוספות, מציינים ערך ריק. - כדי להוסיף יותר מחבילה אחת, מוסיפים עוד רשומות של חבילות אל
pypi_packages.
דוגמה:
resource "google_composer_environment" "example" {
name = "example-environment"
region = "us-central1"
config {
software_config {
pypi_packages = {
scipy = ">=1.10.3"
scikit-learn = ""
nltk = "[machine_learning]"
}
}
}
}
התקנת חבילות ממאגר ציבורי
אפשר להתקין חבילות שמתארחות במאגרים אחרים שיש להם כתובת IP ציבורית.
צריך להגדיר את החבילות בצורה נכונה כדי שכלי ברירת המחדל pip יוכל להתקין אותן.
כדי להתקין ממאגר חבילות שיש לו כתובת ציבורית:
יוצרים קובץ pip.conf ומוסיפים אליו את הפרטים הבאים, אם רלוונטי:
- כתובת ה-URL של המאגר (בפרמטר
index-url) - פרטי כניסה לגישה למאגר
- אפשרויות התקנה שאינן ברירת המחדל
pip
דוגמה:
[global] index-url=https://example.com/- כתובת ה-URL של המאגר (בפרמטר
(אופציונלי) במקרים מסוימים, יכול להיות שתרצו לאחזר חבילות מכמה מאגרי מידע, למשל אם מאגר המידע הציבורי מכיל חבילות ספציפיות שאתם רוצים להתקין, ואתם רוצים להתקין את כל החבילות האחרות מ-PyPI:
- מגדירים מאגר וירטואלי של Artifact Registry.
- מוסיפים הגדרה לכמה מאגרי מידע (כולל PyPI, אם צריך) ומגדירים את הסדר שבו
pipמחפש במאגרי המידע. - מציינים את כתובת ה-URL של המאגר הווירטואלי בפרמטר
index-url.
מעלים את הקובץ pip.conf לתיקייה
/config/pip/בקטגוריה של הסביבה.מתקינים חבילות באמצעות אחת מהשיטות הזמינות.
התקנת חבילות ממאגר Artifact Registry
אתם יכולים לאחסן חבילות במאגר Artifact Registry בפרויקט ולהגדיר את הסביבה להתקנה ממנו.
הגדרת תפקידים והרשאות:
מוודאים שלחשבון השירות ב-Cloud Build יש הרשאות לקריאה מהמאגר של Artifact Registry.
מעניקים הרשאות נוספות להתקנת חבילות ממאגרי Artifact Registry לחשבון השירות של הסביבה, כפי שמתואר במאמר בנושא בקרת גישה.
אם בסביבה שלכם הגישה לשירותים אחרים בפרויקט מוגבלת, למשל אם אתם משתמשים ב-VPC Service Controls:
מקצים הרשאות גישה למאגר של Artifact Registry לחשבון השירות של הסביבה במקום לחשבון השירות של Cloud Build.
מוודאים שהקישוריות למאגר Artifact Registry מוגדרת בפרויקט.
כדי להתקין חבילות PyPI בהתאמה אישית ממאגר Artifact Registry:
יוצרים קובץ pip.conf ומוסיפים אליו את הפרטים הבאים, אם רלוונטי:
- כתובת ה-URL של מאגר Artifact Registry (בפרמטר
index-url) - פרטי כניסה לגישה למאגר
- אפשרויות התקנה שאינן ברירת המחדל
pip
במאגר Artifact Registry, מוסיפים
/simple/לכתובת ה-URL של המאגר:[global] index-url = https://us-central1-python.pkg.dev/example-project/example-repository/simple/- כתובת ה-URL של מאגר Artifact Registry (בפרמטר
(אופציונלי) במקרים מסוימים, יכול להיות שתרצו לאחזר חבילות מכמה מאגרי מידע, למשל אם מאגר המידע של Artifact Registry מכיל חבילות ספציפיות שאתם רוצים להתקין, ואתם רוצים להתקין את כל החבילות האחרות מ-PyPI:
- מגדירים מאגר וירטואלי של Artifact Registry.
- מוסיפים הגדרה לכמה מאגרי מידע (כולל PyPI, אם צריך) ומגדירים את הסדר שבו
pipמחפש במאגרי המידע. - מציינים את כתובת ה-URL של המאגר הווירטואלי בפרמטר
index-url.
מעלים את הקובץ pip.conf לתיקייה
/config/pip/בדלי של הסביבה. לדוגמה:gs://us-central1-example-bucket/config/pip/pip.conf.מתקינים חבילות באמצעות אחת מהשיטות הזמינות.
התקנת חבילות ממאגר פרטי
אתם יכולים לארח מאגר פרטי ברשת של הפרויקט ולהגדיר את הסביבה להתקנת חבילות Python ממנו.
הגדרת תפקידים והרשאות:
אם מתקינים חבילות PyPI בהתאמה אישית ממאגר ברשת של הפרויקט, ולמאגר הזה אין כתובת IP ציבורית:
מקצים הרשאות גישה למאגר הזה לחשבון השירות של הסביבה.
מוודאים שהקישור למאגר הזה מוגדר בפרויקט.
נותנים הרשאות נוספות להתקנת חבילות ממאגרים פרטיים לחשבון השירות של הסביבה, כמו שמתואר בקטע בקרת גישה.
כדי להתקין חבילות ממאגר פרטי שמתארח ברשת של הפרויקט:
יוצרים קובץ pip.conf ומוסיפים אליו את הפרטים הבאים, אם רלוונטי:
- כתובת ה-IP של המאגר ברשת של הפרויקט
- פרטי כניסה לגישה למאגר
- אפשרויות התקנה שאינן ברירת המחדל
pip
דוגמה:
[global] index-url=https://192.0.2.10/(אופציונלי) במקרים מסוימים, יכול להיות שתרצו לאחזר חבילות מכמה מאגרי מידע, למשל אם המאגר הפרטי מכיל חבילות ספציפיות שאתם רוצים להתקין, ואתם רוצים להתקין את כל החבילות האחרות מ-PyPI:
- מגדירים מאגר וירטואלי של Artifact Registry.
- מוסיפים הגדרה למאגרי מידע מרובים (כולל PyPI, אם צריך) ומגדירים את הסדר שבו
pipמחפש במאגרי המידע. - מציינים את כתובת ה-URL של המאגר הווירטואלי בפרמטר
index-url.
מעלים את הקובץ pip.conf לתיקייה
/config/pip/בקטגוריה של הסביבה. לדוגמה:gs://us-central1-example-bucket/config/pip/pip.conf.מתקינים חבילות באמצעות אחת מהשיטות הזמינות.
התקנה של ספריית Python מקומית
כדי להתקין ספריית Python פנימית או מקומית:
ממקמים את יחסי התלות בספריית משנה בתיקייה
dags/בקטגוריה של הסביבה. כדי לייבא מודול מתת-ספרייה, כל תת-ספרייה בנתיב של המודול צריכה להכיל קובץ סימון חבילה__init__.py.בדוגמה הבאה, יחס התלות הוא
coin_module.py:dags/ use_local_deps.py # A DAG file. dependencies/ __init__.py coin_module.pyמייבאים את התלות מקובץ ההגדרה של ה-DAG.
לדוגמה:
שימוש בחבילות שתלויות בספריות של אובייקטים משותפים
חלק מחבילות PyPI תלויות בספריות ברמת המערכת. למרות ש-Managed Airflow לא תומך בספריות מערכת, אתם יכולים להשתמש באפשרויות הבאות:
משתמשים ב-KubernetesPodOperator. הגדרת קובץ אימג' מותאם אישית של build לקובץ האימג' של האופרטור. אם נתקלתם בחבילות שלא מצליחות להתקין בגלל תלות במערכת שלא מתקיימת, כדאי להשתמש באפשרות הזו.
מעלים את ספריות האובייקטים המשותפות לקטגוריה של הסביבה. אם חבילות PyPI הותקנו בהצלחה אבל נכשלות בזמן הריצה, כדאי להשתמש באפשרות הזו.
- מאתרים באופן ידני את ספריות האובייקטים המשותפות של התלות ב-PyPI (קובץ .so).
- מעלים את ספריות האובייקטים המשותפות לתיקייה
/pluginsבקטגוריה של הסביבה. - מגדירים את משתנה הסביבה הבא:
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/airflow/gcs/plugins
התקנת חבילות בסביבות עם כתובת IP פרטית
יכול להיות שלסביבה שלכם אין גישה לאינטרנט הציבורי, בהתאם להגדרות הפרויקט.
סביבת IP פרטית עם גישה לאינטרנט הציבורי
אם בסביבת ה-IP הפרטית שלכם יש גישה לאינטרנט הציבורי, אתם יכולים להתקין חבילות באמצעות האפשרויות לסביבות IP ציבוריות:
- התקנה מ-PyPI. במקרה כזה, לא נדרש שום שינוי בהגדרות. פועלים לפי התהליך שמתואר במאמר בנושא התקנת חבילות מ-PyPI.
- התקנה ממאגר עם כתובת IP ציבורית. פועלים לפי התהליך שמתואר במאמר בנושא התקנת חבילות ממאגר ציבורי.
- התקנה ממאגר PyPI פרטי שמתארח ברשת של הפרויקט.
סביבת IP פרטית ללא גישה לאינטרנט
אם בסביבת ה-IP הפרטי שלכם אין גישה לאינטרנט הציבורי, אתם יכולים להתקין חבילות באחת מהדרכים הבאות:
- משתמשים במאגר PyPI פרטי שמתארח ברשת של הפרויקט.
- משתמשים במכונה וירטואלית של שרת proxy ברשת של הפרויקט כדי להתחבר למאגר PyPI באינטרנט הציבורי. מציינים את כתובת ה-Proxy בקובץ
/config/pip/pip.confבדלי של הסביבה. - שימוש במאגר של Artifact Registry כמקור היחיד של חבילות. כדי לעשות זאת, צריך להגדיר מחדש את הפרמטר
index-url, כמו שמתואר. - אם מדיניות האבטחה שלכם מאפשרת גישה לכתובות IP חיצוניות מרשת ה-VPC, אתם יכולים להגדיר Cloud NAT כדי לאפשר התקנה של חבילות ממאגרי מידע באינטרנט הציבורי.
- כדי להתקין את התלויות של Python כספריות מקומיות, צריך להעביר אותן לתיקייה
/dagsבדלי של הסביבה. אם עץ התלות גדול, יכול להיות שזו לא אפשרות טובה.
התקנה בסביבת IP פרטי במסגרת הגבלות על מיקום המשאבים
כדי שהפרויקט יעמוד בדרישות של הגבלת מיקום המשאבים, אסור להשתמש בכלים מסוימים. בפרט, אי אפשר להשתמש ב-Cloud Build להתקנת חבילות, ולכן אין גישה ישירה למאגרים באינטרנט הציבורי.
כדי להתקין תלות ב-Python בסביבה כזו, פועלים לפי ההנחיות לגבי סביבות עם כתובות IP פרטיות ללא גישה לאינטרנט.
התקנת תלות של Python בסביבת IP פרטית בפרימטר של VPC Service Controls
הגנה על הפרויקט באמצעות VPC Service Controls perimeter מובילה להגבלות אבטחה נוספות. בפרט, אי אפשר להשתמש ב-Cloud Build להתקנת חבילות, ולכן אין גישה ישירה למאגרים באינטרנט הציבורי.
כדי להתקין תלות ב-Python בסביבת IP פרטית בתוך גבולות גזרה, פועלים לפי ההנחיות לסביבות IP פרטיות ללא גישה לאינטרנט.