במאמר הזה נסביר איך ליצור מינוי ל-Pub/Sub באמצעות Single Message Transforms (SMTs).
טרנספורמציות SMT במינויים מאפשרות לבצע שינויים קלים בנתונים ובמאפיינים של ההודעות ישירות ב-Pub/Sub. התכונה הזו מאפשרת לנקות, לסנן או להמיר את הפורמט של הנתונים לפני שההודעות מועברות ללקוח מנוי.
כדי ליצור מינוי עם SMT, אפשר להשתמש במסוף Google Cloud , ב-Google Cloud CLI, בספריית הלקוח או ב-Pub/Sub API.
לפני שמתחילים
תפקידים והרשאות נדרשים
כדי לקבל את ההרשאות שנדרשות ליצירת מינוי עם SMT, צריך לבקש מהאדמין להקצות לכם בפרויקט את התפקיד עריכה ב-Pub/Sub (roles/pubsub.editor) ב-IAM.
כדי לקרוא הסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.
זהו תפקיד שמוגדר מראש וכולל את ההרשאות שנדרשות ליצירת מינוי עם SMT. כדי לראות בדיוק אילו הרשאות נדרשות, אפשר להרחיב את הקטע ההרשאות הנדרשות:
ההרשאות הנדרשות
כדי ליצור מינוי עם SMT, צריך את ההרשאות הבאות:
-
נותנים את ההרשאה ליצור מינוי בפרויקט:
pubsub.subscriptions.create
יכול להיות שתקבלו את ההרשאות האלה באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש אחרים.
יכול להיות שתצטרכו הרשאות נוספות בהתאם לסוג המינוי. כדי לראות את רשימת ההרשאות המדויקת, אפשר לעיין במסמך שמתאר את יצירת המינוי הספציפי. לדוגמה, אם אתם יוצרים מינוי ל-BigQuery עם SMT, כדאי לעיין במאמר בנושא יצירת מינויים ל-BigQuery.
אם יוצרים מינוי בפרויקט אחר מהנושא, צריך להעניק את התפקיד roles/pubsub.subscriber לחשבון הראשי של הפרויקט שמכיל את המינוי בפרויקט שמכיל את הנושא.
אפשר להגדיר בקרת גישה ברמת הפרויקט וברמת המשאב הספציפי.
יצירת מינוי באמצעות SMT
לפני שיוצרים מינוי עם SMT, כדאי לקרוא את המאמר מאפיינים של מינוי.
כדי ליצור מינוי ל-Pub/Sub עם SMT אחד או יותר, מבצעים את השלבים הבאים. אפשר להפעיל עד 5 SMT בכל מינוי.
המסוף
נכנסים לדף Subscriptions של Pub/Sub במסוף Google Cloud .
לוחצים על יצירת מינוי.
בשדה Subscription ID, מזינים מזהה למינוי. למידע נוסף על מתן שמות למינויים, קראו את ההנחיות למתן שמות.
בקטע טרנספורמציות, לוחצים על הוספת טרנספורמציה.
בוחרים את סוג הטרנספורמציה. למידע נוסף על סוגי ה-SMT הנתמכים, קראו את המאמר סוגי SMT.
קובעים את מאפייני ההגדרה של ה-SMT. קבוצת המאפיינים תלויה בסוג ה-SMT. למידע נוסף, עיינו במסמכי התיעוד של סוג ה-SMT הרלוונטי.
זה שינוי אופציונלי. כדי לאמת את ה-SMT, לוחצים על אימות. אם ה-SMT תקין, תוצג ההודעה
"Validation passed". אחרת, תוצג הודעת שגיאה.כדי להוסיף עוד טרנספורמציה, לוחצים על הוספת טרנספורמציה וחוזרים על השלבים הקודמים.
כדי לסדר את ה-SMT בסדר מסוים, לוחצים על העברה למעלה או על העברה למטה. כדי להסיר SMT, לוחצים על מחיקה.
זה שינוי אופציונלי. כדי לבדוק SMT בהודעה לדוגמה:
לוחצים על בדיקת טרנספורמציות.
בחלון Test transform, בוחרים את הפונקציה שרוצים לבדוק.
בחלון הזנת הודעה, מזינים הודעה לדוגמה.
כדי להוסיף מאפיין להודעה, לוחצים על Add an attribute ומזינים את המפתח והערך של המאפיין. אפשר להוסיף כמה מאפיינים.
לוחצים על בדיקה. התוצאה של החלת ה-SMT על ההודעה מוצגת בקטע הודעת הפלט.
כדי לסגור את החלון Test transforms, לוחצים על Close.
אם יוצרים יותר מ-SMT אחד, אפשר לבדוק את כל רצף השינויים באופן הבא:
- בודקים את ה-SMT הראשון ברצף, כמו שמתואר בשלבים הקודמים.
- בוחרים את ה-SMT הבא. הודעת הקלט מאוכלסת מראש עם הודעת הפלט מהבדיקה הקודמת.
- ממשיכים לבדוק את כללי ה-SMT לפי הסדר, כדי לוודא שכל הרצף פועל כמו שצריך.
לוחצים על יצירה כדי ליצור את המינוי.
gcloud
-
מפעילים את Cloud Shell במסוף Google Cloud .
בחלק התחתון של Google Cloud המסוף יתחיל סשן של Cloud Shell ותופיע הודעה של שורת הפקודה. Cloud Shell היא סביבת מעטפת שבה ה-CLI של Google Cloud מותקן ומוגדרים ערכים לפרויקט הקיים. הסשן יופעל תוך כמה שניות.
יוצרים קובץ YAML או JSON שמגדיר SMT אחד או יותר. ההגדרה של YAML או JSON תלויה בסוג ה-SMT. למידע נוסף, קראו את המאמר סוגי SMT.
אם הקובץ כולל יותר מ-SMT אחד, Pub/Sub מבצע אותם לפי הסדר שבו הם מופיעים.
זה שינוי אופציונלי. כדי לאמת SMT, מריצים את הפקודה
gcloud pubsub message-transforms validate:gcloud pubsub message-transforms validate \ --message-transform-file=TRANSFORM_FILEמחליפים את מה שכתוב בשדות הבאים:
- TRANSFORM_FILE: הנתיב לקובץ YAML או JSON שמגדיר SMT יחיד. אם יוצרים כמה SMT, צריך לאמת כל אחד מהם בנפרד.
זה שינוי אופציונלי. כדי לבדוק SMT אחד או יותר בהודעת Pub/Sub לדוגמה, מריצים את הפקודה
gcloud pubsub message-transforms test:gcloud pubsub message-transforms test \ --message-transforms-file=TRANSFORMS_FILE \ --message=MESSAGE \ --attribute=ATTRIBUTESמחליפים את מה שכתוב בשדות הבאים:
- TRANSFORMS_FILE: הנתיב לקובץ YAML או JSON שמגדיר SMT אחד או יותר.
- MESSAGE: גוף ההודעה לדוגמה.
- ATTRIBUTES: אופציונלי. רשימה מופרדת בפסיקים של מאפייני הודעות. כל מאפיין הוא צמד מפתח/ערך בפורמט
KEY="VALUE".
הפקודה מריצה את ה-SMT לפי הסדר, ומשתמשת בפלט של כל SMT כקלט ל-SMT הבא. הפקודה מציגה את התוצאות של כל שלב.
כדי ליצור את המינוי, מריצים את הפקודה
gcloud pubsub subscriptions create:gcloud pubsub subscriptions create SUBSCRIPTION_ID \ --topic=projects/PROJECT_ID/topics/TOPIC_ID \ --message-transforms-file=TRANSFORMS_FILEמחליפים את מה שכתוב בשדות הבאים:
SUBSCRIPTION_ID: המזהה או השם של המינוי שרוצים ליצור. הנחיות למתן שם למינוי זמינות במאמר שמות משאבים. אי אפשר לשנות את השם של מינוי.
PROJECT_ID: מזהה הפרויקט שמכיל את הנושא.
TOPIC_ID: המזהה של הנושא להרשמה.
TRANSFORMS_FILE: הנתיב לקובץ YAML או JSON שמגדיר SMT אחד או יותר.
C#
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של C# במאמר מדריך למתחילים: שימוש בספריות לקוח. מידע נוסף מופיע במאמרי העזרה של Pub/Sub C# API.
Java
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Java במאמר תחילת העבודה המהירה: שימוש בספריות לקוח. מידע נוסף מופיע במאמרי העזרה של Pub/Sub Java API.
Python
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Python במאמר התחלה מהירה: שימוש בספריות לקוח. מידע נוסף מופיע במאמרי העזרה של ה-API בשפת Python של Pub/Sub.
המשך
בדוגמה הבאה נעשה שימוש בגרסה הראשית של ספריית הלקוח Go Pub/Sub (v2). אם אתם עדיין משתמשים בספרייה v1, כדאי לעיין במדריך להעברת נתונים ל-v2. דוגמאות קוד שהוצאו משימוש
לפני שתנסו את הדוגמה הזו, פעלו לפי הוראות ההגדרה של Go במאמר התחלה מהירה: שימוש בספריות לקוח. מידע נוסף מופיע במסמכי העזר של ה-API של Pub/Sub Go.
איך מינויים חודשיים משתלבים עם תכונות אחרות שקשורות למינוי
כשמשתמשים ב-SMT של מינוי, חשוב להביא בחשבון את הנקודות הבאות.
סינון
אם המינוי שלכם משתמש גם ב-SMT וגם במסננים המובנים של Pub/Sub, המסנן יוחל לפני ה-SMT. להגדרה הזו יש את ההשלכות הבאות:
- אם ה-SMT משנה את מאפייני ההודעה, המסנן של Pub/Sub לא חל על קבוצת המאפיינים החדשה.
- ה-SMT לא חל על הודעות שמסוננות על ידי המסנן של Pub/Sub.
- אם ה-SMT מסנן הודעות, חשוב לשים לב להשפעה על מעקב אחרי צבר ההודעות במינוי.
- אם אתם מקשרים מינוי לפייפליין Dataflow, אל תשתמשו במינוי SMT כדי לסנן הודעות, כי זה משבש את ההתאמה האוטומטית לעומס של Dataflow.
סדר ההודעות
אם מגדירים SMT במינוי שמופעלת בו הגדרת סדר, והפעלת ה-SMT גורמת לשגיאה, ההודעות הבאות עם אותו מפתח סדר לא נשלחות למנוי. כדי למנוע את הבעיה הזו, צריך להגדיר נושא של הודעות שלא ניתן למסור במינוי כדי להסיר את ההודעה שלא עברה עיבוד מפיגור ההודעות.