במאמר הזה מוסבר איך ליצור משימה באצווה ששולחת התראות Pub/Sub. אפשר להשתמש ב-Pub/Sub כדי לקבל התראות כשמצב של עבודה או משימה משתנה, או כשעבודה או משימה עוברות למצב ספציפי. מידע נוסף זמין במאמר מעקב אחרי משימות באמצעות התראות.
לפני שמתחילים
- אם עוד לא השתמשתם ב-Batch, כדאי לעיין במאמר תחילת העבודה עם Batch ולהפעיל את Batch על ידי השלמת הדרישות המוקדמות לפרויקטים ולמשתמשים.
- יצירה או זיהוי של נושא Pub/Sub להתראות על פעולות בחבילה.
- הגדרת מינוי לקבלת ההתראות ולשימוש בהן.
התפקידים הנדרשים
-
כדי לקבל את ההרשאות שדרושות ליצירה ולהרצה של משימה לשליחת התראות, צריך לבקש מהאדמין להקצות לכם את תפקידי ה-IAM הבאים:
- הכלי לעריכת משימות באצווה (
roles/batch.jobsEditor) בפרויקט. - משתמש בחשבון שירות (
roles/iam.serviceAccountUser) בחשבון השירות של הג'וב, שמוגדר כברירת מחדל כחשבון השירות של Compute Engine שמוגדר כברירת מחדל. - Pub/Sub Editor (
roles/pubsub.editor) בנושא או בפרויקט של Pub/Sub.
להסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.
יכול להיות שאפשר לקבל את ההרשאות הנדרשות גם באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש.
- הכלי לעריכת משימות באצווה (
-
אם אתם לא משתמשים בהגדרת ברירת המחדל של חשבון השירות של העבודה, אתם צריכים לוודא שיש לו את ההרשאות הנדרשות.
כדי לוודא שלחשבון השירות של העבודה יש את ההרשאות שנדרשות לפרסום התראות ב-Pub/Sub, צריך לבקש מהאדמין להקצות לחשבון השירות של העבודה את תפקיד ה-IAM פרסום הודעות ב-Pub/Sub (
roles/pubsub.publisher) בנושא Pub/Sub. - אם רוצים שעבודת Batch תפרסם התראות בנושא Pub/Sub שנמצא בפרויקט אחר מהפרויקט של העבודה, צריך להעניק הרשאה לפרסום בנושא הזה לסוכן שירות Batch של הפרויקט של העבודה.
כדי לוודא שלסוכן השירות של Batch בפרויקט של העבודה יש את ההרשאות הנדרשות לפרסום התראות Pub/Sub בנושא Pub/Sub בפרויקט אחר, צריך לבקש מהאדמין להקצות לסוכן השירות של Batch בפרויקט של העבודה את תפקיד ה-IAM פרסום הודעות ב-Pub/Sub (
roles/pubsub.publisher) בנושא Pub/Sub.
יצירה והרצה של משימה לשליחת התראות
ניתן ליצור משימה באצווה ששולחת התראות Pub/Sub על ידי ביצוע הפעולות הבאות:
gcloud
משתמשים ב-Google Cloud CLI כדי ליצור משימה שכוללת את השדה notifications ואובייקט אחד או יותר של jobNotification בגוף הראשי של קובץ ה-JSON:
{
...
"notifications": [
{
"pubsubTopic": "projects/PROJECT_ID/topics/TOPIC_ID",
"message": {
ATTRIBUTES
}
}
]
...
}
מחליפים את מה שכתוב בשדות הבאים:
-
PROJECT_ID: מזהה הפרויקט שמכיל את נושא ה-Pub/Sub. -
TOPIC_ID: מזהה נושא ה-Pub/Sub של הנושא שיצרתם כשהפעלתם התראות Pub/Sub.
ATTRIBUTES: מציינים מאפיין אחד או יותר מהמאפיינים הבאים, שכל אחד מהם מאפשר לקבל התראות לגבי הסטטוס של העבודה או של כל המשימות שלה.כדי לקבל התראות על כל השינויים במצב העבודה, צריך לציין את הפרטים הבאים:
"type": "JOB_STATE_CHANGED"כדי לקבל התראות על שינוי ספציפי במצב של משימה, צריך לציין את הפרטים הבאים:
"type": "JOB_STATE_CHANGED", "newJobState": "JOB_STATE"מחליפים את
JOB_STATEבאחד ממצבי העבודה הבאים:QUEUEDSCHEDULEDRUNNINGSUCCEEDEDFAILED
מידע נוסף על מצבי העבודה זמין במאמר מחזור החיים של העבודה.
כדי לקבל התראות על כל השינויים במצב המשימה, צריך לציין את הפרטים הבאים:
"type": "TASK_STATE_CHANGED"כדי לקבל התראות על שינויים ספציפיים במצב המשימה, צריך לציין את הפרטים הבאים:
"type": "TASK_STATE_CHANGED", "newTaskState": "TASK_STATE"מחליפים את
TASK_STATEבאחד ממצבי המשימה הבאים:PENDINGASSIGNEDRUNNINGSUCCEEDEDFAILED
מידע נוסף על מצבי המשימות זמין במאמר מחזור החיים של משימה.
לדוגמה, נניח שאתם רוצים לקבל התראות על כל השינויים במצב המשימה ועל כל מקרה שבו משימה נכשלת. לשם כך, אפשר להשתמש בקובץ הגדרות JSON שדומה לזה:
{
"taskGroups": [
{
"taskSpec": {
"runnables": [
{
"script": {
"text": "echo Hello World! This is task $BATCH_TASK_INDEX."
}
}
]
},
"taskCount": 3,
}
],
"logsPolicy": {
"destination": "CLOUD_LOGGING"
},
"notifications": [
{
"pubsubTopic": "projects/PROJECT_ID/topics/TOPIC_ID",
"message": {
"type": "JOB_STATE_CHANGED"
}
},
{
"pubsubTopic": "projects/PROJECT_ID/topics/TOPIC_ID",
"message": {
"type": "TASK_STATE_CHANGED",
"newTaskState": "FAILED"
}
}
]
}
API
משתמשים ב-API בארכיטקטורת REST כדי ליצור משימה שכוללת את השדה notifications ואובייקט jobNotification אחד או יותר בגוף הראשי של קובץ ה-JSON:
{
...
"notifications": [
{
"pubsubTopic": "projects/PROJECT_ID/topics/TOPIC_ID",
"message": {
ATTRIBUTES
}
}
]
...
}
מחליפים את מה שכתוב בשדות הבאים:
-
PROJECT_ID: מזהה הפרויקט שמכיל את נושא ה-Pub/Sub. -
TOPIC_ID: מזהה נושא ה-Pub/Sub של הנושא שיצרתם כשהפעלתם התראות Pub/Sub.
ATTRIBUTES: מציינים מאפיין אחד או יותר מהמאפיינים הבאים, שכל אחד מהם מאפשר לקבל התראות לגבי הסטטוס של העבודה או של כל המשימות שלה.כדי לקבל התראות על כל השינויים במצב העבודה, צריך לציין את הפרטים הבאים:
"type": "JOB_STATE_CHANGED"כדי לקבל התראות על שינוי ספציפי במצב של משימה, צריך לציין את הפרטים הבאים:
"type": "JOB_STATE_CHANGED", "newJobState": "JOB_STATE"מחליפים את
JOB_STATEבאחד ממצבי העבודה הבאים:QUEUEDSCHEDULEDRUNNINGSUCCEEDEDFAILED
מידע נוסף על מצבי העבודה זמין במאמר מחזור החיים של העבודה.
כדי לקבל התראות על כל השינויים במצב המשימה, צריך לציין את הפרטים הבאים:
"type": "TASK_STATE_CHANGED"כדי לקבל התראות על שינויים ספציפיים במצב המשימה, צריך לציין את הפרטים הבאים:
"type": "TASK_STATE_CHANGED", "newTaskState": "TASK_STATE"מחליפים את
TASK_STATEבאחד ממצבי המשימה הבאים:PENDINGASSIGNEDRUNNINGSUCCEEDEDFAILED
מידע נוסף על מצבי המשימות זמין במאמר מחזור החיים של משימה.
לדוגמה, נניח שאתם רוצים לקבל התראות על כל השינויים במצב המשימה ועל כל מקרה שבו משימה נכשלת. לשם כך, אפשר להשתמש בקובץ הגדרות JSON שדומה לזה:
{
"taskGroups": [
{
"taskSpec": {
"runnables": [
{
"script": {
"text": "echo Hello World! This is task $BATCH_TASK_INDEX."
}
}
]
},
"taskCount": 3,
}
],
"logsPolicy": {
"destination": "CLOUD_LOGGING"
},
"notifications": [
{
"pubsubTopic": "projects/PROJECT_ID/topics/TOPIC_ID",
"message": {
"type": "JOB_STATE_CHANGED"
}
},
{
"pubsubTopic": "projects/PROJECT_ID/topics/TOPIC_ID",
"message": {
"type": "TASK_STATE_CHANGED",
"newTaskState": "FAILED"
}
}
]
}
המשך
Java
Node.js
Python
אחרי שהמשימה מתחילה לפעול, אפשר להשתמש בהתראות שלה. לדוגמה, אם לנושא Pub/Sub של העבודה יש מינוי שמעביר התראות ל-BigQuery, אפשר לנתח את ההתראות של Pub/Sub ב-BigQuery.
המאמרים הבאים
- מידע נוסף על מעקב אחרי סטטוס העבודות באמצעות התראות Pub/Sub ו-BigQuery
- אם נתקלתם בבעיות ביצירה או בהפעלה של משימה, תוכלו להיעזר בפתרון בעיות.
- הצגת משרות ומשימות.
- מידע נוסף על אפשרויות ליצירת משרות