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

אתם יכולים להשתמש בשירות העברת הנתונים ל-BigQuery כדי ליצור העברות מבוססות-אירועים, שטוענות נתונים באופן אוטומטי על סמך התראות על אירועים. מומלץ להשתמש בהעברות מבוססות-אירועים אם אתם צריכים להטמיע נתונים מצטברים שמבצעים אופטימיזציה של יעילות העלויות.

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

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

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

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

מגבלות

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

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

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

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

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

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

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

    הפעלת ה-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, סביר להניח שכבר יש לכם את ההרשאות האלה.

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

      • 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.s3ns-system.iam.gserviceaccount.com ומקבל את התפקיד BigQuery Data Transfer Service Agent (roles/bigquerydatatransfer.serviceAgent).

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

    מידע נוסף על סוכני שירות זמין במאמר סוכני שירות.

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

    מסוף Cloud

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

    gcloud CLI

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

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

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

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

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

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

      מעבר אל 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.s3ns-system.iam.gserviceaccount.com  --role=roles/pubsub.subscriber

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

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

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

כדי ליצור העברה מ-Cloud Storage שמבוססת על אירועים, יוצרים העברה מ-Cloud Storage ובוחרים באפשרות מבוססת על אירועים בתור סוג התזמון. בתור אדמין של 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 ושל הרשאות של סוכני שירות לפני שתוכלו ליצור את ההעברה מבוססת-האירועים.