Managed Airflow (דור 3) | Managed Airflow (דור 2) | Managed Airflow (דור 1 מדור קודם)
בדף הזה נסביר איך לשמור ולטעון את המצב של הסביבה באמצעות תמונות מצב של הסביבה.
אתם יכולים להגדיר את הסביבה כך שתשמור תמונות מצב באופן אוטומטי. למידע נוסף, אפשר לעיין במאמר בנושא הגדרת צילומי מצב מתוזמנים.
מידע על קובצי snapshot של סביבות
תמונות מצב של הסביבה שומרות את מצב הסביבה. אפשר לשמור ולטעון תמונות מצב של הסביבה לפי דרישה.
אתם יכולים להשתמש בתמונות כדי:
שחזור הסביבה למצב קודם. יוצרים גיבויים של הסביבה באמצעות קובצי snapshot, ואז טוענים אחד מקובצי ה-snapshot כדי לשחזר את הסביבה. לדוגמה, אפשר לבטל פעולת עדכון שמתקינה חבילות PyPI או מבטלת אפשרויות הגדרה של Airflow, גם אחרי שהסביבה עודכנה בהצלחה.
לבצע שדרוגים זה לצד זה ולהעתיק סביבות. יוצרים snapshot של סביבה קיימת, יוצרים סביבה חדשה שמשתמשת באותה גרסה של Managed Airflow או בגרסה מאוחרת יותר, ואז מחילים את ה-snapshot על הסביבה החדשה הזו. התהליך הזה דומה להעברה. כדי למנוע הפעלות כפולות של DAG, חשוב להשהות את ה-DAG לפני שיוצרים את התמונה.
איך תמונות המצב מאוחסנות
תמונת מצב של סביבה היא קבוצה של קבצים שמתארים את המצב של הסביבה ושומרים את הגיבוי של נתוני הסביבה.
אפשר ליצור כמה תמונות מצב של הסביבה. קובצי snapshot של הסביבה הם לא מצטברים. אפשר להשתמש בכל תמונת מצב בנפרד מתמונות מצב אחרות.
כשמוחקים את הסביבה, לא נמחקים צילומי המצב של Managed Airflow.
כברירת מחדל, Managed Airflow שומר תמונות מצב בתיקייה snapshots/בדלי של הסביבה. אפשר גם לציין מיקום מותאם אישית כשיוצרים תמונת מצב.
בממשק המשתמש של Cloud Storage, הנתונים מוצגים כתיקיות לנוחות המשתמש, אבל קטגוריות פועלות במבנה של קובץ שטוח. השינוי הזה לא משפיע על אופן העבודה עם שמירה וטעינה של תמונות מצב במסוף Google Cloud , אבל חשוב לזכור את זה כשמבצעים פעולות ישירות על הקבצים בדלי. מידע נוסף זמין במאמר מרחב שמות של אובייקטים.
שיקולי אבטחה לגבי תמונות מצב
כדי לצמצם את הסיכון הזה לאבטחה, אתם יכולים לאחסן מידע רגיש שמשמש את Airflow DAGs, כמו מפתחות או סיסמאות, ב-Secret Manager. מידע נוסף זמין במאמר בנושא הגדרת Secret Manager לסביבה שלכם.
חשוב לבדוק את הרשאות האבטחה של קטגוריית ה-S3 בסביבה שלכם. אם אתם מאחסנים תמונות מצב של הסביבה בדלי בהתאמה אישית, חשוב לוודא שהרשאות הגישה מוגדרות בצורה נכונה בפרויקט. כשמקצים הרשאות, חשוב לוודא שלחשבון השירות של הסביבה יש מספיק הרשאות לשמירה ולטעינה של תמונות מצב מהמאגר.
אילו נתונים נשמרים בתמונות מצב
ב-Managed Airflow, הנתונים הבאים נשמרים בתמונות מצב:
- הגדרות חלופיות של Airflow.
- משתני סביבה.
- רשימה של חבילות PyPI מותאמות אישית, כדרישות.
- גיבוי של מסד הנתונים של Airflow, כולל מצבים של משימות שהופעלו והיסטוריה של הפעלות DAG.
- גיבוי של התיקיות
/dags,/dataו-/pluginsמהמאגר של הסביבה. - מפתח Fernet של הסביבה.
- מידע נוסף על ההגדרות של הסביבה, כמו קנה המידה של הסביבה ופרמטרים של ביצועים. Managed Airflow לא משתמש במידע הזה כשהוא טוען תמונות מצב.
אילו נתונים נטענים מתמונות המצב
Managed Airflow טוען את הנתונים הבאים מתמונות מצב:
- הגדרות חלופיות של Airflow.
- משתני סביבה.
חבילות PyPI בהתאמה אישית (אלא אם בוחרים לדלג על ההתקנה שלהן).
התוכן של מסד הנתונים של Airflow, כולל מצבים של משימות שהושלמו והיסטוריה של הפעלות DAG.
התוכן של התיקיות
/dags,/dataו-/pluginsמקובץ ה-snapshot נטען לתוך הדלי של הסביבה.מפתח ה-fernet מהתמונה משמש להצפנה מחדש של הנתונים מהתמונה באמצעות מפתח ה-fernet של הסביבה. מפתח ה-fernet של הסביבה לא משתנה.
למרות שמערכת Managed Airflow שומרת חלק מהמידע על הגדרות הסביבה בתמונות מצב, היא לא משתמשת בו כשמטעינים תמונות מצב. הפרמטרים הבאים של הסביבה לא משתנים כשמטעינים תמונת מצב:
- הגדרת הסביבה, כמו קנה מידה של הסביבה ופרמטרים של ביצועים.
- הגדרת הרשת של הסביבה.
- התוכן של קטגוריית הסביבה מחוץ לתיקיות
/dags,/dataו-/plugins. - תוויות סביבה.
יכול להיות שכל ההגדרות שהחלתם בתשתית Managed Airflow בלי להשתמש ב-Cloud Composer API יאבדו כשתטענו תמונת מצב.
מידע על פעולות שהושלמו באופן חלקי
כשמטעינים תמונת מצב, הפעולה יכולה להצליח, להיכשל או להסתיים באופן חלקי:
- בפעולות מוצלחות, כל הנתונים נטענים מהתמונה.
- פעולות שנכשלו לא גורמות לשינויים.
- פעולות שהושלמו באופן חלקי טוענות קבוצת משנה של נתונים מהתמונה. פעולות כאלה מדווחות כנכשלות, אבל בהודעת השגיאה מצוין אילו נתונים נטענו בהצלחה. לדוגמה, אם חבילות PyPI מותקנות, אבל ביטולי ברירת המחדל של אפשרויות ההגדרה של Airflow לא הצליחו, הודעת השגיאה תציין זאת.
אם הפעולה הושלמה באופן חלקי, אפשר לנסות לטעון שוב את אותו צילום מצב. ב-Managed Airflow, המערכת מדלגת על שלבים שהצליחו בניסיון הקודם. לדוגמה, אם פעולה נכשלה בגלל פסק זמן, אבל מסד הנתונים נטען בהצלחה, הניסיון הבא לא יטען שוב את מסד הנתונים.
לפני שמתחילים
תמונות מצב נתמכות ב-Managed Airflow (דור 2) בגרסה 2.0.9 ואילך. ב-Managed Airflow (דור קודם 1) אפשר לשמור תמונות מצב של סביבות בגרסה 1.18.5 ואילך.
תמונות מצב לא יוצרות סביבה. אם רוצים לטעון snapshot מסביבה אחת לסביבה אחרת, צריך קודם ליצור סביבה חדשה ואז לטעון אליה את ה-snapshot.
אי אפשר לטעון תמונות מצב לסביבות שנמצאות במצב שגיאה. אי אפשר לתקן סביבות כאלה על ידי טעינת תמונת מצב. עדיין אפשר לטעון תמונת מצב קיימת לסביבה חדשה.
אפשר לטעון תמונות מצב רק לגרסה זהה או מאוחרת יותר של Airflow. לדוגמה, אי אפשר לטעון תמונת מצב מ-Airflow 2.9.3 ל-Airflow 2.7.3.
אפשר לטעון תמונת מצב מ-build מאוחר יותר של Airflow באותה גרסת Airflow לסביבה עם build מוקדם יותר. לדוגמה, אפשר להעביר את
airflow-2.9.3-build.6אלairflow-2.9.3-build.5. מומלץ לטעון תמונות מצב לגרסאות קודמות רק אם יש צורך בכך.הגודל המקסימלי של מסד הנתונים של Airflow שתומך בתמונות מצב הוא 20GB. אם מסד הנתונים של הסביבה גדול מ-20GB, צריך להקטין את הגודל של מסד הנתונים של Airflow לפני ששומרים תמונת מצב.
כדי ליצור תמונות מצב, המספר הכולל של האובייקטים בתיקיות
/dags,/pluginsו-/dataבקטגוריה של הסביבה צריך להיות פחות מ-100,000.אם אתם משתמשים במנגנון XCom להעברת קבצים, חשוב לוודא שאתם משתמשים בו בהתאם להנחיות של Airflow. העברה של קבצים גדולים או של מספר גדול של קבצים באמצעות XCom משפיעה על הביצועים של מסד הנתונים של Airflow, ויכולה לגרום לכשלים בטעינת תמונות מצב או בשדרוג הסביבה. כדאי לשקול שימוש בחלופות כמו Cloud Storage להעברת נפחים גדולים של נתונים.
האורך המקסימלי של שם אובייקט בקטגוריית האחסון של הסביבה לא יכול להיות יותר מ-1,024 תווים. אחרת, אי אפשר יהיה ליצור תמונות מצב.
אם שומרים תמונות מצב במיקום מחוץ לקטגוריה של הסביבה, לחשבון השירות של הסביבה צריכות להיות הרשאות קריאה וכתיבה למיקום שצוין. לדוגמה, בתפקיד Storage Object Admin יש הרשאות כאלה. אפשר להחיל אותו על פרויקט או על קטגוריה ספציפית.
יצירה ואחסון של תמונות מצב יוצרים עלויות נוספות שקשורות ל-Cloud Storage. מידע נוסף על תמחור
שמירת תמונת מצב של סביבה
ב-Managed Airflow, תמונות המצב של הסביבה נשמרות בתיקיית משנה, ביחס לתיקייה שאתם מציינים.
שם התיקייה מכיל את מזהה הפרויקט, את המיקום של הסביבה, את השם של הסביבה ואת חותמת הזמן של השמירה של התמונה. לדוגמה:
/snapshots/example-project_us-central1_example-environment_2022-01-05T18-59-00.
המסוף
כדי ליצור תמונת מצב של הסביבה:
במסוף Google Cloud , עוברים לדף Environments.
ברשימת הסביבות, לוחצים על שם הסביבה. הדף Environment details ייפתח.
לוחצים על שמירת תמונת מצב.
בתיבת הדו-שיח שמירת תמונת מצב, בוחרים איפה לשמור את תמונת המצב:
כדי לשמור את התמונה בתיקייה
/snapshotsבדלי של הסביבה, בוחרים באפשרות Use snapshot folder in environment bucket (default) (שימוש בתיקיית תמונות בדלי של הסביבה (ברירת מחדל)).כדי לאחסן את התמונה בתיקייה המותאמת אישית, בוחרים באפשרות שימוש בתיקייה מותאמת אישית בקטגוריה אחרת ומציינים מיקום.
לוחצים על Save.
gcloud
הפקודה gcloud composer environments snapshots save שומרת תמונת מצב של הסביבה.
- הארגומנט
snapshot-locationמציין תיקייה שבה התמונה תישמר. כברירת מחדל, תמונות המצב נשמרות בתיקייה/snapshotsבקטגוריה של הסביבה. לדוגמה:gs://us-central1-example-916807e1-bucket/snapshots. אפשר גם לציין תיקייה אחרת.
כדי לשמור תמונת מצב של הסביבה, מריצים את הפקודה:
gcloud composer environments snapshots save \
ENVIRONMENT_NAME \
--location LOCATION \
--snapshot-location "SNAPSHOTS_FOLDER"
מחליפים את:
-
ENVIRONMENT_NAMEבשם הסביבה. -
LOCATIONעם האזור שבו הסביבה ממוקמת. - (אופציונלי)
SNAPSHOTS_FOLDERעם ה-URI של תיקיית bucket שבה רוצים לאחסן את התמונה. אם לא מציינים את הארגומנט הזה, Managed Airflow שומר את התמונה בתיקייה/snapshotsבדלי של הסביבה.
בדוגמה הבאה נעשה שימוש במיקום שמוגדר כברירת מחדל:
gcloud composer environments snapshots save \
example-environment \
--location us-central1
בדוגמה הבאה, הקובץ נשמר בתיקייה בהתאמה אישית:
gcloud composer environments snapshots save \
example-environment \
--location us-central1 \
--snapshot-location "gs://example-bucket/environment_snapshots"
API
יוצרים בקשת API של
environments.saveSnapshot.בגוף הבקשה, בשדה
snapshotLocation, מציינים את התיקייה שבה רוצים לשמור את התמונה.
{
"snapshotLocation": "SNAPSHOTS_FOLDER"
}
מחליפים את:
-
SNAPSHOTS_FOLDERעם ה-URI של תיקיית Bucket שבה יישמר צילום המסך.
דוגמה:
// POST https://composer.googleapis.com/v1/projects/example-project/
// locations/us-central1/environments/example-environment:saveSnapshot
{
"snapshotLocation": "gs://us-central1-example-916807e1-bucket/snapshots"
}
Terraform
אי אפשר לשמור ולטעון תמונות מצב של סביבות מ-Terraform.
שמירה וטעינה של צילומים הן פעולות שמבוצעות בסביבה, והצילומים שמתקבלים לא נכללים בהגדרת הסביבה. מכיוון ש-Terraform מנהלת רק את ההגדרה של סביבת Managed Airflow, אי אפשר לשמור או לטעון ממנה תמונות מצב של הסביבה.
טעינת תמונת מצב של סביבה
נניח את המצב הבא. לדוגמה, האפשרות catch-up מופעלת ו-Airflow מפעיל DAG לפי לוח זמנים בין הזמן שבו נוצרת התמונה לבין הזמן שבו היא נטענת. במקרה כזה, אחרי טעינת התמונה, ל-Airflow אין מידע על הפעלת ה-DAG שהתרחשה, ולכן הוא מפעיל את ה-DAG שוב לאותו זמן ולאותם נתונים.
דוגמה נוספת: DAG שפועל לפי לוח זמנים יומי. אתם מצלמים תמונת מצב, ואז Airflow מפעיל את ה-DAG הזה, ואחרי זה אתם טוענים את תמונת המצב באותו יום. במקרה כזה, Airflow מריץ שוב את ה-DAG, גם אם catch-up מושבת.
המסוף
כדי לטעון תמונת מצב לסביבה שלכם:
במסוף Google Cloud , עוברים לדף Environments.
ברשימת הסביבות, לוחצים על שם הסביבה. הדף Environment details ייפתח.
לוחצים על טעינת תמונת מצב.
בתיבת הדו-שיח טעינת תמונת מצב, לוחצים על עיון.
בוחרים תיקייה שבה יישמר צילום המסך. שם התיקייה כולל את מזהה הפרויקט, את המיקום של הסביבה ואת חותמת הזמן שבה נשמרת התמונה. לדוגמה,
/snapshots/example-project_us-central1_example-environment_2022-01-05T18-59-00.(אופציונלי) כדי לדלג על ההתקנה של חבילות PyPI בהתאמה אישית מהתמונה, בוחרים באפשרות Skip PyPI packages installation (דילוג על התקנת חבילות PyPI). אם טוענים תמונת מצב של סביבה עם חבילות PyPI מותאמות אישית, חבילות מותאמות אישית כאלה לא מותקנות ב-Managed Airflow.
לוחצים על Load וממתינים עד שהתמונה תטען ב-Managed Airflow.
gcloud
הפקודה gcloud composer environments snapshots load טוענת תמונת מצב לסביבה.
הארגומנט
--snapshot-pathמציין תיקייה שבה נמצאת התמונה.שם התיקייה כולל את מזהה הפרויקט, את המיקום של הסביבה ואת חותמת הזמן שבה נשמרת התמונה. לדוגמה,
gs://us-central1-example-916807e1-bucket/snapshots/example-project_us-central1_example-environment_2022-01-05T18-59-00.(אופציונלי) הארגומנט
--skip-pypi-packages-installationמדלג על ההתקנה של חבילות PyPI בהתאמה אישית מהתמונה. אם טוענים תמונת מצב של סביבה עם חבילות PyPI מותאמות אישית, חבילות מותאמות אישית כאלה לא מותקנות ב-Managed Airflow.
gcloud composer environments snapshots load \
DESTINATION_ENVIRONMENT_NAME \
--location LOCATION \
--snapshot-path "SNAPSHOT_PATH"
מחליפים את:
-
DESTINATION_ENVIRONMENT_NAMEבשם הסביבה שבה רוצים לטעון את התמונה. -
LOCATIONעם האזור שבו הסביבה ממוקמת. -
SNAPSHOT_PATHעם ה-URI של קטגוריה, ואחריו הנתיב לתמונת המצב.
דוגמה:
gcloud composer environments snapshots load \
example-environment \
--location us-central1 \
--snapshot-path "gs://us-central1-example-916807e1-bucket/snapshots/example-project_us-central1_example-environment_2022-01-05T18-59-00"
API
יוצרים בקשת API של
environments.loadSnapshot.בגוף הבקשה, בשדה
snapshotPath, מציינים את ה-URI של קטגוריית האחסון, ואחריו את הנתיב לתמונת המצב. שם התיקייה כולל את מזהה הפרויקט, את המיקום של הסביבה ואת חותמת הזמן שבה נשמרת התמונה. לדוגמה,gs://us-central1-example-916807e1-bucket/snapshots/example-project_us-central1_example-environment_2022-01-05T18-59-00.(אופציונלי) בגוף הבקשה, בשדה
skipPypiPackagesInstallation, מציינים אם Managed Airflow צריך לדלג על ההתקנה של חבילות PyPI מותאמות אישית מהתמונה. אם טוענים תמונת מצב של סביבה עם חבילות PyPI מותאמות אישית, חבילות מותאמות אישית כאלה לא מותקנות ב-Managed Airflow.השדה הזה הוא אופציונלי. אם לא מציינים את השדה הזה, חבילות PyPI מותקנות ב-Managed Airflow מהתמונה.
{
"snapshotPath": "SNAPSHOT_PATH"
}
מחליפים את:
-
SNAPSHOT_PATHב-URI של תיקיית קטגוריה שבה רוצים לאחסן את תמונת המצב.
דוגמה:
// POST https://composer.googleapis.com/v1/projects/example-project/
// locations/us-central1/environments/example-environment:loadSnapshot
{
"snapshotPath": "gs://us-central1-example-916807e1-bucket/snapshots/example-project_us-central1_example-environment_2022-01-05T18-59-00",
"skipPypiPackagesInstallation": "False"
}
Terraform
אי אפשר לשמור ולטעון תמונות מצב של סביבות באמצעות Terraform.
שמירה וטעינה של צילומים הן פעולות שמבוצעות בסביבה, והצילומים שמתקבלים לא נכללים בהגדרת הסביבה. מכיוון ש-Terraform מנהלת רק את ההגדרה של סביבת Managed Airflow, אי אפשר לשמור או לטעון ממנה תמונות מצב של הסביבה.