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

אתם יכולים להשתמש בשירות העברת הנתונים ל-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.iam.gserviceaccount.com ומוענקת לו ההרשאה של סוכן שירות העברת נתונים ל-BigQuery (roles/bigquerydatatransfer.serviceAgent).

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

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

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

    מסוף Cloud

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

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