Batch הוא שירות שמנוהל במלואו שמאפשר לתזמן, להוסיף לתור ולהפעיל עומסי עבודה של עיבוד באצווה במכונות וירטואליות (VM) של Compute Engine. Batch מקצה משאבים ומנהל את הקיבולת בשמכם, וכך מאפשר לעומסי העבודה שלכם באצווה לפעול בהיקף גדול.
Workflows מאפשרת להפעיל את השירותים שאתם צריכים בסדר שאתם מגדירים, באמצעות התחביר של Workflows.
במדריך הזה משתמשים במחבר Workflows ל-Batch כדי לתזמן ולהריץ משימה באצווה של Batch שמבצעת שש משימות במקביל בשתי מכונות וירטואליות ב-Compute Engine. שימוש גם ב-Batch וגם ב-Workflows מאפשר לכם לשלב את היתרונות של שתי התכונות, ולספק ולתזמן את כל התהליך בצורה יעילה.
מטרות
במדריך הזה תלמדו:- יוצרים מאגר ב-Artifact Registry לקובץ אימג' של קונטיינר Docker.
- מקבלים את הקוד של עומס העבודה של עיבוד ברצף (batch processing) מ-GitHub: תוכנית לדוגמה שמייצרת מספרים ראשוניים באצוות של 10,000.
- יוצרים את קובץ האימג' של Docker עבור עומס העבודה.
- פורסים ומריצים תהליך עבודה שמבצע את הפעולות הבאות:
- יוצרים קטגוריה של Cloud Storage לאחסון התוצאות של מחולל המספרים הראשוניים.
- מתזמן ומריץ משימה באצווה שמריצה את קונטיינר Docker כשש משימות במקביל בשתי מכונות וירטואליות של Compute Engine.
- אפשרות למחוק את משימת האצווה אחרי שהיא מסתיימת.
- מוודאים שהתוצאות הן כצפוי ושהקבוצות של המספרים הראשוניים שנוצרו מאוחסנות ב-Cloud Storage.
אפשר להריץ את רוב הפקודות הבאות במסוף Google Cloud , או להריץ את כל הפקודות באמצעות Google Cloud CLI בטרמינל או ב-Cloud Shell.
עלויות
במסמך הזה משתמשים ברכיבים הבאים של Google Cloud, והשימוש בהם כרוך בתשלום:
כדי להעריך את ההוצאות בהתאם לתחזית השימוש שלכם, אתם יכולים להיעזר במחשבון העלויות.
לפני שמתחילים
יכול להיות שהגבלות אבטחה שהוגדרו בארגון שלכם ימנעו מכם להשלים את השלבים הבאים. מידע לפתרון בעיות זמין במאמר פיתוח אפליקציות בסביבה מוגבלת. Google Cloud
המסוף
בדף לבחירת הפרויקט במסוף Google Cloud , בוחרים פרויקט ב- Google Cloud או יוצרים אותו.
מוודאים שהחיוב מופעל בפרויקט Google Cloud . כך בודקים אם החיוב מופעל בפרויקט
מפעילים את ממשקי ה-API של Artifact Registry, Batch, Cloud Build, Compute Engine, Workflow Executions ו-Workflows.
יוצרים חשבון שירות כדי שהתהליך העסקי יוכל להשתמש בו לאימות עם שירותים אחרים Google Cloud ומקצים לו את התפקידים המתאימים:
במסוף Google Cloud , נכנסים לדף יצירת חשבון שירות.
בוחרים את הפרויקט הרצוי.
כותבים שם בשדה Service account name. השדה Service account ID ימולא במסוף Google Cloud בהתאם לשם הזה.
כותבים תיאור בשדה Service account description. לדוגמה,
Service account for tutorial.לוחצים על Create and continue.
ברשימה Select a role, מסננים את התפקידים הבאים כדי להעניק אותם לחשבון השירות שמנוהל על ידי המשתמש שיצרתם בשלב הקודם:
- עורך משימות באצווה: לעריכת משימות באצווה.
- בעל הרשאת כתיבה של יומנים: כדי לכתוב יומנים.
- אדמין לניהול נפח האחסון: כדי לשלוט במשאבים של Cloud Storage.
כדי להוסיף עוד תפקידים, לוחצים על Add another role ומוסיפים אותם אחד אחרי השני.
לוחצים על Continue.
כדי לסיים את יצירת החשבון, לוחצים על סיום.
מקצים את התפקיד Service Account User ב-IAM בחשבון השירות שמוגדר כברירת מחדל לחשבון השירות שמנוהל על ידי משתמש שנוצר בשלב הקודם. אחרי שמפעילים את Compute Engine API, חשבון השירות שמוגדר כברירת מחדל הוא חשבון השירות של Compute Engine שמוגדר כברירת מחדל (
PROJECT_NUMBER-compute@developer.gserviceaccount.com), וההרשאה מוקצית בדרך כלל באמצעות התפקידroles/iam.serviceAccountUser.בדף Service Accounts, לוחצים על כתובת האימייל של חשבון השירות שמוגדר כברירת מחדל (
PROJECT_NUMBER-compute@developer.gserviceaccount.com).לוחצים על הכרטיסייה Permissions.
לוחצים על הלחצן Grant access.
כדי להוסיף חשבון משתמש חדש, מזינים את כתובת האימייל של חשבון השירות (
SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com).ברשימה Select a role בוחרים בתפקיד Service Accounts > Service Account User.
לוחצים על Save.
gcloud
במסוף Google Cloud , מפעילים את Cloud Shell.
בחלק התחתון של Google Cloud המסוף יתחיל סשן של Cloud Shell ותופיע הודעה של שורת הפקודה. Cloud Shell היא סביבת מעטפת שבה ה-CLI של Google Cloud מותקן ומוגדרים ערכים לפרויקט הקיים. הסשן יופעל תוך כמה שניות.
מוודאים שהחיוב מופעל בפרויקט Google Cloud . כך בודקים אם החיוב מופעל בפרויקט
מפעילים את ממשקי ה-API של Artifact Registry, Batch, Cloud Build, Compute Engine Workflow Executions ו-Workflows.
gcloud services enable artifactregistry.googleapis.com \ batch.googleapis.com \ cloudbuild.googleapis.com \ compute.googleapis.com \ workflowexecutions.googleapis.com \ workflows.googleapis.com
יוצרים חשבון שירות שהתהליך העסקי ישתמש בו לאימות מול שירותים אחרים Google Cloud ומקצים לו את התפקידים המתאימים.
יוצרים את חשבון השירות:
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
מחליפים את הערך
SERVICE_ACCOUNT_NAMEבשם שרוצים לתת לחשבון השירות.נותנים תפקידים לחשבון השירות בניהול המשתמשים שיצרתם בשלב הקודם. מריצים את הפקודה הבאה לכל אחד מהתפקידים הבאים ב-IAM:
-
roles/batch.jobsEditor: כדי לערוך עבודות אצווה. -
roles/logging.logWriter: כדי לכתוב יומנים. -
roles/storage.admin: כדי לשלוט במשאבי Cloud Storage.
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \ --role=ROLE
מחליפים את מה שכתוב בשדות הבאים:
PROJECT_ID: מזהה הפרויקט שבו יצרתם את חשבון השירותROLE: התפקיד שאתם רוצים לתת
-
נותנים את התפקיד 'משתמש בחשבון שירות' ב-IAM לחשבון השירות שנוצר בשלב הקודם בניהול המשתמשים בחשבון השירות שמוגדר כברירת מחדל. אחרי שמפעילים את Compute Engine API, חשבון השירות שמוגדר כברירת מחדל הוא חשבון השירות של Compute Engine שמוגדר כברירת מחדל (
PROJECT_NUMBER-compute@developer.gserviceaccount.com), וההרשאה מוקצית בדרך כלל דרך התפקידroles/iam.serviceAccountUser.PROJECT_NUMBER=$(gcloud projects describe PROJECT_ID --format='value(projectNumber)') gcloud iam service-accounts add-iam-policy-binding \ $PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --member=serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/iam.serviceAccountUser
יצירת מאגר Artifact Registry
יוצרים מאגר לאחסון קובץ האימג' של קונטיינר Docker.
המסוף
נכנסים לדף Repositories במסוף Google Cloud .
לוחצים על Create Repository (יצירת מאגר).
מזינים containers כשם המאגר.
בקטע פורמט, בוחרים באפשרות Docker.
בקטע Location Type, בוחרים באפשרות Region.
ברשימה Region בוחרים באפשרות us-central1.
לוחצים על יצירה.
gcloud
מריצים את הפקודה הבאה:
gcloud artifacts repositories create containers \
--repository-format=docker \
--location=us-central1
יצרתם מאגר Artifact Registry בשם containers באזור us-central1. מידע נוסף על אזורים נתמכים זמין במאמר מיקומים של Artifact Registry.
קבלת דוגמאות קוד
Google Cloud מאחסן את קוד המקור של האפליקציה עבור המדריך הזה ב-GitHub. אפשר לשכפל את המאגר או להוריד את הדוגמאות.
משכפלים את מאגר האפליקציה לדוגמה ומעבירים אותו למכונה המקומית:
git clone https://github.com/GoogleCloudPlatform/batch-samples.gitאפשר גם להוריד את הדוגמאות בקובץ
main.zipולחלץ אותו.עוברים לספרייה שמכילה את הקוד לדוגמה:
cd batch-samples/primegen
עכשיו יש לכם את קוד המקור של האפליקציה בסביבת הפיתוח.
יצירת קובץ אימג' של Docker באמצעות Cloud Build
הקובץ Dockerfile מכיל את המידע שנדרש כדי ליצור קובץ אימג' של Docker באמצעות Cloud Build. מריצים את הפקודה הבאה כדי לבנות אותו:
gcloud builds submit \
-t us-central1-docker.pkg.dev/PROJECT_ID/containers/primegen-service:v1 PrimeGenService/
מחליפים את PROJECT_ID במזהה הפרויקט ב- Google Cloud.
בסיום ה-build, הפלט אמור להיראות כך:
DONE
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
ID: a54818cc-5d14-467b-bfda-5fc9590af68c
CREATE_TIME: 2022-07-29T01:48:50+00:00
DURATION: 48S
SOURCE: gs://project-name_cloudbuild/source/1659059329.705219-17aee3a424a94679937a7200fab15bcf.tgz
IMAGES: us-central1-docker.pkg.dev/project-name/containers/primegen-service:v1
STATUS: SUCCESS
יצרתם קובץ אימג' של Docker בשם primegen-service באמצעות Dockerfile, והעברתם את קובץ האימג' בדחיפה למאגר Artifact Registry בשם containers.
פריסת תהליך עבודה שמתזמן ומריץ משימה באצווה
בתרשים זרימת העבודה הבא מתוזמנת ומופעלת משימת Batch שמריצה קונטיינר Docker כשש משימות במקביל בשתי מכונות וירטואליות של Compute Engine. התוצאה היא יצירה של שש קבוצות של מספרים ראשוניים, שמאוחסנות בקטגוריה של Cloud Storage.
המסוף
נכנסים לדף Workflows במסוף Google Cloud .
לוחצים על Create.
מזינים שם לתהליך העבודה החדש, למשל
batch-workflow.ברשימה Region בוחרים באפשרות us-central1.
בוחרים את חשבון השירות שיצרתם קודם.
לוחצים על הבא.
בעורך תהליכי העבודה, מזינים את ההגדרה הבאה לתהליך העבודה:
YAML
JSON
לוחצים על פריסה.
gcloud
יוצרים קובץ קוד מקור לתהליך העבודה:
touch batch-workflow.JSON_OR_YAMLמחליפים את
JSON_OR_YAMLב-yamlאו ב-json, בהתאם לפורמט של תהליך העבודה.בכלי לעריכת טקסט, מעתיקים את זרימת העבודה הבאה לקובץ קוד המקור:
YAML
JSON
מריצים את הפקודה הבאה כדי לפרוס את תהליך העבודה:
gcloud workflows deploy batch-workflow \ --source=batch-workflow.yaml \ --location=us-central1 \ --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
מחליפים את
SERVICE_ACCOUNT_NAMEבשם של חשבון השירות שיצרתם קודם.
ביצוע תהליך העבודה
כשמריצים תהליך עבודה, מופעלת ההגדרה הנוכחית של תהליך העבודה שמשויכת ל-workflow.
המסוף
נכנסים לדף Workflows במסוף Google Cloud .
בדף Workflows, לוחצים על זרימת העבודה batch-workflow כדי לעבור לדף הפרטים שלה.
בדף פרטי תהליך העבודה, לוחצים על play_arrow הפעלה.
לוחצים שוב על Execute.
ההרצה של תהליך העבודה אמורה להימשך כמה דקות.
אפשר לראות את התוצאות של תהליך העבודה בחלונית פלט.
התוצאות אמורות להיראות כך:
{ "bucket": "project-name-job-primegen-TIMESTAMP", "jobId": "job-primegen-TIMESTAMP" }
gcloud
מריצים את תהליך העבודה:
gcloud workflows run batch-workflow \ --location=us-central1
ההרצה של תהליך העבודה אמורה להימשך כמה דקות.
כדי לקבל את הסטטוס של הביצוע האחרון שהושלם, מריצים את הפקודה הבאה:
gcloud workflows executions describe-last
התוצאות אמורות להיות דומות לתוצאות הבאות:
name: projects/PROJECT_NUMBER/locations/us-central1/workflows/batch-workflow/executions/EXECUTION_ID result: '{"bucket":"project-name-job-primegen-TIMESTAMP","jobId":"job-primegen-TIMESTAMP"}' startTime: '2022-07-29T16:08:39.725306421Z' state: SUCCEEDED status: currentSteps: - routine: main step: returnResult workflowRevisionId: 000001-9ba
הצגת רשימת האובייקטים בקטגוריית הפלט
כדי לוודא שהתוצאות הן כמו שציפיתם, אתם יכולים להציג את רשימת האובייקטים בקטגוריית הפלט של Cloud Storage.
המסוף
- במסוף Google Cloud , נכנסים לדף Buckets של Cloud Storage.
ברשימת הקטגוריות, לוחצים על השם של הקטגוריה שאת התוכן שלה רוצים לראות.
התוצאות צריכות להיות דומות לתוצאות הבאות, עם שישה קבצים בסך הכול, וכל קובץ מציג קבוצה של 10,000 מספרים ראשוניים:
primes-1-10000.txt primes-10001-20000.txt primes-20001-30000.txt primes-30001-40000.txt primes-40001-50000.txt primes-50001-60000.txt
gcloud
מאחזרים את שם קטגוריית הפלט:
gcloud storage ls
הפלט אמור להיראות כך:
gs://PROJECT_ID-job-primegen-TIMESTAMP/
הצגת רשימת האובייקטים בקטגוריית הפלט:
gcloud storage ls gs://PROJECT_ID-job-primegen-TIMESTAMP/** --recursive
מחליפים את
TIMESTAMPבחותמת הזמן שהוחזרה מהפקודה הקודמת.הפלט צריך להיות דומה לזה שבהמשך, עם שישה קבצים בסך הכול, וכל קובץ מציג קבוצה של 10,000 מספרים ראשוניים:
gs://project-name-job-primegen-TIMESTAMP/primes-1-10000.txt gs://project-name-job-primegen-TIMESTAMP/primes-10001-20000.txt gs://project-name-job-primegen-TIMESTAMP/primes-20001-30000.txt gs://project-name-job-primegen-TIMESTAMP/primes-30001-40000.txt gs://project-name-job-primegen-TIMESTAMP/primes-40001-50000.txt gs://project-name-job-primegen-TIMESTAMP/primes-50001-60000.txt
הסרת המשאבים
אם יצרתם פרויקט חדש בשביל המדריך הזה, תמחקו את הפרויקט. אם השתמשתם בפרויקט קיים ואתם רוצים לשמור אותו בלי השינויים שנוספו במדריך הזה, תצטרכו למחוק את המשאבים שנוצרו לצורך המדריך.
מחיקת הפרויקט
הדרך הקלה ביותר לבטל את החיוב היא למחוק את הפרויקט שיצרתם בשביל המדריך הזה.
כדי למחוק את הפרויקט:
- במסוף Google Cloud , נכנסים לדף Manage resources.
- ברשימת הפרויקטים, בוחרים את הפרויקט שרוצים למחוק ולוחצים על Delete.
- כדי למחוק את הפרויקט, כותבים את מזהה הפרויקט בתיבת הדו-שיח ולוחצים על Shut down.
מחיקת משאבים שנוצרו במדריך הזה
מחיקת משימה באצווה:
קודם מאחזרים את שם המשרה:
gcloud batch jobs list --location=us-central1
הפלט אמור להיראות כך:
NAME: projects/project-name/locations/us-central1/jobs/job-primegen-TIMESTAMP STATE: SUCCEEDED
כאשר
job-primegen-TIMESTAMPהוא שם העבודה של Batch.מחיקת המשימה:
gcloud batch jobs delete BATCH_JOB_NAME --location us-central1
מחיקת תהליך העבודה:
gcloud workflows delete WORKFLOW_NAME
מחיקת מאגר הקונטיינרים:
gcloud artifacts repositories delete REPOSITORY_NAME --location=us-central1
ב-Cloud Build משתמשים ב-Cloud Storage כדי לאחסן משאבי build. כדי למחוק קטגוריה של Cloud Storage, אפשר לעיין במאמר בנושא מחיקת קטגוריות.