במאמר הזה נסביר איך ליצור מינוי לקבלת עדכונים בדחיפה. אפשר להשתמש בGoogle Cloud מסוף, ב-Google Cloud CLI, בספריית הלקוח או ב-Pub/Sub API כדי ליצור מינוי דחיפה.
לפני שמתחילים
תפקידים והרשאות נדרשים
כדי לקבל את ההרשאות שנדרשות ליצירת מינוי דחיפה, צריך לבקש מהאדמין להקצות לכם ב-IAM את התפקיד Pub/Sub Editor (roles/pubsub.editor) בפרויקט.
כדי לקרוא הסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.
זהו תפקיד שמוגדר מראש וכולל את ההרשאות שנדרשות ליצירת מינוי דחיפה. כדי לראות בדיוק אילו הרשאות נדרשות, אפשר להרחיב את הקטע ההרשאות הנדרשות:
ההרשאות הנדרשות
כדי ליצור מינוי לקבלת עדכונים, צריך את ההרשאות הבאות:
-
pubsub.subscriptions.createבפרויקט -
pubsub.topics.attachSubscriptionבנושא
יכול להיות שתקבלו את ההרשאות האלה באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש אחרים.
מינויים חוצי-פרויקטים
אם יוצרים מינוי בפרויקט אחד לנושא בפרויקט אחר, צריכה להיות לכם הרשאת pubsub.subscriptions.create בפרויקט שבו אתם יוצרים את המינוי, והרשאת pubsub.topics.attachSubscription בנושא.
מאפיינים של מינויי דחיפה
מינויים מסוג Push תומכים בכל מאפייני המינוי הנפוצים. בקטעים הבאים מתוארים מאפיינים שספציפיים למינויים לשליחת הודעות פוש.
נקודות קצה
כתובת URL של נקודת קצה (חובה). כתובת HTTPS שנגישה לכולם. לשרת של נקודת הקצה של הודעת הפוש צריך להיות אישור SSL תקף שנחתם על ידי רשות אישורים. שירות Pub/Sub מעביר הודעות לנקודות קצה של Push מאותו אזור שבו שירות Pub/Sub מאחסן את ההודעות. Google Cloud שירות Pub/Sub מעביר הודעות מאותו אזור כמיטב היכולת. Google Cloud
אם המנויים משתמשים בחומת אש, הם לא יכולים לקבל בקשות לשליחת הודעות פוש. כדי לקבל בקשות לשליחת הודעות פוש, צריך להשבית את חומת האש ולאמת את אסימון האינטרנט מבוסס ה-JSON (JWT) שמשמש בבקשה. אם למנוי יש חומת אש, יכול להיות שתקבלו שגיאה
403 permission denied.ב-Pub/Sub לא נדרש אישור בעלות על דומיינים של כתובות URL של מינויים מסוג Push. אם הדומיין שלכם מקבל בקשות POST לא צפויות מ-Pub/Sub, אתם יכולים לדווח על חשד לניצול לרעה.
אימות
מפעילים אימות. כשההגדרה הזו מופעלת, ההודעות שמועברות מ-Pub/Sub לנקודת הקצה של הדחיפה כוללות כותרת הרשאה כדי לאפשר לנקודת הקצה לאמת את הבקשה. מנגנוני אימות והרשאה אוטומטיים זמינים לנקודות קצה של פונקציות Cloud Run ו-App Engine Standard שמתארחות באותו פרויקט כמו המינוי.
הגדרת האימות של מינוי push מאומת כוללת חשבון שירות שמנוהל על ידי משתמש, ופרמטרים של קהל שצוינו בקריאה create, patch או ModifyPushConfig. צריך גם להקצות תפקיד ספציפי לחשבון שירות, כמו שמוסבר בקטע הבא.
קהל. מחרוזת יחידה שלא תלויה באותיות רישיות או קטנות, שמשמשת את ה-webhook לאימות קהל היעד של הטוקן הספציפי הזה.
חשבון שירות.מערכת Pub/Sub יוצרת בשבילכם באופן אוטומטי חשבון שירות בפורמט
service-{PROJECT_NUMBER}@gcp-sa-pubsub.iam.gserviceaccount.com.
דרישות מוקדמות להפעלת אימות
חשבון השירות בניהול המשתמש הוא חשבון השירות שמשויך למינוי ה-push. החשבון הזה משמש כהצהרת email של אסימון ה-JWT (JSON Web Token) שנוצר. בהמשך מפורטות הדרישות מחשבון השירות:
חשבון השירות בניהול המשתמשים צריך להיות באותו פרויקט כמו מינוי ה-Push.
למשתמש שיוצר או משנה את מינוי הדחיפה צריכה להיות ההרשאה
iam.serviceAccounts.actAsבחשבון השירות שמנוהל על ידי המשתמש כדי לצרף את חשבון השירות למינוי הדחיפה. מידע נוסף מופיע במאמר צירוף חשבונות שירות למשאבים.הרשאות נדרשות: צריך להעניק לחשבון השירות הזה את ההרשאה
iam.serviceAccounts.getOpenIdToken(שכלולה בתפקידroles/iam.serviceAccountTokenCreator) כדי לאפשר ל-Pub/Sub ליצור אסימוני JWT בשביל חשבון השירות שצוין, לצורך אימות של בקשות push.
הסרת העטיפה של המטען הייעודי (payload)
האפשרות Enable payload unwrapping (הפעלת פריקת מטען ייעודי) מסירה מהודעות Pub/Sub את כל המטא-נתונים של ההודעות, חוץ מנתוני ההודעות. במקרה של ביטול העטיפה של מטען ייעודי (payload), נתוני ההודעה מועברים ישירות כגוף ה-HTTP.
אפשר גם להפעיל את האפשרות כתיבת מטא-נתונים. האפשרות כתיבת מטא-נתונים מוסיפה בחזרה לכותרת הבקשה מטא-נתונים של הודעות שהוסרו בעבר.
משלוח לכתובות VPC פרטיות
Pub/Sub פועל מחוץ לרשתות VPC ולא יכול לדחוף הודעות ישירות לכתובות VPC פרטיות. עם זאת, אפשר להשתמש ב-Eventarc כדי לנתב הודעות לשירותים ב-VPC. שירות Pub/Sub יכול לשלוח הודעות לטריגר של Eventarc, שיכול להעביר אותן לשירות ב-VPC, כמו שירות Cloud Run או הפעלה של Workflows. מידע נוסף זמין במסמכי התיעוד של Eventarc.
VPC Service Controls
בפרויקט שמוגן על ידי VPC Service Controls, שימו לב למגבלות הבאות לגבי מינויים מסוג Push:
אפשר ליצור רק מינויים חדשים לשליחת הודעות פוש שבהם נקודת הקצה של הפוש מוגדרת לשירות Cloud Run עם כתובת URL של
run.appכברירת מחדל או להפעלה של Workflows. דומיינים מותאמים אישית לא פועלים.כשמנתבים אירועים דרך Eventarc ליעדים של Workflows שבהם נקודת הקצה של הדחיפה מוגדרת להפעלה של Workflows, אפשר ליצור מינויים חדשים לדחיפה רק דרך Eventarc.
אי אפשר לעדכן מינויים קיימים לקבלת עדכונים. מינויים לשליחת הודעות פוש ממשיכים לפעול, אבל הם לא מוגנים על ידי VPC Service Controls.
יצירת מינוי דחיפה
בדוגמאות הבאות אפשר לראות איך ליצור מינוי עם משלוח בדחיפה באמצעות הגדרות ברירת המחדל שסופקו.
כברירת מחדל, המינויים משתמשים בשליפת נתונים, אלא אם מגדירים במפורש שליחת נתונים, כמו בדוגמאות הבאות.
המסוף
כדי ליצור מינוי דחיפה, פועלים לפי השלבים הבאים:
- נכנסים לדף Subscriptions במסוף Google Cloud .
- לוחצים על יצירת מינוי.
- בשדה Subscription ID (מזהה מינוי), מזינים שם.
מידע על מתן שם למינוי זמין במאמר הנחיות למתן שם לנושא או למינוי.
- בוחרים נושא מהתפריט הנפתח או יוצרים נושא חדש. המינוי מקבל הודעות מהנושא.
- בוחרים באפשרות Push בתור סוג ההעברה.
- מציינים כתובת URL של נקודת קצה.
- משאירים את כל שאר ערכי ברירת המחדל.
- לוחצים על יצירה.
אפשר גם ליצור מינוי מהקטע נושאים. מקש הקיצור הזה שימושי לקישור נושאים למינויים.
- נכנסים לדף Topics במסוף Google Cloud .
- לוחצים עלmore_vertלצד הנושא שרוצים להירשם אליו.
- בתפריט ההקשר, בוחרים באפשרות יצירת מינוי.
- מזינים את מזהה המינוי.
מידע על מתן שם למינוי זמין במאמר הנחיות למתן שם לנושא או למינוי.
- בוחרים באפשרות Push בתור סוג ההעברה.
- מציינים כתובת URL של נקודת קצה.
- משאירים את כל שאר ערכי ברירת המחדל.
- לוחצים על יצירה.
gcloud
-
במסוף Google Cloud , מפעילים את Cloud Shell.
בחלק התחתון של Google Cloud המסוף יתחיל סשן של Cloud Shell ותופיע הודעה של שורת הפקודה. Cloud Shell היא סביבת מעטפת שבה ה-CLI של Google Cloud מותקן ומוגדרים ערכים לפרויקט הקיים. הסשן יופעל תוך כמה שניות.
-
כדי ליצור מינוי דחיפה, מריצים את הפקודה
gcloud pubsub subscriptions create.gcloud pubsub subscriptions create SUBSCRIPTION_ID \ --topic=TOPIC_ID \ --push-endpoint=PUSH_ENDPOINT
מחליפים את מה שכתוב בשדות הבאים:
-
SUBSCRIPTION_ID: השם או המזהה של מינוי הפוש החדש. -
TOPIC_ID: השם או המזהה של הנושא. - PUSH_ENDPOINT: כתובת ה-URL שתשמש כנקודת הקצה של המינוי הזה.
לדוגמה,
https://myproject.appspot.com/myhandler.
-
REST
כדי ליצור מינוי דחיפה, משתמשים ב-method projects.subscriptions.create:
בקשה:
הבקשה צריכה להיות מאומתת באמצעות אסימון גישה בכותרת Authorization. כדי לקבל אסימון גישה ל-Application Default Credentials הנוכחיים: gcloud auth application-default print-access-token.
PUT https://pubsub.googleapis.com/v1/projects/PROJECT_ID/subscriptions/SUBSCRIPTION_ID Authorization: Bearer ACCESS_TOKEN
גוף הבקשה:
{
"topic": "projects/PROJECT_ID/topics/TOPIC_ID",
// Only needed if you are using push delivery
"pushConfig": {
"pushEndpoint": "PUSH_ENDPOINT"
}
}כאשר:
https://myproject.appspot.com/myhandler.תשובה:
{
"name": "projects/PROJECT_ID/subscriptions/SUBSCRIPTION_ID",
"topic": "projects/PROJECT_ID/topics/TOPIC_ID",
"pushConfig": {
"pushEndpoint": "https://PROJECT_ID.appspot.com/myhandler",
"attributes": {
"x-goog-version": "v1"
}
},
"ackDeadlineSeconds": 10,
"messageRetentionDuration": "604800s",
"expirationPolicy": {
"ttl": "2678400s"
}
}C++
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של C++ במאמר תחילת העבודה: שימוש בספריות לקוח. מידע נוסף זמין במאמרי העזרה בנושא Pub/Sub C++ API.
C#
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של C# במאמר הפעלה מהירה: שימוש בספריות לקוח. מידע נוסף מופיע במאמרי העזרה של Pub/Sub C# API.
המשך
בדוגמה הבאה נעשה שימוש בגרסה הראשית של ספריית הלקוח Go Pub/Sub (v2). אם אתם עדיין משתמשים בספרייה v1, כדאי לעיין במדריך להעברה לגרסה v2. כדי לראות רשימה של דוגמאות קוד מגרסה 1, אפשר לעיין ב דוגמאות הקוד שהוצאו משימוש.
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Go במאמר מדריך למתחילים: שימוש בספריות לקוח. מידע נוסף מופיע במאמרי העזרה של Pub/Sub Go API.
Java
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Java במאמר תחילת העבודה: שימוש בספריות לקוח. מידע נוסף מופיע במאמרי העזרה של Pub/Sub Java API.
Node.js
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Node.js במאמר תחילת העבודה: שימוש בספריות לקוח. מידע נוסף זמין במאמר Pub/Sub Node.js API reference documentation.
Node.ts
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Node.js במאמר תחילת העבודה: שימוש בספריות לקוח. מידע נוסף זמין במאמר Pub/Sub Node.js API reference documentation.
PHP
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של PHP במאמר מדריך למתחילים: שימוש בספריות לקוח. מידע נוסף זמין במאמר מאמרי העזרה של ה-API של Pub/Sub PHP.
Python
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Python במאמר תחילת העבודה: שימוש בספריות לקוח. מידע נוסף זמין במאמרי העזרה של Pub/Sub Python API.
Ruby
בדוגמה הבאה נעשה שימוש בספריית הלקוח של Ruby Pub/Sub בגרסה 3. אם אתם עדיין משתמשים בספרייה v2, כדאי לעיין במדריך להעברה לגרסה v3. כדי לראות רשימה של דוגמאות קוד של Ruby v2, אפשר לעיין ב דוגמאות הקוד שהוצאו משימוש.
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Ruby במאמר תחילת העבודה המהירה: שימוש בספריות לקוח. מידע נוסף מופיע במאמרי העזרה של Pub/Sub Ruby API.
מעקב אחר הרשמות ל-Push
ב-Cloud Monitoring יש מספר מדדים למעקב אחרי מינויים.
רשימה של כל המדדים שקשורים ל-Pub/Sub והתיאורים שלהם מופיעה במסמכי התיעוד בנושא מעקב אחרי Pub/Sub.
אפשר גם לעקוב אחרי מינויים מתוך Pub/Sub.
המאמרים הבאים
- ליצור או לשנות מינוי באמצעות פקודות של
gcloud. - יוצרים או משנים מינוי באמצעות ממשקי API ל-REST.