אפשר להריץ את רכיבי ה-handler של Cloud Tasks בכל נקודת קצה של HTTP עם כתובת IP חיצונית, כמו GKE, Compute Engine או אפילו שרת אינטרנט מקומי. אפשר להריץ את המשימות שלכם בכל אחד מהשירותים האלה בצורה אמינה וניתנת להגדרה.
במסמך הזה מוסבר איך ליצור באופן פרוגרמטי משימות יעד HTTP באמצעות ספריות הלקוח של Cloud Tasks, ולהציב אותן בתורי משימות של Cloud Tasks. אפשר גם ליצור משימות של יעד HTTP במסוף Google Cloud , באמצעות Google Cloud CLI או על ידי שליחת בקשה ישירה אל Cloud Tasks API. מידע נוסף מופיע במאמר יצירת משימות.
למשימות עם יעדי HTTP (בניגוד ליעדי App Engine מפורשים, שהם פחות נפוצים), יש שתי דרכים ליצור משימות:
שיטה של
CreateTask: עליך ליצור אובייקט משימה במפורש. משתמשים בשיטה הזו אם למשימות בתור יש הגדרות ניתוב שונות. במקרה כזה, צריך לציין את הניתוב ברמת המשימה ואי אפשר להשתמש בניתוב ברמת התור. הגישה הזו מתבססת על השיטהCreateTask.שיטה של
BufferTask: השתמש בשיטה זו אם התור שלך מוגדר לאחסן משימות במאגר לפני שירות. בתור חייבת להיות הגדרת ניתוב ברמת התור. הגישה הזו מתבססת על השיטהBufferTask.
לקבלת הדרכה לבחירה בין שתי השיטות ליצירת משימות HTTP, ראו בחירת שיטה ליצירת משימות.
יצירת משימה באמצעות השיטה CreateTask
בקטע הזה מוסבר איך ליצור משימה על ידי בניית אובייקט המשימה. משתמשים בשיטה CreateTask.
כשיוצרים משימה באמצעות CreateTask method, יוצרים ומגדירים במפורש את אובייקט המשימה. צריך לציין את השירות ואת ה-handler שמבצעים את המשימה.
אפשר גם להעביר נתונים ספציפיים למשימה אל המטפל. אפשר גם לבצע הגדרה מדויקת יותר של המשימה, כמו תזמון של זמן בעתיד שבו היא תתבצע או הגבלת מספר הפעמים שבהן המשימה תנסה להתבצע מחדש אם היא תיכשל (ראו הגדרה מתקדמת).
בדוגמאות הבאות מוצגת קריאה ל-method CreateTask כדי ליצור משימה באמצעות ספריות הלקוח של Cloud Tasks.
C#
Go
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
הדוגמאות הבאות מראות כיצד ליצור משימה על ידי שליחת HTTPPOST בקשה ל-Cloud Tasks APIbuffer נקודת קצה.
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
משימות ענן יכולות לקרוא למטפלי יעד של 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 בחשבון השירות שיצרתם.נכנסים לדף Service accounts במסוף Google Cloud .
בשורה של חשבון השירות שיצרת זה עתה, סמן את תיבת הסימון ולאחר מכן לחץ על נהל גישה.
בחלונית 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 Target עם אסימוני אימות
כדי לבצע אימות בין Cloud Tasks לבין מטפל ביעדי HTTP שנדרש אימות, Cloud Tasks יוצר טוקן כותרת.
האסימון הזה מבוסס על פרטי הכניסה בחשבון השירות Cloud Tasks Enqueuer, שמזוהה באמצעות כתובת האימייל שלו. חשבון השירות שמשמש לאימות צריך להיות חלק מאותו פרויקט שבו נמצאת התור של Cloud Tasks. הבקשה, עם אסימון הכותרת, נשלחת מהתור ל-handler באמצעות HTTPS. אפשר להשתמש בטוקן של מזהה או בטוקן גישה. באופן כללי, כדאי להשתמש באסימונים מזהים לכל handler שפועל ב- Google Cloud, למשל בפונקציות של Cloud Run או ב-Cloud Run. היוצא מן הכלל העיקרי הוא ממשקי API של גוגל המתארחים ב-*.googleapis.com ומצפים לאסימון גישה.
אפשר להגדיר אימות ברמת התור באמצעות הגדרת הערך httpTarget override (במיוחד השדות oauthToken או oidcToken). אם
האימות מוגדר ברמת התור, ההגדרה הזו מבטלת את כל הגדרות האימות
שמוגדרות ברמת המשימה. לדוגמה, אם תור מסוים מוגדר עם החלפה של אסימון OIDC, משימות שנוספות לתור הזה עם אסימוני OAuth יוקצו עם אסימון OIDC ברמת התור.
כדי להגדיר אימות ברמת המשימה, מציינים טוקן של מזהה או טוקן גישה במשימה עצמה.
CreateTask אמצעי תשלום
בדוגמאות הבאות נעשה שימוש בשיטה CreateTask עם ספריות הלקוח של Cloud Tasks כדי ליצור משימה שכוללת גם יצירה של אסימון כותרת. בדוגמאות נעשה שימוש באסימוני מזהה.
כדי להשתמש באסימון גישה, יש להחליף את פרמטר ה-OIDC בפרמטר ה-OAuth המתאים לשפה בעת בניית הבקשה.
המשך
Java
שימו לב לקובץ pom.xml:
Node.js
שימו לב לקובץ package.json:
Python
שימו לב לקובץ requirements.txt:
BufferTask אמצעי תשלום
בדוגמאות הבאות נעשה שימוש בפרטי ברירת המחדל של האפליקציה לצורך אימות כשמשתמשים בשיטה 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 Target דומים מאוד למטפלים במשימות של 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.
אפשר גם להגדיר מאפיינים של תור, כמו שינויים בהגדרות הניתוב, הגבלות קצב ופרמטרים של ניסיון חוזר. ההגדרות האלה חלות על כל המשימות בתור. מידע נוסף זמין במאמר הגדרת ניתוב, מגבלות וניסיונות חוזרים בתור.
המאמרים הבאים
- מידע נוסף על משימות של HTTP Target מופיע במאמר בנושא API ל-RPC.
- מידע נוסף על משימות של HTTP Target זמין במאמרי העזרה של ה-API בארכיטקטורת REST.