העברות מבוססות-אירועים

העברות מבוססות-אירועים בשירות העברת הנתונים ל-BigQuery מאפשרות לטעון נתונים באופן אוטומטי ל-BigQuery בתגובה להתראות לגבי אירועים. אתם יכולים להשתמש בגישה הזו להטמעה מצטברת של אצווה חסכונית, אם עומס העבודה שלכם יכול לסבול עיכוב של כמה דקות בין הרצות ההעברה. אם אתם צריכים שהנתונים יהיו זמינים בזמן אמת עם זמן אחזור קצר יותר, השתמשו ב-Storage Write API כדי להעביר נתונים ישירות ל-BigQuery.

מקורות נתונים עם תמיכה בהעברות מבוססות-אירועים

אפשר להשתמש בהעברות מבוססות-אירועים בשירות העברת הנתונים ל-BigQuery עם מקורות הנתונים הבאים:

מגבלות

העברות מבוססות-אירועים ל-BigQuery כפופות למגבלות הבאות:

  • אחרי שמופעלת העברה מבוססת-אירועים, שירות העברת הנתונים ל-BigQuery ממתין עד 10 דקות לפני שהוא מפעיל את הרצת ההעברה הבאה, גם אם מגיע אירוע במהלך הזמן הזה.
  • העברות מבוססות-אירועים לא תומכות בפרמטרים של זמן ריצה ל-URI של המקור או לנתיב הנתונים.
  • אי אפשר להשתמש באותו מינוי ל-Pub/Sub בכמה הגדרות העברה מבוססות-אירועים.

הגדרת העברה מבוססת-אירוע ב-Cloud Storage

העברות מבוססות-אירועים מ-Cloud Storage משתמשות בהתראות Pub/Sub כדי לדעת מתי אובייקטים בקטגוריית המקור השתנו או נוספו. כשמשתמשים במצב העברה מצטברת, מחיקת אובייקט בקטגוריית המקור לא מוחקת את הנתונים המשויכים בטבלה ב-BigQuery ביעד.

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

לפני שמגדירים העברה מונחית-אירועים ב-Cloud Storage, צריך לבצע את הפעולות הבאות:

  1. להפעיל את ממשק ה-API של Pub/Sub בשביל הפרויקט שמקבל התראות.

    הפעלת ה-API

  2. אם אתם אדמינים ב-Cloud Storage (roles/storage.admin) וב-Pub/Sub (roles/pubsub.admin), אתם יכולים להמשיך ליצירת הגדרת העברה מבוססת-אירועים.

  3. אם אתם לא אדמינים ב-Cloud Storage (roles/storage.admin) וב-Pub/Sub (roles/pubsub.admin), בקשו מהאדמין להקצות לכם את התפקידים roles/storage.admin ו-roles/pubsub.admin, או בקשו מהאדמין להשלים את הגדרת Pub/Sub ואת הגדרת ההרשאות של סוכן השירות בקטעים הבאים, ולהשתמש במינוי ל-Pub/Sub שהוגדר מראש כדי ליצור הגדרת העברה מבוססת-אירועים.

  4. הרשאות מפורטות שנדרשות כדי להגדיר התראות על הגדרות העברה מבוססות-אירועים:

    • אם אתם מתכננים ליצור נושאים ומינויים לפרסום התראות, צריכות להיות לכם ההרשאות pubsub.topics.create ו-pubsub.subscriptions.create.

    • בין שאתם מתכננים להשתמש בנושאים ובמינויים חדשים או קיימים, צריכות להיות לכם ההרשאות הבאות. אם כבר יצרתם נושאים ומינויים ב-Pub/Sub, סביר להניח שכבר יש לכם את ההרשאות האלה.

    • כדי להגדיר התראות Pub/Sub בקטגוריה של Cloud Storage, אתם צריכים את ההרשאות הבאות:

      • storage.buckets.get
      • storage.buckets.update
    • תפקיד ה-IAM המוגדר מראש pubsub.admin ו-storage.admin כולל את כל ההרשאות שנדרשות כדי להגדיר העברה מונחית-אירועים ב-Cloud Storage. מידע נוסף מופיע במאמר בקרת גישה ב-Pub/Sub.

הגדרת התראות Pub/Sub ב-Cloud Storage

  1. מוודאים שעמדתם בדרישות המוקדמות לשימוש ב-Pub/Sub עם Cloud Storage.

  2. מחילים הגדרה של התראה על הקטגוריה של Cloud Storage:

    gcloud storage buckets notifications create gs://BUCKET_NAME --topic=TOPIC_NAME --event-types=OBJECT_FINALIZE

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

    • ‫BUCKET_NAME: השם של הקטגוריה ב-Cloud Storage שרוצים להפעיל בה אירועי התראות על קבצים
    • ‫TOPIC_NAME: השם של נושא Pub/Sub שבו רוצים לקבל את אירועי ההתראות על קבצים

    אפשר גם להוסיף הגדרת התראה בשיטות אחרות, ולא רק באמצעות ה-CLI של gcloud. מידע נוסף זמין במאמר החלת הגדרת התראות.

  3. מוודאים שהתראת Pub/Sub מוגדרת בצורה נכונה ל-Cloud Storage. משתמשים בפקודה gcloud storage buckets notifications list:

    gcloud storage buckets notifications list gs://BUCKET_NAME

    אם הפעולה בוצעה ללא שגיאות, התגובה תיראה דומה לדוגמה הבאה:

    etag: '132'
    id: '132'
    kind: storage#notification
    payload_format: JSON_API_V1
    selfLink: https://www.googleapis.com/storage/v1/b/my-bucket/notificationConfigs/132
    topic: //pubsub.googleapis.com/projects/my-project/topics/my-bucket
  4. יוצרים מינוי שליפה לנושא:

    gcloud pubsub subscriptions create SUBSCRIPTION_ID --topic=TOPIC_NAME

    מחליפים את SUBSCRIPTION_ID בשם או במזהה של מינוי השליפה החדש ב-Pub/Sub.

    אפשר ליצור מינוי משיכה באמצעות שיטות אחרות.

