בדף הזה מוסבר איך ליצור הגדרות של סביבת פריסה לצינורות של תזמור.
מידע על סביבות פריסה
לפרויקט יכול להיות סביבת פריסה אחת או יותר. בהגדרות של כל סביבת פריסה מוגדר איך נפרסים צינורות ומשאבים ששייכים לסביבה הזו. לדוגמה, אפשר להגדיר סביבת פריסה אחת לפיתוח וסביבה אחרת לייצור. יכול להיות שבסביבות הפריסה האלה יש קבוצות נפרדות של צינורות עיבוד נתונים, והן פועלות בסביבות שונות של רצים.
לכל סביבת פריסה צריכה להיות סביבת הפעלה. Managed Airflow הוא מנוע התזמור שמפעיל את צינורות עיבוד הנתונים אחרי הפריסה שלהם. בגרסת Preview, סביבת הרצה נתמכת יחידה היא סביבת Managed Airflow שהקציתם לסביבת הפריסה.
אפשר לציין קטגוריית ארטיפקטים לסביבת פריסה. בדלי הזה יישמרו נכסי צינורות עם ניהול גרסאות, שצינורות מבצעים אותם, ותוצאות של פעולות מסוימות שמופקות לדלי של הארטיפקטים.
מידע על חבילות של צינורות עיבוד נתונים
צינורות עיבוד נתונים מסוג Orchestration נפרסים בחבילות של צינורות עיבוד נתונים. חבילת פייפליין מכילה פייפליין אחד או יותר ונכסי פייפליין שמשותף להם מחזור פריסה.
לכל חבילה יכולות להיות כמה גרסאות:
- כשפורסים חבילה, כל צינורות הנתונים והסקריפטים הנלווים בחבילת הגרסה הספציפית נפרסים יחד.
- יש בדיוק גרסה עדכנית אחת של החבילה (הגרסה שנפרסה כגרסה האחרונה), בעוד שהרצות נפרדות של צינורות שמופעלות עם גרסת קוד קודמת ימשיכו לפעול ללא הפרעה.
- אי אפשר להפעיל צינור עיבוד נתונים באופן ידני בגרסאות שונות מהגרסה הנוכחית.
- אם צינור נתונים נמחק מחבילה והגרסה החדשה של החבילה נפרסת, צינור הנתונים לא יפעל בגרסה החדשה, אבל ההרצות הקודמות שפועלות באופן פעיל ימשיכו.
לפני שמתחילים
- חשוב לוודא שכבר יצרתם סביבת הפעלה.
אתחול של פיגום חבילת צינור עיבוד הנתונים
ב-Orchestration Pipelines יש פקודה ב-CLI של gcloud שמאפשרת לאתחל תשתית לצינורות של תזמור במאגר.
הפיגום מכיל את הרכיבים הבאים:
-
orchestration-pipeline.yaml: הגדרה לדוגמה של פייפליין שמכילה לוח זמנים, אבל לא פעולות מוגדרות. -
deployment.yaml: הגדרת פריסה לדוגמה של צינור עיבוד נתונים שמגדירה איך צריך לפרוס את צינור עיבוד הנתונים. מכיל הגדרות של סביבת ההפעלה, של קטגוריית פריטי ה-Artifact ושל כל המשאבים האחרים שמשמשים את פעולות צינור עיבוד הנתונים. -
.github/workflows/validate.yaml: דוגמה לפעולה ב-GitHub שמאמתת את צינור העיבוד כשנוצרת בקשת משיכה להסתעפותmain. -
.github/workflows/deploy.yaml: דוגמה ל-GitHub Action שפורס את צינור הנתונים כשממזגים שינויים עם הענףmainבמאגר GitHub.
כדי לאתחל צינור להעברת נתונים:
עוברים למאגר או לספריית הפרויקט. הפקודה תיצור קבצים חדשים בספרייה שבה מפעילים פתרונות חכמים.
מריצים ב-CLI של gcloud את הפקודה הבאה:
gcloud beta orchestration-pipelines init PIPELINE_NAME \ --environment DEPLOYMENT_ENVIRONMENT \ --composer-environment RUNNER_ENVIRONMENT \ --artifacts-bucket ARTIFACTS_BUCKET_NAME \ --project PROJECT_ID \ --region REGION \ --service-account SERVICE_ACCOUNTמחליפים את מה שכתוב בשדות הבאים:
-
PIPELINE_NAME: שם לצינור הראשון. -
DEPLOYMENT_ENVIRONMENT: שם לסביבת הפריסה הראשונית. -
RUNNER_ENVIRONMENT: השם של סביבת ההפעלה. -
ARTIFACTS_BUCKET_NAME: קטגוריה של Cloud Storage שתשמש לאחסון ארטיפקטים של פעולות בצינור, ללא הקידומתgs://. -
PROJECT_ID: מזהה הפרויקט של Google Cloud פרויקט שבו נמצאת סביבת ה-Runner. -
REGION: האזור שבו נמצאת סביבת ההרצה.
SERVICE_ACCOUNT: חשבון השירות שיוגדר מראש כמשתנה. מגדירים את הערך הזה לחשבון השירות של סביבת ה-Runner. אפשר להשתמש במשתנה הזה בהגדרות של צינורות ובפרופילים של משאבים. לדוגמה, כערך של הפרמטרimpersonationChainבפעולות שמשתמשות בשרשרת התחזות.אפשר לקבל את חשבון השירות של סביבת ה-Runner על ידי צפייה בפרטי הסביבה. ב-CLI של gcloud, חשבון השירות של הסביבה מסופק במפתח
nodeConfig.serviceAccount.
דוגמה:
gcloud beta orchestration-pipelines init example-pipeline \ --environment development \ --composer-environment production-runner-us-central1 \ --artifacts-bucket production-artifacts \ --project example-production-project \ --region us-central1 \ --service-account example-account@example-project.iam.gserviceaccount.com-
הוספת הגדרות לסביבת ההפעלה של הרץ
סביבת ה-Runner מצוינת במפתח composer_environment של סביבת פריסה. אם אתם משתמשים בכמה סביבות פריסה, אתם יכולים לציין סביבת runner נפרדת לכל אחת מהן.
השם של סביבת ההפעלה במפתח composer_environment, יחד עם המפתחות project ו-region בהגדרות של סביבת הפיתוח, מציינים את סביבת ההפעלה שבה הצינור נפרס.
בדוגמה הבאה מוצג תהליך הוספה של סביבת הפעלה של ראנר בשם example-runner-environment שנמצאת באזור us-central1, בפרויקט example-development-project:
environments:
example-development-environment:
project: "example-development-project"
region: "us-central1"
composer_environment: "example-runner-environment"
...
שינוי ההגדרה של סביבת ההרצה
אתם יכולים להגדיר את סביבת ה-Runner בדיוק כמו כל סביבה אחרת של Managed Service for Apache Airflow:
- מתקינים תלות של Python, למשל, כדי להריץ את סקריפטים של Python בצינור באופן מקומי בסביבת הרץ.
- להרחיב את סביבות העבודה כדי לספק יותר או פחות משאבים, או לשנות את האופן שבו סביבת ההרצה צריכה להרחיב את העובדים של Airflow.
- Override Airflow configuration options כדי להגדיר את Airflow.
הוספת נכסים של צינור עיבוד הנתונים והגדרת פעולות
עורכים את קובץ ההגדרה של צינור עיבוד הנתונים כדי לכלול פעולות ונכסים של צינור עיבוד הנתונים:
- במאמר Orchestration Pipelines DSL reference מופיעות דוגמאות קוד ותיאורים של פרמטרים של פעולות.
- דוגמה מפורטת יותר זמינה במאמר יצירת צינורות להעברת נתונים במסמכי ההרחבה של Google Cloud Data Agent Kit.
דוגמה לפעולה של Hello world
זו דוגמה לפעולה מינימלית בצינור עיבוד נתונים. אפשר להשתמש בו כדי לבדוק את התצורה של סביבת הפריסה.
מוסיפים את הפעולה הבאה לצינור ה-scaffolding, ומחליפים את
actions: []:actions: - python: name: "hello_world_script_run" executionTimeout: "30m" mainFilePath: "scripts/hello_world.py" pythonCallable: "main" engine: local: {}יוצרים ספריית משנה חדשה בשם
scriptsבמאגר ושומרים את הקובץ הבא בשם/scripts/hello_world.py:def main(): print("Hello, World!")
אימות צינורות עיבוד נתונים
פקודת האימות בודקת את התחביר ואת נכונות הסוג של קובצי ההגדרה של צינור הנתונים, וגם מבצעת בדיקות סמנטיות למשאבים כמוGoogle Cloud project וסביבת Managed Service for Apache Airflow בקובצי הגדרת הפריסה ובקובצי ההגדרה של צינור הנתונים.
כברירת מחדל, מתבצע אימות מלא של כל סביבות הפריסה, כולל פנייה לסביבות של רצים מרוחקים. אפשר לאמת חלקים ספציפיים בהגדרת הפריסה באמצעות הפרמטרים הבאים:
-
--mode: מוגדר ל-syntax-onlyכדי שלא יגיע לסביבות של הפעלת תהליכים מרחוק. ערך ברירת המחדל הואfull. -
--environment: אימות של סביבה ספציפית בלבד. -
--pipeline-paths: רשימה מופרדת בפסיקים של נתיבים לקובצי הגדרות של צינורות להעברת נתונים שצריך לאמת. -
--substitutionsו---substitutions-file: substituteפרמטרים של הגדרת פריסה במהלך האימות.
אפשר להריץ את הפקודה הזו כבדיקה מהירה לפני פריסת גרסאות מקומיות של צינור עיבוד הנתונים, וגם כפעולת GitHub כחלק מתהליך העבודה של CI/CD.
כדי לאמת את צינורות העברת הנתונים, מריצים את הפקודה הבאה במאגר:
gcloud beta orchestration-pipelines validate
פריסת חבילת צינור עיבוד נתונים
בקטע הזה מתוארות דרכים שונות לפריסת צינורות.
יש שתי דרכים לפרוס את חבילות הצינורות ב-Orchestration Pipelines. הגישות האלה מיועדות לפעול יחד בשלבים שונים של תהליך העבודה של הפיתוח וההפצה:
פריסת גרסה מקומית של חבילה: פריסת הגרסאות הנוכחיות של נכסי צינור עיבוד הנתונים, הגדרות צינור עיבוד הנתונים והגדרת הפריסה. מזהה החבילה החדש ייווצר אוטומטית על סמך שם סביבת העבודה ו-MD5 של הקבצים בחבילה.
סוג הפריסה הזה מיועד למטרות פיתוח. מומלץ גם ליצור הגדרת פריסה נפרדת שפורסת את צינורות עיבוד הנתונים בסביבת Staging של רץ.
פריסת שינויים שאושרו: אחרי שמאשרים שינויים בנכסי צינור הנתונים, בהגדרות צינור הנתונים ובהגדרות הפריסה, אפשר לפרוס גרסה חדשה של חבילת צינור הנתונים בסביבת ההרצה. המזהה של החבילה החדשה יקושר ל-SHA של ה-commit ב-git במאגר.
סוג הפריסה הזה מיועד להפעלה כחלק מ-CI/CD, למשל באמצעות GitHub Action. אפשר גם לפרוס שינויים שבוצעו ממאגר Git מקומי.
Orchestration Pipelines תומכים בכמה דרכים להחלפת פרמטרים בקובצי ההגדרה והפריסה של הפייפליינים. זה יכול להיות שימושי כשפורסים פייפליינים גם לפיתוח מקומי וגם לפקודות שמופעלות בפעולות של GitHub. לדוגמה, אפשר להחליף פרמטרים באמצעות הארגומנט --substitutions בפקודות של ה-CLI של gcloud, או על ידי הגדרת משתנה סביבה, או על ידי קבלת הערך מתוך סודות של GitHub.
הרצת פקודות פריסה
מקומי
כדי לפרוס גרסה מקומית של חבילה, משתמשים בארגומנט --local:
gcloud beta orchestration-pipelines deploy \
--environment DEPLOYMENT_ENVIRONMENT \
--local
מחליפים את מה שכתוב בשדות הבאים:
-
DEPLOYMENT_ENVIRONMENT: סביבת הפריסה של צינור עיבוד הנתונים.
דוגמה:
gcloud beta orchestration-pipelines deploy \
--environment example-deployment-environment \
--local
פלט לדוגמה שמכיל את השם והגרסה של חבילת צינור העיבוד ואת סטטוס הפריסה:
Bundle ID: bundle-local-example-orchestrationpipelines
Version ID: local-14776d43ebba
...
--- Pipeline Deployment Status ---
Pipeline 'example-pipeline': [OK] (Status: HEALTHY)
--- Pipeline Deployment full details ---
...
מחויבות
כדי לפרוס שינויים, מוודאים שהשינויים נשמרו במאגר. מריצים את הפקודה הבאה ב-CLI של gcloud:
gcloud beta orchestration-pipelines deploy \
--environment DEPLOYMENT_ENVIRONMENT
מחליפים את מה שכתוב בשדות הבאים:
-
DEPLOYMENT_ENVIRONMENT: סביבת הפריסה של צינור עיבוד הנתונים.
דוגמה:
gcloud beta orchestration-pipelines deploy \
--environment example-deployment-environment
פלט לדוגמה שמכיל את השם והגרסה של חבילת צינור העיבוד ואת סטטוס הפריסה:
Bundle ID: bundle-local-example-orchestrationpipelines
Version ID: local-14776d43ebba
...
--- Pipeline Deployment Status ---
Pipeline 'example-pipeline': [OK] (Status: HEALTHY)
--- Pipeline Deployment full details ---
...
פעולת GitHub
בפיגום של צינור עיבוד הנתונים יש שתי פעולות לדוגמה ב-GitHub שיכולות לעזור לכם להתחיל לפרוס ולאמת את צינורות עיבוד הנתונים באמצעות פעולה ב-GitHub. כשמעלים את הקבצים האלה ל-GitHub, המאגר מוגדר עם הפעולות האלה. מידע על הגדרת פעולות מורכבות יותר ב-GitHub זמין במאמר Deploying with GitHub Actions (פריסה באמצעות פעולות ב-GitHub) במסמכי התיעוד של GitHub.
כדי להשתמש בפעולות לדוגמה ב-GitHub:
יוצרים חשבון שירות נפרד שיריץ פקודות ב-CLI של gcloud מ-GitHub Actions.
מקצים תפקידים שמאפשרים להריץ פקודות פריסה ואימות לחשבון השירות הזה.
יוצרים מפתח של חשבון שירות לחשבון השירות הזה.
מוסיפים את הסוד
GCP_SA_KEYלמאגר ב-GitHub ומגדירים את הערך שלו למפתח של חשבון השירות שנוצר. מידע נוסף על הוספת סודות זמין במאמר שימוש בסודות ב-GitHub Actions.
הגדרת התצורה של פריסה
בקטע הזה מוסבר על הגדרות נוספות שאפשר להחיל על סביבת פריסה.
הוספה או הסרה של עוד צינורות
כדי להוסיף עוד צינור לקבוצת פריסה קיימת:
- מוסיפים קובץ הגדרה של צינור וקובצי נכסים של צינור למאגר.
- בהגדרת הפריסה, מוסיפים מפתח
sourceחדש עם הערך שמפנה לקובץ החדש של הגדרת צינור העיבוד.
דוגמה:
environments:
dev:
...
pipelines:
- source: example-pipeline.yaml
- source: another-pipeline.yaml
כדי להסיר צינור:
- בהגדרת הפריסה, מסירים את המפתח
sourceשל צינור הנתונים. - מסירים את קובץ הגדרת הפייפליין ואת נכסי הפייפליין מהמאגר.
- מפעילים את הגרסה החדשה של צינור הנתונים. הצינור לא יופיע בגרסה החדשה של ה-Bundle.
הוספת סביבת פריסה נוספת
כדי להוסיף עוד סביבת פריסה:
- בקטע ההגדרות של הפריסה, מוסיפים מפתח חדש למיפוי
environments. - חשוב לוודא שהגדרת הפריסה והגדרות צינור העיבוד משתמשות במשתנים ובמשתני הגדרת פריסה כדי להפעיל פעולות של צינור עיבוד שדורשות הבחנה בין משאבים ששייכים לכל סביבה. Google Cloud
דוגמה:
environments:
example-development-environment:
project: "example-development-project"
region: "us-central1"
composer_environment: "development-runner-us-central1"
...
variables:
service_account: "another-service-account@example-development-project.iam.gserviceaccount.com"
...
example-production-environment:
project: "example-production-project"
region: "us-central1"
composer_environment: "production-runner-us-central1"
...
variables:
service_account: "example-account@example-project.iam.gserviceaccount.com"
משתנים, סודות והחלפה
אחרי שמגדירים משתנים בהגדרת הפריסה, אפשר להשתמש בהם בהגדרות של צינורות ובפרופילים של משאבים.
הוספת משתנים מותאמים אישית
אפשר להוסיף משתנים משלכם למפתח variables בהגדרת הפריסה:
- בסביבת התצורה של הפריסה, מוסיפים את המפתח
variables. - מוסיפים מיפוי של שמות וערכים של משתנים.
- כדי לקבל את ערך המשתנה בהגדרות של צינורות ובפרופילים של משאבים, מקיפים את שם המשתנה בסוגריים מסולסלים כפולים:
{{ example_variable }}.
בדוגמה הבאה מוגדרים אותם משתנים בשתי סביבות פריסה.
environments:
example-development-environment:
project: "example-development-project"
region: "us-central1"
composer_environment: "development-runner-us-central1"
artifact_storage:
bucket: "development-artifacts"
path_prefix: pipelines
pipelines:
- source: example-pipeline.yaml
variables:
service_account: "another-service-account@example-development-project.iam.gserviceaccount.com"
network_uri: projects/example-development-project/global/networks/default
example-production-environment:
project: "example-production-project"
region: "us-central1"
composer_environment: "production-runner-us-central1"
artifact_storage:
bucket: "production-artifacts"
path_prefix: pipelines
pipelines:
- source: example-pipeline.yaml
variables:
service_account: "example-account@example-project.iam.gserviceaccount.com"
network_uri: projects/example-production-project/global/networks/vpc-main
זוהי דוגמה לפרופיל משאבים של Managed Service for Apache Spark שקורא את המשתנים האלה. פעולות בקובץ הגדרת צינור העברת הנתונים (example-pipeline.yaml) יכולות להשתמש באותו פרופיל משאבים, ולא צריך לבצע התאמות בין סביבות הייצור והפיתוח.
profileId: serverless-standard
type: dataproc.session
definition:
environmentConfig:
execution_config:
service_account: "{{ service_account }}"
network_uri: "{{ network_uri }}"
גישה לפרמטרים של הגדרת הפריסה
חלק מהפרמטרים של הגדרות הפריסה זמינים גם כמשתנים:
projectregioncomposer_environment-
COMMIT_SHA: ה-SHA הנוכחי של הקומיט במאגר Git. אפשר להשתמש במשתנה הזה, למשל, על ידי החלפת הערך שלו כשפורסים גרסה של חבילת צינור מקומי. כך, פעולות שתלויות בערך ה-SHA של הקומיט ימשיכו לפעול על תוכן הקובץ הנכון.
בדוגמה הבאה, הגדרת צינור עיבוד הנתונים קובעת ערכי ברירת מחדל לפעולות של צינור עיבוד הנתונים על סמך פרמטרים של הגדרת הפריסה project ו-region.
pipelineId: example-pipeline
description: Example pipeline
runner: 'airflow'
owner: 'data-eng-team'
modelVersion: '1.0'
defaults:
projectId: {{ project }}
location: {{ region }}
executionConfig:
retries: 1
גישה לסודות של GitHub Action
אפשר להשתמש בסודות של GitHub בהגדרת צינור עיבוד הנתונים ובקובצי ההגדרות של הפריסה. כשפורסים צינור עיבוד נתונים באמצעות פעולת GitHub, הערכים של הסודות האלה מועברים להגדרות של צינור עיבוד הנתונים ולהגדרות הפריסה.
כדי ליצור סוד שיהיה נגיש במהלך הפריסה:
ב-GitHub, מוסיפים סוד עם הקידומת
DEPLOY_VAR_. דוגמה:DEPLOY_VAR_API_KEY.מידע נוסף על יצירת סודות זמין במאמר Using secrets in GitHub Actions במאמרי העזרה של GitHub.
מוסיפים את אותו משתנה סביבה לתהליך העבודה ב-GitHub. קריאת הערך של המשתנה הזה מסודות GitHub.
דוגמה:
jobs: deploy: runs-on: ubuntu-latest env: DEPLOY_VAR_API_KEY: ${{ secrets.API_KEY }} steps: ...מידע נוסף על הוספת משתני סביבה לתהליכי עבודה זמין במאמר Store information in variables במאמרי העזרה של GitHub.
משתמשים בשם המשתנה (ללא הקידומת
DEPLOY_VAR_) בקובצי ההגדרה של צינור הנתונים ובהגדרת הפריסה. דוגמה:{{ API_KEY }}.(אופציונלי) כדי לפרוס גרסה מקומית של צינור שמשתמש בסודות של GitHub, אפשר להחליף את משתני הסביבה
DEPLOY_VAR_*מהסוד באמצעות פרמטרים של שורת הפקודה, או להגדיר אותם בסביבה שבה מריצים פקודות פריסה.
החלפת משתנים באמצעות פרמטרים של שורת פקודה
פקודות הפריסה של ה-CLI של gcloud תומכות בארגומנט --substitutions, שבו אפשר להשתמש כדי לשנות או להגדיר משתנים להגדרות הפריסה ולהגדרות של הפייפליינים.
כדי להחליף משתנים באמצעות פרמטרים של שורת פקודה, צריך לספק את רשימת המשתנים והערכים שלהם בשורת הפקודה:
דוגמה:
gcloud beta orchestration-pipelines deploy \
--environment example-deployment-environment \
--local \
--substitutions=VARIABLE_NAME_1=value_1,VARIABLE_NAME_2=value_2
אפשר גם לשמור את ההחלפות בקובץ YAML ולציין אותו בארגומנט --substitutions-file:
gcloud beta orchestration-pipelines deploy \
--environment example-deployment-environment \
--local \
--substitutions-file=substitutions.yaml
בקובץ ההחלפות, מספקים מיפוי של משתנים:
VARIABLE_NAME_1: value_1
VARIABLE_NAME_2: value_2
אפשר להשתמש בשם המשתנה בקובצי ההגדרה של צינור עיבוד הנתונים ובהגדרות הפריסה. דוגמה: {{ VARIABLE_NAME_1 }}
העברה והחלפה של משתנים באמצעות משתני סביבה
בהגדרות הפריסה ובהגדרות של צינורות עיבוד הנתונים אפשר להשתמש במשתני סביבה עם הקידומת DEPLOY_VAR_.
מגדירים משתנה סביבה:
export DEPLOY_VAR_VARIABLE_NAME_1=value_1אפשר להשתמש בשם המשתנה (בלי הקידומת
DEPLOY_VAR_) בקובצי ההגדרה של צינור הנתונים ובהגדרת הפריסה. דוגמה:{{ VARIABLE_NAME_1 }}.