יצירת מינויים ל-Bigtable

במאמר הזה מוסבר איך ליצור מינוי ל-Bigtable ב-Pub/Sub. מינויים ל-Bigtable מאפשרים לכם לכתוב הודעות Pub/Sub ישירות לטבלת Bigtable.

מידע נוסף על סוג המינוי הזה זמין במאמר בנושא מינויים ל-Bigtable.

לפני שמתחילים

  • הטבלה ב-Bigtable שאליה רוצים לכתוב הודעות Pub/Sub צריכה כבר להתקיים. מידע נוסף מופיע במאמר בנושא יצירה וניהול של טבלאות.

  • בטבלה חייבת להיות קבוצת עמודות בשם data. אפשר להוסיף את העמודה family כשיוצרים את הטבלה.

  • אם רוצים לכתוב מטא-נתונים של הודעות לטבלה, הטבלה צריכה לכלול גם קבוצת עמודות בשם pubsub_metadata.

תפקידים והרשאות נדרשים

כדי לקבל את ההרשאות שנדרשות ליצירת מינוי ל-Bigtable, צריך לבקש מהאדמין להקצות לכם ב-IAM את התפקיד עריכה ב-Pub/Sub (roles/pubsub.editor) בפרויקט. כדי לקרוא הסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.

זהו תפקיד שמוגדר מראש וכולל את ההרשאות שנדרשות ליצירת מינוי ל-Bigtable. כדי לראות בדיוק אילו הרשאות נדרשות, אפשר להרחיב את הקטע ההרשאות הנדרשות:

ההרשאות הנדרשות

כדי ליצור מינוי ל-Bigtable, צריך את ההרשאות הבאות:

  • pubsub.subscriptions.create בפרויקט
  • pubsub.topics.attachSubscription בנושא

יכול להיות שתקבלו את ההרשאות האלה באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש אחרים.

מינויים חוצי-פרויקטים

אם יוצרים מינוי בפרויקט אחד לנושא בפרויקט אחר, צריכה להיות לכם הרשאת pubsub.subscriptions.create בפרויקט שבו אתם יוצרים את המינוי, והרשאת pubsub.topics.attachSubscription בנושא.

הקצאת תפקידי IAM לחשבון השירות

‫Pub/Sub משתמש בחשבון שירות של ניהול זהויות והרשאות גישה (IAM) כדי לגשת למשאבים של Google Cloud . כדי לאפשר ל-Pub/Sub לכתוב ל-Bigtable, צריך להקצות לחשבון השירות הזה את התפקיד Bigtable User (roles/bigtable.user).

כברירת מחדל, Pub/Sub משתמש בסוכן השירות של Pub/Sub
(service-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com). אפשר גם לציין חשבון שירות בניהול המשתמש כשיוצרים את המינוי ל-Bigtable.

שימוש בסוכן השירות של Pub/Sub

כדי להעניק את התפקיד הנדרש לסוכן השירות של Pub/Sub, מבצעים את השלבים הבאים. אפשר להעניק את התפקיד בפרויקט או במופע Bigtable שמכיל את הטבלה.

פרויקט

  1. נכנסים לדף IAM במסוף Google Cloud .

    כניסה לדף IAM

  2. בוחרים באפשרות Include Google-provided role grants.

  3. מוצאים את השורה Cloud Pub/Sub Service Account ולוחצים על Edit principal.

  4. לוחצים על Add another role ובוחרים את התפקיד Bigtable user.

מידע נוסף זמין במאמר הענקת תפקידים ב-IAM באמצעות המסוף.

Instance

  1. במסוף Google Cloud , נכנסים לדף Bigtable >Instances.

    כניסה לדף Instances

  2. בדף Instances, מסמנים את תיבת הסימון לצד שם המופע.

  3. אם חלונית המידע לא מוצגת, לוחצים על Show info panel.

  4. לוחצים על Add principal ומזינים את המזהה של חשבון השירות בפורמט הבא:

    service-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com.

  5. ברשימה הקצאת תפקידים, בוחרים באפשרות משתמש Bigtable.

  6. לוחצים על Save. חשבון המשתמש מקבל את התפקיד במשאב.