הגדרת ההרשאות של סוכן השירות

  1. מאתרים את השם של סוכן שירות העברת הנתונים ל-BigQuery בפרויקט:

    1. נכנסים לדף IAM & Admin.

      כניסה לדף IAM & Admin

    2. מסמנים את התיבה Include Google-provided role grants.

    3. הסוכן של שירות העברת הנתונים ל-BigQuery מופיע עם השם service-<project_number>@gcp-sa-bigquerydatatransfer.iam.gserviceaccount.com, ומוקצה לו התפקיד "סוכן של שירות העברת הנתונים ל-BigQuery" (roles/bigquerydatatransfer.serviceAgent).

      בודקים אם לחשבון השירות יש את התפקיד של סוכן השירות.

    מידע נוסף על סוכני שירות

  2. מקצים את התפקיד Pub/Sub Subscriber (pubsub.subscriber) לסוכן של שירות העברת הנתונים ל-BigQuery.

    מסוף Cloud

    כדי להקצות את התפקיד Pub/Sub Subscriber לסוכן של שירות העברת הנתונים ל-BigQuery, פועלים לפי ההוראות במאמר שליטה בגישה באמצעות מסוף Google Cloud . אפשר להקצות את התפקיד ברמת הנושא, המינוי או הפרויקט.

    gcloud CLI

    פועלים לפי ההוראות במאמר הגדרת מדיניות כדי להוסיף את הקישור הבא:

    {
      "role": "roles/pubsub.subscriber",
      "members": [
        "serviceAccount:project-PROJECT_NUMBER@gcp-sa-bigquerydatatransfer.iam.gserviceaccount.com"
    }

    מחליפים את PROJECT_NUMBER במזהה הפרויקט שבו נוצרים משאבי ההעברה ומחויבים.

    שיוך השימוש במכסות: כשסוכן שירות העברת הנתונים ל-BigQuery ניגש למינוי Pub/Sub, השימוש במכסות מחויב בפרויקט של המשתמש.

  3. מוודאים שלסוכן של שירות העברת הנתונים ל-BigQuery הוקצה התפקיד Pub/Sub Subscriber (pubsub.subscriber).

    1. נכנסים לדף Pub/Sub במסוף Google Cloud .

      כניסה ל-Pub/Sub

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

    3. אם חלונית המידע מוסתרת, לוחצים על Show info panel בפינה הימנית העליונה.

    4. בכרטיסייה Permissions, מוודאים שלסוכן השירות של שירות העברת הנתונים ל-BigQuery יש את התפקיד Pub/Sub Subscriber (pubsub.subscriber).

    בודקים אם לסוכן השירות יש את ההרשאה pubsub.subscriber במינוי.

סיכום הפקודות להגדרת התראות והרשאות

הפקודות הבאות של Google Cloud CLI כוללות את כל הפקודות שנדרשות כדי להגדיר התראות והרשאות, כמו שמתואר בקטעים הקודמים.

gcloud

PROJECT_ID=project_id
CONFIG_NAME=config_name
RESOURCE_NAME="bqdts-event-driven-${CONFIG_NAME}"
# Create a Pub/Sub topic.
gcloud pubsub topics create "${RESOURCE_NAME}" --project="${PROJECT_ID}"
# Create a Pub/Sub subscription.
gcloud pubsub subscriptions create "${RESOURCE_NAME}" --project="${PROJECT_ID}" --topic="projects/${PROJECT_ID}/topics/${RESOURCE_NAME}"
# Create a Pub/Sub notification.
gcloud storage buckets notifications create gs://"${RESOURCE_NAME}" --topic="projects/${PROJECT_ID}/topics/${RESOURCE_NAME}" --event-types=OBJECT_FINALIZE
# Grant roles/pubsub.subscriber permission to the DTS service agent.
PROJECT_NUMBER=$(gcloud projects describe "${PROJECT_ID}" --format='value(projectNumber)')
gcloud pubsub subscriptions add-iam-policy-binding "${RESOURCE_NAME}"  --project="${PROJECT_ID}"  --member=serviceAccount:service-"${PROJECT_NUMBER}"@gcp-sa-bigquerydatatransfer.iam.gserviceaccount.com  --role=roles/pubsub.subscriber

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

  • ‫PROJECT_ID: מזהה הפרויקט.
  • ‫CONFIG_NAME: שם לזיהוי הגדרת ההעברה הזו.

יצירת הגדרות העברה

כדי ליצור העברה מונחית-אירועים של Cloud Storage, יוצרים העברה של Cloud Storage ובוחרים באפשרות Event-driven בתור Schedule Type. כאדמינים של Cloud Storage (roles/storage.admin) ושל Pub/Sub (roles/pubsub.admin), יש לכם הרשאות מספיקות כדי ששירות העברת הנתונים ל-BigQuery יגדיר באופן אוטומטי את Cloud Storage לשליחת התראות.

אם אתם לא אדמינים ב-Cloud Storage (roles/storage.admin) וב-Pub/Sub (roles/pubsub.admin), אתם צריכים לבקש מהאדמין להקצות לכם את התפקידים האלה, או לבקש ממנו להשלים את הגדרות ההתראות של Pub/Sub ב-Cloud Storage ואת הגדרות ההרשאות של סוכן השירות לפני שתוכלו ליצור את ההעברה מונחית האירועים.