אפשר להריץ את רכיבי ה-handler של Cloud Tasks בכל נקודת קצה של HTTP עם כתובת IP חיצונית, כמו GKE, Compute Engine או אפילו שרת אינטרנט מקומי. אפשר להריץ את המשימות שלכם בכל אחד מהשירותים האלה בצורה אמינה וניתנת להגדרה.
בדף הזה מוסבר איך ליצור באופן פרוגרמטי משימות בסיסיות של יעד HTTP ולהוסיף אותן לתורי משימות של Cloud Tasks. במדריך למתחילים מוסבר איך עושים את זה באמצעות Google Cloud CLI.
למשימות עם יעדי HTTP (בניגוד ליעדים מפורשים של App Engine, שהם פחות נפוצים), יש שתי דרכים ליצור משימות:
השיטה
CreateTask: צריך ליצור אובייקט של משימה באופן מפורש. משתמשים בשיטה הזו אם למשימות בתור יש הגדרות ניתוב שונות. במקרה כזה, צריך לציין את הניתוב ברמת המשימה, ואי אפשר להשתמש בניתוב ברמת התור. הגישה הזו מתבססת על השיטהCreateTask.
BufferTaskmethod: משתמשים בשיטה הזו אם התור מוגדר כך שיאגור משימות לפני שירות. בתור חייבת להיות הגדרת ניתוב ברמת התור. הגישה הזו מתבססת על השיטהBufferTask.
יצירת משימה באמצעות השיטה CreateTask
בקטע הזה מוסבר איך ליצור משימה על ידי בניית אובייקט המשימה. משתמשים בשיטה CreateTask.
כשיוצרים משימה באמצעות CreateTask method, יוצרים ומגדירים במפורש את אובייקט המשימה. צריך לציין את השירות ואת ה-handler שמבצעים את המשימה.
אפשר גם להעביר נתונים ספציפיים למשימה אל המטפל. אפשר גם לכוונן את ההגדרה של המשימה, למשל לתזמן מועד עתידי לביצוע שלה או להגביל את מספר הפעמים שבהן המשימה תנסה להתבצע מחדש אם היא תיכשל (ראו הגדרה מתקדמת).
בדוגמאות הבאות מוצגת קריאה ל-method CreateTask כדי ליצור משימה באמצעות ספריות הלקוח של Cloud Tasks.
C#
המשך
Java
שימו לב לקובץ pom.xml:
Node.js
שימו לב לקובץ package.json:
PHP
שימו לב לקובץ composer.json:
Python
שימו לב לקובץ requirements.txt:
Ruby
יצירת משימה באמצעות השיטה BufferTask
בקטע הזה מוסבר איך ליצור משימה באמצעות שליחת בקשת HTTP. השיטה שבה משתמשים נקראת BufferTask.
מגבלות
השיטה BufferTask כפופה למגבלות הבאות:
ספריות לקוח: השיטה
BufferTaskלא נתמכת בספריות לקוח.RPC API: השיטה
BufferTaskלא נתמכת ב-RPC API.ניתוב ברמת המשימה: השיטה הזו לא תומכת בניתוב ברמת המשימה. מכיוון שאין אפשרות להוסיף פרטי ניתוב כשיוצרים משימה בדרך הזו, צריך להשתמש בניתוח ברמת התור (אחרת למשימה לא יהיו פרטי ניתוב). אם התור שלכם עדיין לא משתמש בניתוב ברמת התור, כדאי לעיין במאמר בנושא הגדרת ניתוב ברמת התור למשימות HTTP.
מבצעים קריאה ל-BufferTask.
בדוגמאות הבאות מוצגות דרכים ליצור משימה על ידי שליחת בקשת HTTP POST לנקודת הקצה (endpoint) של Cloud Tasks API buffer.
curl
בקטע הקוד הבא יש דוגמה ליצירת משימה באמצעות המתודה BufferTask באמצעות curl:
curl -X HTTP_METHOD\ "https://cloudtasks.googleapis.com/v2/projects/PROJECT_ID/locations/LOCATION/queues/QUEUE_ID/tasks:buffer" \
מחליפים את מה שכתוב בשדות הבאים:
-
HTTP_METHOD: ה-method של ה-HTTP של הבקשה, לדוגמהGETאוPOST. -
PROJECT_ID: מזהה הפרויקט ב- Google Cloud . כדי לקבל את המידע הזה, מריצים את הפקודה הבאה בטרמינל:gcloud config get-value project
-
LOCATION: המיקום של התור. -
QUEUE_ID: המזהה של התור.
Python
הגדרה של חשבון שירות לאימות של מטפל ביעד HTTP
אם יש לכם חשבון שירות עם פרטי הכניסה המתאימים לגישה ל-handler, Cloud Tasks יכול לקרוא ל-handlers של יעד HTTP שנדרש בהם אימות.
אפשר להשתמש בחשבון השירות הנוכחי אם מקצים לו את התפקידים המתאימים. ההוראות האלה מתייחסות ליצירה של חשבון שירות חדש במיוחד לפונקציה הזו. חשבון השירות הקיים או החדש שמשמש לאימות ב-Cloud Tasks חייב להיות באותו פרויקט שבו נמצאים התורים של Cloud Tasks.
נכנסים לדף Service Accounts במסוף Google Cloud .
אם צריך, בוחרים את הפרויקט המתאים.
לוחצים על Create service account (יצירת חשבון שירות).
נותנים שם לחשבון השירות. שימו לב לכתובת האימייל שקשורה לבעיה ונוצרת במסוף. תצטרכו לחפש את האימייל הזה בשלב הבא. כדי להעתיק את כתובת האימייל, לוחצים על העתקה ללוח . אפשר גם להוסיף תיאור של מטרת החשבון.
לוחצים על Create and continue.
ברשימה Select a role, מחפשים את Cloud Tasks Enqueuer (Beta) ובוחרים אותו. התפקיד הזה נותן לחשבון השירות הרשאה להוסיף משימות לתור.
אם משתמשים ב Google Cloud handler, לוחצים על + Add another role כדי להעניק לחשבון השירות את התפקיד שמשויך לגישה לשירות שבו ה-handler פועל. לכל שירות ב- Google Cloud נדרש תפקיד אחר. לדוגמה, כדי לגשת ל-handler ב-Cloud Run, צריך להקצות את התפקיד Cloud Run Invoker.
כדי לסיים את יצירת חשבון השירות, לוחצים על Done.
כדי לאפשר ל-Cloud Tasks ליצור אסימוני אימות באמצעות חשבון השירות שיצרתם, אתם צריכים להקצות את התפקיד משתמש בחשבון שירות (
roles/iam.serviceAccountUser) לסוכן השירות הראשי של Cloud Tasks (roles/iam.serviceAccountUser) בחשבון השירות שיצרתם.נכנסים לדף Service accounts במסוף Google Cloud .
בשורה של חשבון השירות שיצרתם, מסמנים את תיבת הסימון ואז לוחצים על Manage access (ניהול גישה).
בחלונית Manage Access, לוחצים על Add principal.
ברשימה New principals, מחפשים ובוחרים את סוכן השירות של Cloud Tasks, שתהיה לו כתובת אימייל בפורמט
service-PROJECT_NUMBER@gcp-sa-cloudtasks.iam.gserviceaccount.com.ברשימה Select a role מחפשים את התפקיד Service Account User ובוחרים אותו.
לוחצים על Save.
שימוש במשימות של יעד HTTP עם אסימוני אימות
כדי לבצע אימות בין Cloud Tasks לבין handler של יעד HTTP שנדרש לו אימות כזה, Cloud Tasks יוצר אסימון כותרת. האסימון הזה מבוסס על פרטי הכניסה בחשבון השירות Cloud Tasks Enqueuer, שמזוהה באמצעות כתובת האימייל שלו. חשבון השירות שמשמש לאימות צריך להיות חלק מאותו פרויקט שבו נמצא התור של Cloud Tasks. הבקשה, עם אסימון הכותרת, נשלחת מהתור ל-handler באמצעות HTTPS. אפשר להשתמש באסימון מזהה או באסימון גישה.
באופן כללי, כדאי להשתמש באסימונים מזהים לכל handler שפועל ב- Google Cloud, למשל בפונקציות של Cloud Run או ב-Cloud Run. החריג העיקרי הוא ממשקי Google API שמארחים ב-*.googleapis.com: ממשקי ה-API האלה מצפים לאסימון גישה.
אפשר להגדיר אימות ברמת התור או ברמת המשימה. כדי להגדיר אימות ברמת התור, אפשר לעיין במאמר בנושא הגבלת הגישה לתורים ספציפיים. אם האימות מוגדר ברמת התור, ההגדרה הזו מחליפה את ההגדרה ברמת המשימה. כדי להגדיר אימות ברמת המשימה, צריך לציין אסימון מזהה (OIDC) או אסימון גישה (OAuth) במשימה עצמה.
CreateTask method
בדוגמאות הבאות נעשה שימוש בשיטה CreateTask עם ספריות הלקוח של Cloud Tasks כדי ליצור משימה שכוללת גם יצירה של אסימון כותרת. בדוגמאות נעשה שימוש באסימוני מזהה.
כדי להשתמש בטוקן גישה, מחליפים את הפרמטר OIDC בפרמטר OAuth המתאים לשפה כשיוצרים את הבקשה.
המשך
Java
שימו לב לקובץ pom.xml:
Node.js
שימו לב לקובץ package.json:
Python
שימו לב לקובץ requirements.txt:
BufferTask method
בדוגמאות הבאות נעשה שימוש בפרטי ברירת המחדל של האפליקציה לצורך אימות כשמשתמשים בשיטה BufferTask ליצירת משימה.
curl
curl -X HTTP_METHOD\ "https://cloudtasks.googleapis.com/v2/projects/PROJECT_ID/locations/LOCATION/queues/QUEUE_ID/tasks:buffer" \ -H "Authorization: Bearer ACCESS_TOKEN"
מחליפים את מה שכתוב בשדות הבאים:
-
HTTP_METHOD: ה-method של ה-HTTP של הבקשה, לדוגמהGETאוPOST. -
PROJECT_ID: מזהה הפרויקט ב- Google Cloud . כדי לקבל את המידע הזה, מריצים את הפקודה הבאה בטרמינל:gcloud config get-value project
-
LOCATION: המיקום של התור. -
QUEUE_ID: המזהה של התור. -
ACCESS_TOKEN: אסימון הגישה. אפשר לקבל את זה על ידי הרצת הפקודה הבאה במסוף: gcloud auth application-default login
gcloud auth application-default print-access-token
Python
בדוגמת הקוד הבאה, צריך לציין את ערך טוקן האימות.
הוספת מטפלים משלכם במשימות של יעד HTTP
מטפלי משימות של יעד HTTP דומים מאוד למטפלי משימות של App Engine, עם ההבדלים הבאים:
- זמן קצוב לתפוגה: בכל המטפלים במשימות של HTTP Target, ברירת המחדל של הזמן הקצוב לתפוגה היא 10 דקות, והמקסימום הוא 30 דקות.
- לוגיקת אימות: אם אתם כותבים קוד משלכם בשירות המטרה כדי לאמת את האסימון, אתם צריכים להשתמש באסימון מזהה. למידע נוסף על המשמעות של זה, תוכלו לקרוא את המאמר OpenID Connect, ובמיוחד את הקטע אימות אסימון מזהה.
כותרות: לבקשת יעד HTTP יש כותרות שמוגדרות על ידי התור, והן מכילות מידע ספציפי למשימה שהמטפל יכול להשתמש בו. הן דומות לכותרות שמוגדרות בבקשות למשימות ב-App Engine, אבל לא זהות להן. הכותרות האלה מספקות מידע בלבד. אין להשתמש בהם כמקורות לזיהוי.
אם הכותרות האלה מופיעות בבקשה של משתמש חיצוני לאפליקציה, הן מוחלפות בכותרות הפנימיות. החריג היחיד הוא בקשות ממנהלים שמחוברים לאפליקציה, שמורשים להגדיר כותרות למטרות בדיקה.
בקשות יעד של HTTP תמיד מכילות את הכותרות הבאות:
כותרת תיאור X-CloudTasks-QueueNameשם התור. X-CloudTasks-TaskNameהשם ה "קצר" של המשימה, או, אם לא צוין שם כשנוצרה, מזהה ייחודי שנוצר על ידי המערכת. זהו הערך my-task-idבשם המשימה המלא, כלומר, task_name =projects/my-project-id/locations/my-location/queues/my-queue-id/tasks/my-task-id.X-CloudTasks-TaskRetryCountמספר הפעמים שהייתה ניסיון חוזר להפעלת המשימה. בניסיון הראשון, הערך הוא 0. המספר הזה כולל ניסיונות שבהם המשימה נכשלה בגלל קודי שגיאה 5XX ולא הגיעה לשלב הביצוע.X-CloudTasks-TaskExecutionCountהמספר הכולל של הפעמים שהמשימה קיבלה תגובה מהמטפל. מכיוון ש-Cloud Tasks מוחק את המשימה אחרי קבלת תגובה מוצלחת, כל התגובות הקודמות של ה-handler היו כשלים. המספר הזה לא כולל כשלים בגלל קודי שגיאה מסוג 5XX. X-CloudTasks-TaskETAבתחילה, השעה המקורית שנקבעה למשימה, שצוינה בשניות מאז 1 בינואר 1970. שימו לב שהערך הזה מייצג את זמן השילוח הצפוי. בניסיונות חוזרים, הערך מתעדכן קרוב יותר לשעה הנוכחית ואפשר להשתמש בו כדי למדוד את זמן האחזור של המסירה. אין להשתמש בו לביטול כפילויות של משימות. בנוסף, בקשות מ-Cloud Tasks עשויות להכיל את הכותרות הבאות:
כותרת תיאור X-CloudTasks-TaskPreviousResponseקוד תגובת ה-HTTP מהניסיון הקודם. X-CloudTasks-TaskRetryReasonהסיבה לניסיון החוזר של המשימה.
הוספה ידנית של התפקיד Cloud Tasks Service Agent
אפשר להוסיף באופן ידני את התפקיד Cloud Tasks Service Agent (roles/cloudtasks.serviceAgent) לחשבון השירות של Cloud Tasks, שהוא סוכן השירות הראשי של Cloud Tasks.
הפעולה הזו נדרשת רק אם הפעלתם את Cloud Tasks API לפני 19 במרץ 2019.
המסוף
- בדף Welcome במסוף Google Cloud , מוצאים את מספר הפרויקט ומעתיקים אותו. Google Cloud
נכנסים לדף IAM במסוף Google Cloud .
לוחצים על הענקת גישה. נפתחת החלונית הענקת גישה.
בקטע Add principals (הוספת בעלי הרשאה), מוסיפים כתובת אימייל בפורמט הבא:
service-PROJECT_NUMBER@gcp-sa-cloudtasks.iam.gserviceaccount.com
מחליפים את
PROJECT_NUMBERב Google Cloud מספר הפרויקט.בקטע Assign roles, מחפשים את Cloud Tasks Service Agent ובוחרים אותו.
לוחצים על Save.
gcloud
כדי למצוא את מספר הפרויקט:
gcloud projects describe PROJECT_ID --format='table(projectNumber)'
מחליפים את PROJECT_ID במזהה הפרויקט.
מעתיקים את המספר.
מקצים לחשבון השירות של Cloud Tasks את התפקיד
Cloud Tasks Service Agentבאמצעות מספר הפרויקט שהעתקתם:gcloud projects add-iam-policy-binding PROJECT_ID \ --member serviceAccount:service-PROJECT_NUMBER@gcp-sa-cloudtasks.iam.gserviceaccount.com \ --role roles/cloudtasks.serviceAgent
מחליפים את מה שכתוב בשדות הבאים:
-
PROJECT_ID: מזהה הפרויקט ב- Google Cloud . -
PROJECT_NUMBER: מספר הפרויקט ב- Google Cloud.
-
הגדרות אחרות
יש מספר מאפיינים של משימות שאפשר להגדיר. רשימה מלאה זמינה בהגדרת משאב המשימה. לדוגמה, אפשר להתאים אישית את המאפיינים הבאים:
- מתן שמות: אם בוחרים לציין שם למשימה, Cloud Tasks יכול להשתמש בשם הזה כדי לוודא ביטול כפילויות של משימות, אבל העיבוד שנדרש לכך עלול להוסיף זמן אחזור.
- תזמון: אפשר לתזמן משימה למועד עתידי. האפשרות הזו נתמכת רק ב-
CreateTaskולא ב-BufferTask.
אפשר גם להגדיר מאפיינים של תור, כמו שינויים בהגדרות הניתוב, הגבלות קצב ופרמטרים של ניסיון חוזר. ההגדרות האלה חלות על כל המשימות בתור. מידע נוסף זמין במאמר בנושא הגדרת תורים ב-Cloud Tasks.
המאמרים הבאים
- מידע נוסף על משימות יעד HTTP מופיע בהפניית API ל-RPC.
- מידע נוסף על משימות יעד HTTP זמין בהפניית API בארכיטקטורת REST.