שימוש בחשבון שירות מותאם אישית

אם מקצים את התפקיד Bigtable User לסוכן השירות של Pub/Sub, כל משתמש שיש לו הרשאה ליצור מינוי בפרויקט יכול לכתוב לטבלת Bigtable. אם רוצים להגדיר הרשאות יותר ספציפיות, כדאי להגדיר במקום זאת חשבון שירות שמנוהל על ידי המשתמש.

כדי להגדיר חשבון שירות בניהול המשתמשים כך שתהיה לו הרשאת כתיבה ל-Bigtable, צריך את ההרשאות הבאות:

  • לחשבון השירות שמנוהל על ידי משתמש צריך להיות התפקיד Bigtable User.

  • לחשבון השירות של Cloud Pub/Sub צריכה להיות ההרשאה iam.serviceAccounts.getAccessToken בחשבון השירות בניהול המשתמש.

  • למשתמש שיוצר את המינוי צריכה להיות ההרשאה iam.serviceAccounts.actAs בחשבון השירות שמנוהל על ידי המשתמש.

כשיוצרים את המינוי, מציינים את חשבון השירות שמנוהל על ידי משתמש. מידע נוסף זמין במאמר יצירת מינוי ל-Bigtable.

כתיבה בטבלת Bigtable

בקטע הזה מוסבר איך מינוי ל-Bigtable כותב הודעות Pub/Sub לטבלה.

נתוני ההודעה

מינוי Bigtable כותב את נתוני ההודעות של Pub/Sub לקבוצת עמודות בשם data.

  • כל שורה מכילה את הנתונים של הודעה אחת.

  • מפתח השורה הוא שרשור של מזהה המינוי, קידומת של מזהה ההודעה (salt) ומזהה ההודעה, בפורמט הבא:

    "projects/PROJECT_NUMBER/subscriptions/SUBSCRIPTION_ID#SALT_PREFIX#MESSAGE_ID"

  • נתוני ההודעה נכתבים לעמודה אחת במשפחת העמודות data. בעמודה יש מגדיר עמודה של מחרוזת ריקה ("").

  • הנתונים נכתבים כסוג BYTES.

  • חותמת הזמן של התא הוא זמן הפרסום של ההודעה.

מטא-נתונים של ההודעה

כברירת מחדל, המינוי לא כותב מטא-נתונים של הודעות בטבלה. אפשר גם להפעיל כתיבת מטא-נתונים כשיוצרים מינוי ל-Bigtable.

אם כתיבת המטא-נתונים מופעלת, המינוי כותב את המטא-נתונים של ההודעה לקבוצת עמודות בשם pubsub_metadata. לפני שיוצרים את המינוי, מוודאים שבטבלה יש קבוצת עמודות עם השם הזה.

לכל הודעה, המינוי כותב שורה חדשה עם העמודות הבאות במשפחת העמודות pubsub_metadata.

עמודה ערך סוג נתונים
subscription_name שם המינוי String
message_id מזהה ההודעה String
attributes אובייקט JSON שמכיל את מאפייני ההודעה String

יצירת מינוי ל-Bigtable

כדי ליצור מינוי ל-Bigtable, משתמשים בפקודה gcloud beta pubsub subscriptions create:

gcloud beta pubsub subscriptions create SUBSCRIPTION_ID \
  --topic=TOPIC_ID \
  --bigtable-table=projects/PROJECT_ID/instances/INSTANCE_ID/tables/TABLE_ID

מחליפים את מה שכתוב בשדות הבאים:

  • SUBSCRIPTION_ID: שם למינוי.
  • TOPIC_ID: השם או המזהה של הנושא שממנו רוצים לקרוא.
  • PROJECT_ID: מזהה הפרויקט.
  • INSTANCE_ID: המזהה של מופע Bigtable שמכיל את הטבלה.
  • TABLE_ID: המזהה של הטבלה שרוצים לכתוב אליה. בטבלה צריכה להיות קבוצת עמודות בשם data.

