במדריך הזה מוסבר איך להשתמש ב-Eventarc כדי ליצור צינור לעיבוד נתונים שמתזמן שאילתות למערך נתונים ציבורי ב-BigQuery, יוצר תרשימים על סמך הנתונים ומשתף קישורים לתרשימים באימייל.
מטרות
במדריך הזה תבנו ותפרסו שלושה שירותים של Cloud Run שמאפשרים גישה לא מאומתת ומקבלים אירועים באמצעות Eventarc:
- Query Runner – מופעל כשמשימות של Cloud Scheduler מפרסמות הודעה בנושא Pub/Sub. השירות הזה משתמש ב-BigQuery API כדי לאחזר נתונים ממערך נתונים ציבורי של COVID-19, ושומר את התוצאות בטבלה חדשה ב-BigQuery.
- Chart Creator – מופעל כששירות Query Runner מפרסם הודעה בנושא Pub/Sub. השירות הזה יוצר תרשימים באמצעות ספריית התרשימים של Python, Matplotlib, ושומר את התרשימים בקטגוריית Cloud Storage.
- Notifier – מופעל על ידי יומני ביקורת כששירות Chart Creator מאחסן תרשים בקטגוריה של Cloud Storage. השירות הזה משתמש בשירות האימייל SendGrid כדי לשלוח קישורים לתרשימים לכתובת אימייל.
הדיאגרמה הבאה מציגה את הארכיטקטורה ברמה גבוהה:
עלויות
במסמך הזה משתמשים ברכיבים הבאים של Google Cloud, והשימוש בהם כרוך בתשלום:
כדי להעריך את ההוצאות בהתאם לתחזית השימוש שלכם, אתם יכולים להיעזר במחשבון העלויות.
לפני שמתחילים
יכול להיות שהגבלות אבטחה שהוגדרו בארגון שלכם ימנעו מכם להשלים את השלבים הבאים. מידע לפתרון בעיות זמין במאמר פיתוח אפליקציות בסביבה מוגבלת. Google Cloud
- נכנסים לחשבון Google Cloud . אם אתם משתמשים חדשים ב- Google Cloud, צרו חשבון כדי שתוכלו להעריך את הביצועים של המוצרים שלנו בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300$ להרצה, לבדיקה ולפריסה של עומסי העבודה.
-
התקינו את ה-CLI של Google Cloud.
-
אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.
-
כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:
gcloud init -
יוצרים או בוחרים Google Cloud פרויקט.
תפקידים שנדרשים כדי לבחור או ליצור פרויקט
- Select a project: כדי לבחור פרויקט לא צריך תפקיד IAM ספציפי – אפשר לבחור כל פרויקט שקיבלתם בו תפקיד.
-
יצירת פרויקט: כדי ליצור פרויקט, צריך את התפקיד Project Creator (יצירת פרויקטים) (
roles/resourcemanager.projectCreator), שכולל את ההרשאהresourcemanager.projects.create. איך מקצים תפקידים
-
יוצרים Google Cloud פרויקט:
gcloud projects create PROJECT_ID
מחליפים את
PROJECT_IDבשם של פרויקט Google Cloud שיוצרים. -
בוחרים את הפרויקט שיצרתם: Google Cloud
gcloud config set project PROJECT_ID
מחליפים את
PROJECT_IDבשם הפרויקט ב- Google Cloud .
מפעילים את ממשקי ה-API של Artifact Registry, Cloud Build, Cloud Logging, Cloud Run, Cloud Scheduler, Eventarc ו-Pub/Sub:
תפקידים שנדרשים להפעלת ממשקי API
כדי להפעיל ממשקי API, צריך את תפקיד ה-IAM 'אדמין של Service Usage' (
roles/serviceusage.serviceUsageAdmin), שכולל את ההרשאהserviceusage.services.enable. איך מקצים תפקידיםgcloud services enable artifactregistry.googleapis.com
cloudbuild.googleapis.com cloudscheduler.googleapis.com eventarc.googleapis.com logging.googleapis.com pubsub.googleapis.com run.googleapis.com -
התקינו את ה-CLI של Google Cloud.
-
אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.
-
כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:
gcloud init -
יוצרים או בוחרים Google Cloud פרויקט.
תפקידים שנדרשים כדי לבחור או ליצור פרויקט
- Select a project: כדי לבחור פרויקט לא צריך תפקיד IAM ספציפי – אפשר לבחור כל פרויקט שקיבלתם בו תפקיד.
-
יצירת פרויקט: כדי ליצור פרויקט, צריך את התפקיד Project Creator (יצירת פרויקטים) (
roles/resourcemanager.projectCreator), שכולל את ההרשאהresourcemanager.projects.create. איך מקצים תפקידים
-
יוצרים Google Cloud פרויקט:
gcloud projects create PROJECT_ID
מחליפים את
PROJECT_IDבשם של פרויקט Google Cloud שיוצרים. -
בוחרים את הפרויקט שיצרתם: Google Cloud
gcloud config set project PROJECT_ID
מחליפים את
PROJECT_IDבשם הפרויקט ב- Google Cloud .
מפעילים את ממשקי ה-API של Artifact Registry, Cloud Build, Cloud Logging, Cloud Run, Cloud Scheduler, Eventarc ו-Pub/Sub:
תפקידים שנדרשים להפעלת ממשקי API
כדי להפעיל ממשקי API, צריך את תפקיד ה-IAM 'אדמין של Service Usage' (
roles/serviceusage.serviceUsageAdmin), שכולל את ההרשאהserviceusage.services.enable. איך מקצים תפקידיםgcloud services enable artifactregistry.googleapis.com
cloudbuild.googleapis.com cloudscheduler.googleapis.com eventarc.googleapis.com logging.googleapis.com pubsub.googleapis.com run.googleapis.com - ב-Cloud Storage, מפעילים את יומני הביקורת עבור סוגי הגישה לנתונים
ADMIN_READ, DATA_WRITEו-DATA_READ.- קוראים את מדיניות ניהול הזהויות והרשאות הגישה (IAM) שמשויכת ל Google Cloud פרויקט, לתיקייה או לארגון ומאחסנים אותה בקובץ זמני:
gcloud projects get-iam-policy PROJECT_ID > /tmp/policy.yaml
- פותחים את הקובץ
/tmp/policy.yamlבעורך טקסט ומוסיפים או משנים רק את ההגדרה של יומן הביקורת בקטעauditConfigs:auditConfigs: - auditLogConfigs: - logType: ADMIN_READ - logType: DATA_WRITE - logType: DATA_READ service: storage.googleapis.com bindings: - members: [...] etag: BwW_bHKTV5U= version: 1
- כותבים את מדיניות ה-IAM החדשה:
gcloud projects set-iam-policy PROJECT_ID /tmp/policy.yaml
אם הפקודה הקודמת מדווחת על התנגשות עם שינוי אחר, צריך לחזור על השלבים האלה, החל מקריאת מדיניות IAM. מידע נוסף זמין במאמר הגדרת יומני ביקורת של גישה לנתונים באמצעות ה-API.
- קוראים את מדיניות ניהול הזהויות והרשאות הגישה (IAM) שמשויכת ל Google Cloud פרויקט, לתיקייה או לארגון ומאחסנים אותה בקובץ זמני:
- מקצים את התפקיד
eventarc.eventReceiverלחשבון השירות של Compute Engine:export PROJECT_NUMBER="$(gcloud projects describe $(gcloud config get-value project) --format='value(projectNumber)')" gcloud projects add-iam-policy-binding $(gcloud config get-value project) \ --member=serviceAccount:${PROJECT_NUMBER}-compute@developer.gserviceaccount.com \ --role='roles/eventarc.eventReceiver'
- אם הפעלתם את חשבון השירות של Pub/Sub ב-8 באפריל 2021 או לפני כן, צריך להקצות את התפקיד
iam.serviceAccountTokenCreatorלחשבון השירות של Pub/Sub:gcloud projects add-iam-policy-binding $(gcloud config get-value project) \ --member="serviceAccount:service-${PROJECT_NUMBER}@gcp-sa-pubsub.iam.gserviceaccount.com"\ --role='roles/iam.serviceAccountTokenCreator'
- מגדירים את ברירות המחדל שמשמשות במדריך הזה:
export REGION=REGION gcloud config set run/region ${REGION} gcloud config set run/platform managed gcloud config set eventarc/location ${REGION}
מחליפים את
REGIONבמיקום נתמך של Eventarc לבחירתכם.
יצירת מפתח API של SendGrid
SendGrid הוא ספק אימייל מבוסס-ענן שמאפשר לשלוח אימייל בלי צורך לתחזק שרתי אימייל.
- נכנסים ל-SendGrid ועוברים אל Settings (הגדרות) > API Keys (מפתחות API).
- לוחצים על Create API Key (יצירת מפתח API).
- בוחרים את ההרשאות של המפתח. כדי לשלוח אימייל, למפתח צריכות להיות לפחות הרשאות שליחת אימייל.
- נותנים שם למפתח ולוחצים על שמירה כדי ליצור אותו.
- המערכת של SendGrid יוצרת מפתח חדש. זהו העותק היחיד של המפתח, לכן חשוב להעתיק אותו ולשמור אותו לשימוש מאוחר יותר.
יצירת מאגר רגיל ב-Artifact Registry
יוצרים מאגר רגיל ב-Artifact Registry לאחסון קובץ האימג' של קונטיינר Docker:
gcloud artifacts repositories create REPOSITORY \ --repository-format=docker \ --location=$REGION
מחליפים את REPOSITORY בשם ייחודי למאגר.
יצירת קטגוריה של Cloud Storage
יוצרים קטגוריה ייחודית של Cloud Storage כדי לשמור את התרשימים. מוודאים שהקטגוריה והתרשימים זמינים לכולם, ובאותו אזור כמו שירות Cloud Run:
export BUCKET="$(gcloud config get-value core/project)-charts" gcloud storage buckets create gs://${BUCKET} --location=$(gcloud config get-value run/region) gcloud storage buckets update gs://${BUCKET} --uniform-bucket-level-access gcloud storage buckets add-iam-policy-binding gs://${BUCKET} --member=allUsers --role=roles/storage.objectViewer
פריסת שירות ההתראות
פריסת שירות Cloud Run שמקבל אירועים של Chart Creator ומשתמש ב-SendGrid כדי לשלוח באימייל קישורים לתרשימים שנוצרו.
משכפלים את המאגר ב-GitHub ועוברים לספרייה
notifier/python:git clone https://github.com/GoogleCloudPlatform/eventarc-samples cd eventarc-samples/processing-pipelines/bigquery/notifier/python/
יוצרים את קובץ האימג' של הקונטיינר ומעבירים אותו בדחיפה:
export SERVICE_NAME=notifier docker build -t $REGION-docker.pkg.dev/$(gcloud config get-value project)/REPOSITORY/${SERVICE_NAME}:v1 . docker push $REGION-docker.pkg.dev/$(gcloud config get-value project)/REPOSITORY/${SERVICE_NAME}:v1
פורסים את קובץ האימג' של הקונטיינר ב-Cloud Run, ומעבירים כתובת לשליחת אימיילים ומפתח SendGrid API:
export TO_EMAILS=EMAIL_ADDRESS export SENDGRID_API_KEY=YOUR_SENDGRID_API_KEY gcloud run deploy ${SERVICE_NAME} \ --image $REGION-docker.pkg.dev/$(gcloud config get-value project)/REPOSITORY/${SERVICE_NAME}:v1 \ --update-env-vars TO_EMAILS=${TO_EMAILS},SENDGRID_API_KEY=${SENDGRID_API_KEY},BUCKET=${BUCKET} \ --allow-unauthenticated
מחליפים את מה שכתוב בשדות הבאים:
EMAIL_ADDRESSעם כתובת אימייל לשליחת הקישורים לתרשימים שנוצרו-
YOUR_SENDGRID_API_KEYבמפתח ה-API של SendGrid שרשמתם קודם
כשתראו את כתובת ה-URL של השירות, סימן שהפריסה הושלמה.
יצירת טריגר לשירות Notifier
הטריגר של Eventarc לשירות Notifier שנפרס ב-Cloud Run מסנן את יומני הביקורת של Cloud Storage שבהם methodName הוא storage.objects.create.
יוצרים את הטריגר:
gcloud eventarc triggers create trigger-${SERVICE_NAME} \ --destination-run-service=${SERVICE_NAME} \ --destination-run-region=${REGION} \ --event-filters="type=google.cloud.audit.log.v1.written" \ --event-filters="serviceName=storage.googleapis.com" \ --event-filters="methodName=storage.objects.create" \ --service-account=${PROJECT_NUMBER}-compute@developer.gserviceaccount.com
הפעולה הזו יוצרת טריגר בשם
trigger-notifier.
פריסת שירות ליצירת תרשימים
פריסת שירות Cloud Run שמקבל אירועים של Query Runner, מאחזר נתונים מטבלה ב-BigQuery עבור מדינה ספציפית, ואז יוצר תרשים מהנתונים באמצעות Matplotlib. התרשים מועלה לקטגוריה של Cloud Storage.
עוברים לספרייה
chart-creator/python:cd ../../chart-creator/python
יוצרים את קובץ האימג' של הקונטיינר ומעבירים אותו בדחיפה:
export SERVICE_NAME=chart-creator docker build -t $REGION-docker.pkg.dev/$(gcloud config get-value project)/REPOSITORY/${SERVICE_NAME}:v1 . docker push $REGION-docker.pkg.dev/$(gcloud config get-value project)/REPOSITORY/${SERVICE_NAME}:v1
פורסים את קובץ האימג' של הקונטיינר ב-Cloud Run, ומעבירים את
BUCKET:gcloud run deploy ${SERVICE_NAME} \ --image $REGION-docker.pkg.dev/$(gcloud config get-value project)/REPOSITORY/${SERVICE_NAME}:v1 \ --update-env-vars BUCKET=${BUCKET} \ --allow-unauthenticated
כשתראו את כתובת ה-URL של השירות, סימן שהפריסה הושלמה.
יצירת טריגר לשירות Chart Creator
הטריגר של Eventarc לשירות Chart Creator שנפרס ב-Cloud Run מסנן הודעות שפורסמו בנושא Pub/Sub.
יוצרים את הטריגר:
gcloud eventarc triggers create trigger-${SERVICE_NAME} \ --destination-run-service=${SERVICE_NAME} \ --destination-run-region=${REGION} \ --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished"
הפעולה הזו יוצרת טריגר בשם
trigger-chart-creator.מגדירים את משתנה הסביבה של נושא Pub/Sub.
export TOPIC_QUERY_COMPLETED=$(basename $(gcloud eventarc triggers describe trigger-${SERVICE_NAME} --format='value(transport.pubsub.topic)'))
פריסת השירות Query Runner
פריסת שירות Cloud Run שמקבל אירועים מ-Cloud Scheduler, מאחזר נתונים ממערך נתונים ציבורי של COVID-19 ושומר את התוצאות בטבלה חדשה ב-BigQuery.
עוברים לספרייה
processing-pipelines:cd ../../..
יוצרים את קובץ האימג' של הקונטיינר ומעבירים אותו בדחיפה:
export SERVICE_NAME=query-runner docker build -t $REGION-docker.pkg.dev/$(gcloud config get-value project)/REPOSITORY/${SERVICE_NAME}:v1 -f Dockerfile . docker push $REGION-docker.pkg.dev/$(gcloud config get-value project)/REPOSITORY/${SERVICE_NAME}:v1
פורסים את קובץ האימג' של הקונטיינר ב-Cloud Run, ומעבירים את
PROJECT_IDו-TOPIC_QUERY_COMPLETED:gcloud run deploy ${SERVICE_NAME} \ --image $REGION-docker.pkg.dev/$(gcloud config get-value project)/REPOSITORY/${SERVICE_NAME}:v1 \ --update-env-vars PROJECT_ID=$(gcloud config get-value project),TOPIC_ID=${TOPIC_QUERY_COMPLETED} \ --allow-unauthenticated
כשתראו את כתובת ה-URL של השירות, סימן שהפריסה הושלמה.
יצירת טריגר לשירות Query Runner
הטריגר של Eventarc לשירות Query Runner שנפרס ב-Cloud Run מסנן הודעות שפורסמו בנושא Pub/Sub.
יוצרים את הטריגר:
gcloud eventarc triggers create trigger-${SERVICE_NAME} \ --destination-run-service=${SERVICE_NAME} \ --destination-run-region=${REGION} \ --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished"
הפעולה הזו יוצרת טריגר בשם
trigger-query-runner.מגדירים משתנה סביבה לנושא Pub/Sub.
export TOPIC_QUERY_SCHEDULED=$(gcloud eventarc triggers describe trigger-${SERVICE_NAME} --format='value(transport.pubsub.topic)')
תזמון המשימות
הפייפליין לעיבוד מופעל על ידי שתי משימות של Cloud Scheduler.
יוצרים אפליקציית App Engine שנדרשת על ידי Cloud Scheduler ומציינים מיקום מתאים:
export APP_ENGINE_LOCATION=LOCATION gcloud app create --region=${APP_ENGINE_LOCATION}
יוצרים שתי משימות של Cloud Scheduler שמפרסמות בנושא Pub/Sub פעם ביום:
gcloud scheduler jobs create pubsub cre-scheduler-uk \ --schedule="0 16 * * *" \ --topic=${TOPIC_QUERY_SCHEDULED} \ --message-body="United Kingdom"
gcloud scheduler jobs create pubsub cre-scheduler-cy \ --schedule="0 17 * * *" \ --topic=${TOPIC_QUERY_SCHEDULED} \ --message-body="Cyprus"
התזמון מצוין בפורמט unix-cron. לדוגמה,
0 16 * * *אומר שהעבודות יפעלו בשעה 16:00 (4 אחה"צ) לפי שעון UTC בכל יום.
הרצת צינור עיבוד הנתונים
קודם כול, מוודאים שכל הטריגרים נוצרו בהצלחה:
gcloud eventarc triggers list
הפלט אמור להיראות כך:
NAME: trigger-chart-creator TYPE: google.cloud.pubsub.topic.v1.messagePublished DESTINATION: Cloud Run service: chart-creator ACTIVE: Yes LOCATION: us-central1 NAME: trigger-notifier TYPE: google.cloud.audit.log.v1.written DESTINATION: Cloud Run service: notifier ACTIVE: Yes LOCATION: us-central1 NAME: trigger-query-runner TYPE: google.cloud.pubsub.topic.v1.messagePublished DESTINATION: Cloud Run service: query-runner ACTIVE: Yes LOCATION: us-central1מאחזרים את מזהי המשימות של Cloud Scheduler:
gcloud scheduler jobs list
הפלט אמור להיראות כך:
ID LOCATION SCHEDULE (TZ) TARGET_TYPE STATE cre-scheduler-cy us-central1 0 17 * * * (Etc/UTC) Pub/Sub ENABLED cre-scheduler-uk us-central1 0 16 * * * (Etc/UTC) Pub/Sub ENABLEDלמרות שהמשימות מתוזמנות להרצה מדי יום בשעות 16:00 ו-17:00, אפשר גם להריץ את המשימות של Cloud Scheduler באופן ידני:
gcloud scheduler jobs run cre-scheduler-cy gcloud scheduler jobs run cre-scheduler-uk
אחרי כמה דקות, מוודאים שיש שני תרשימים בקטגוריית Cloud Storage:
gcloud storage ls gs://${BUCKET}
הפלט אמור להיראות כך:
gs://BUCKET/chart-cyprus.png gs://BUCKET/chart-unitedkingdom.png
כל הכבוד! אתם אמורים לקבל גם שני אימיילים עם קישורים לתרשימים.
הסרת המשאבים
אם יצרתם פרויקט חדש בשביל המדריך הזה, מוחקים את הפרויקט. אם השתמשתם בפרויקט קיים ואתם רוצים לשמור אותו בלי השינויים שנוספו במדריך הזה, תצטרכו למחוק את המשאבים שנוצרו לצורך המדריך.
כדי למחוק Google Cloud פרויקט:
gcloud projects delete PROJECT_ID
מחיקת משאבי הדרכה
מוחקים את כל שירותי Cloud Run שפרסתם במדריך הזה:
gcloud run services delete SERVICE_NAME
כאשר
SERVICE_NAMEהוא שם השירות שבחרתם.אפשר גם למחוק שירותים של Cloud Run מGoogle Cloud המסוף.
מסירים את כל הגדרות ברירת המחדל של Google Cloud CLI שהוספתם במהלך ההגדרה של המדריך.
gcloud config unset project gcloud config unset run/region gcloud config unset run/platform gcloud config unset eventarc/location
מוחקים את כל הטריגרים של Eventarc שיצרתם במדריך הזה:
מחליפים אתgcloud eventarc triggers delete TRIGGER_NAME
TRIGGER_NAMEבשם הטריגר.מוחקים את התמונות מ-Artifact Registry.
gcloud artifacts docker images delete $REGION-docker.pkg.dev/$(gcloud config get-value project)/REPOSITORY/notifier:v1 gcloud artifacts docker images delete $REGION-docker.pkg.dev/$(gcloud config get-value project)/REPOSITORY/chart-creator:v1 gcloud artifacts docker images delete $REGION-docker.pkg.dev/$(gcloud config get-value project)/REPOSITORY/query-runner:v1
מוחקים את הקטגוריה, יחד עם כל האובייקטים שבקטגוריה:
gcloud storage rm --recursive gs://${BUCKET}/מחיקת המשימות ב-Cloud Scheduler:
gcloud scheduler jobs delete cre-scheduler-cy gcloud scheduler jobs delete cre-scheduler-uk