הדגלים הבאים הם אופציונליים:

  • --bigtable-write-metadata: מציין אם לכתוב מטא-נתונים של הודעות. אם לא מציינים את הדגל הזה, המינוי לא כותב מטא-נתונים. מידע נוסף זמין במאמר מטא-נתונים של הודעות.

  • --bigtable-app-profile-id=APP_PROFILE: מציין פרופיל אפליקציה לשימוש בכתיבה ב-Bigtable. בפרופיל האפליקציה צריך להשתמש בניתוב לאשכול יחיד. אם לא מציינים את הדגל הזה, המינוי משתמש בפרופיל ברירת המחדל של האפליקציה.

  • --bigtable-service-account-email: מציין חשבון שירות לשימוש בכתיבה ל-Bigtable. אם לא מציינים, המינוי משתמש בסוכן השירות של Pub/Sub. מידע נוסף מופיע במאמר בנושא שימוש בחשבון שירות בהתאמה אישית.

דוגמה: כתיבה מ-Pub/Sub ל-Bigtable

בדוגמה הבאה מוסבר איך ליצור מינוי ל-Bigtable, להשתמש במינוי כדי לכתוב הודעות Pub/Sub לטבלת Bigtable, ואז להריץ שאילתה על הטבלה.

  1. יוצרים מופע חדש של Bigtable בשם my-instance.

    gcloud bigtable instances create my-instance --display-name="My instance" \
      --cluster-config=id=my-cluster-1,zone=ZONE,nodes=1
    

    מחליפים את ZONE באזור שבו פועל האשכול. דוגמה: us-central1-b

  2. יוצרים טבלת Bigtable בשם table-1 עם קבוצת עמודות בשם data.

    gcloud bigtable instances tables create table-1 \
      --instance=my-instance \
      --column-families=data
    
  3. יוצרים נושא Pub/Sub בשם topic-1.

    gcloud pubsub topics create topic-1
    
  4. יצירת מינוי ל-Bigtable שקורא מהנושא.

    gcloud beta pubsub subscriptions create bigtable-sub \
      --topic=topic-1 \
      --bigtable-table=projects/PROJECT_ID/instances/my-instance/tables/table-1
    

    מחליפים את PROJECT_ID במזהה הפרויקט ב- Google Cloud.

  5. מפרסמים הודעה בנושא.

    gcloud pubsub topics publish topic-1 --message='{"name":"Alice"}'
    

    אם ההודעה פורסמה בהצלחה, הפלט הוא מזהה ההודעה:

    messageIds:
    - 'MESSAGE_ID'
    

מינוי Bigtable כותב את נתוני ההודעה לקבוצת העמודות data. כדי לשלוח שאילתה לנתונים:

  1. נכנסים לדף Instances של Bigtable במסוף Google Cloud .

    כניסה לדף Instances

  2. לוחצים על המופע שנקרא my-cluster-1.

  3. בתפריט הניווט, לוחצים על Bigtable Studio.

  4. בעורך השאילתות, מריצים את שאילתת ה-SQL הבאה.

    SELECT _key, JSON_VALUE(CAST(data[''] AS STRING), '$.name') AS name FROM table-1;
    

    תוצאת השאילתה תיראה כך:

    +-------------------+
    | _key      | name  |
    +-----------|-------+
    | "ROW_KEY" | Alice |
    +-------------------+
    

    נתוני ההודעה מאוחסנים כסוג BYTES. בדוגמה הזו, הנתונים הם מחרוזת JSON, ולכן השאילתה יכולה להשתמש בפונקציות JSON של GoogleSQL כדי לנתח את הנתונים.

מעקב אחר מינוי ל-Bigtable

ב-Cloud Monitoring יש מספר מדדים למעקב אחרי מינויים.

רשימה של כל המדדים שקשורים ל-Pub/Sub והתיאורים שלהם מופיעה במסמכי התיעוד בנושא מעקב אחרי Pub/Sub.

אפשר גם לעקוב אחרי מינויים מתוך Pub/Sub.

המאמרים הבאים