איך יוצרים צינור עיבוד נתונים ב-BigQuery ל-GKE באמצעות Eventarc

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

מטרות

במדריך הזה תבנו ותפרסו שלושה שירותי Google Kubernetes Engine ‏ (GKE) שפועלים באשכול GKE ומקבלים אירועים באמצעות Eventarc:

  1. מריץ השאילתות – מופעל כשמשימות של Cloud Scheduler מפרסמות הודעה בנושא Pub/Sub. השירות הזה משתמש ב-BigQuery API כדי לאחזר נתונים ממערך נתונים ציבורי של נגיף הקורונה, ושומר את התוצאות בטבלה חדשה ב-BigQuery.
  2. Chart creator (יוצר תרשימים) – מופעל כששירות ההרצה של השאילתות מפרסם הודעה בנושא Pub/Sub. השירות הזה יוצר תרשימים באמצעות ספריית התרשימים של Python‏, Matplotlib, ושומר את התרשימים בקטגוריה של Cloud Storage.
  3. ‫Notifier – מופעל על ידי יומני ביקורת כששירות יוצר התרשימים מאחסן תרשים בקטגוריה של Cloud Storage. השירות הזה משתמש בשירות האימייל SendGrid כדי לשלוח קישורים של התרשימים לכתובת אימייל.

התרשים הבא מציג את הארכיטקטורה הכללית:

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

עלויות

במסמך הזה משתמשים ברכיבים הבאים של Google Cloud, והשימוש בהם כרוך בתשלום:

בעזרת מחשבון העלויות אתם יכולים להעריך את העלויות בהתאם לשימוש הצפוי.

משתמשים חדשים של Google Cloud ? יכול להיות שאתם זכאים לתקופת ניסיון בחינם.

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

  1. נכנסים לחשבון Google Cloud . אנחנו ממליצים למשתמשים חדשים ב- Google Cloud ליצור חשבון כדי שיוכלו להעריך את הביצועים של המוצרים שלנו בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300$ להרצה, לבדיקה ולפריסה של עומסי העבודה.
  2. התקינו את ה-CLI של Google Cloud.

  3. אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.

  4. כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:

    gcloud init
  5. יוצרים או בוחרים פרויקט ב- Google Cloud .

    התפקידים שנדרשים כדי לבחור או ליצור פרויקט

    • Select a project: כדי לבחור פרויקט לא צריך תפקיד IAM ספציפי – אפשר לבחור כל פרויקט שקיבלתם בו תפקיד.
    • יצירת פרויקט: כדי ליצור פרויקט, צריך את התפקיד "יצירת פרויקטים" (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 .

  6. מוודאים שהחיוב מופעל בפרויקט ב- Google Cloud .

  7. מפעילים את ממשקי ה-API של Artifact Registry,‏ BigQuery,‏ Cloud Build,‏ Cloud Logging,‏ Cloud Scheduler,‏ Eventarc,‏ GKE,‏ Pub/Sub ו-Resource Manager, אם אחד מהם עדיין לא מופעל:

    התפקידים שנדרשים כדי להפעיל ממשקי API

    כדי להפעיל ממשקי API, צריך את ההרשאה serviceusage.services.enable. אם יצרתם את הפרויקט, סביר להניח שכבר יש לכם את ההרשאה הזו דרך התפקיד "בעלים" (roles/owner). אחרת, תוכלו לקבל את ההרשאה הזו דרך התפקיד "אדמין בממשק 'שימוש בשירות'" (roles/serviceusage.serviceUsageAdmin). איך מקצים תפקידים

    gcloud services enable artifactregistry.googleapis.com bigquery.googleapis.com cloudbuild.googleapis.com cloudresourcemanager.googleapis.com cloudscheduler.googleapis.com container.googleapis.com eventarc.googleapis.com pubsub.googleapis.com logging.googleapis.com
  8. התקינו את ה-CLI של Google Cloud.

  9. אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.

  10. כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:

    gcloud init
  11. יוצרים או בוחרים פרויקט ב- Google Cloud .

    התפקידים שנדרשים כדי לבחור או ליצור פרויקט

    • Select a project: כדי לבחור פרויקט לא צריך תפקיד IAM ספציפי – אפשר לבחור כל פרויקט שקיבלתם בו תפקיד.
    • יצירת פרויקט: כדי ליצור פרויקט, צריך את התפקיד "יצירת פרויקטים" (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 .

  12. מוודאים שהחיוב מופעל בפרויקט ב- Google Cloud .

  13. מפעילים את ממשקי ה-API של Artifact Registry,‏ BigQuery,‏ Cloud Build,‏ Cloud Logging,‏ Cloud Scheduler,‏ Eventarc,‏ GKE,‏ Pub/Sub ו-Resource Manager, אם אחד מהם עדיין לא מופעל:

    התפקידים שנדרשים כדי להפעיל ממשקי API

    כדי להפעיל ממשקי API, צריך את ההרשאה serviceusage.services.enable. אם יצרתם את הפרויקט, סביר להניח שכבר יש לכם את ההרשאה הזו דרך התפקיד "בעלים" (roles/owner). אחרת, תוכלו לקבל את ההרשאה הזו דרך התפקיד "אדמין בממשק 'שימוש בשירות'" (roles/serviceusage.serviceUsageAdmin). איך מקצים תפקידים

    gcloud services enable artifactregistry.googleapis.com bigquery.googleapis.com cloudbuild.googleapis.com cloudresourcemanager.googleapis.com cloudscheduler.googleapis.com container.googleapis.com eventarc.googleapis.com pubsub.googleapis.com logging.googleapis.com
  14. ב-Cloud Storage, מפעילים את יומני הביקורת לסוגי הגישה לנתונים ADMIN_READ,‏ DATA_WRITE ו-DATA_READ.

    1. קוראים את מדיניות ניהול הזהויות והרשאות הגישה (IAM) שמשויכת לפרויקט, לתיקייה או לארגון ב- Google Cloud , ושומרים אותה בקובץ זמני:
      gcloud projects get-iam-policy PROJECT_ID > /tmp/policy.yaml
    2. פותחים את הקובץ /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
    3. כותבים את מדיניות ה-IAM החדשה:

      gcloud projects set-iam-policy PROJECT_ID /tmp/policy.yaml

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

  15. מגדירים את ברירות המחדל שמשמשות במדריך הזה:
    CLUSTER_NAME=events-cluster
    CLUSTER_LOCATION=us-central1
    PROJECT_ID=PROJECT_ID
    gcloud config set project $PROJECT_ID
    gcloud config set eventarc/location $CLUSTER_LOCATION

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

יצירת מפתח API של SendGrid

‫SendGrid הוא ספק אימייל מבוסס-ענן שמאפשר לשלוח אימיילים בלי לתחזק שרתי אימייל.

  1. נכנסים ל-SendGrid ועוברים אל Settings (הגדרות) > API Keys (מפתחות API).
  2. לוחצים על Create API Key.
  3. בוחרים את ההרשאות למפתח. כדי לשלוח אימייל, למפתח צריכה להיות לפחות הרשאת Mail Send.
  4. לוחצים על שמירה כדי ליצור את המפתח.
  5. המערכת של SendGrid יוצרת מפתח חדש. זהו העותק היחיד של המפתח, לכן חשוב להעתיק אותו ולשמור אותו לשימוש מאוחר יותר.

יצירת אשכול GKE

יוצרים אשכול עם איחוד זהויות של עומסי עבודה ל-GKE כדי שתהיה לו גישה לשירותי Google Cloud מאפליקציות שפועלות ב-GKE. כדי להעביר אירועים באמצעות Eventarc, צריך גם את איחוד הזהויות של עומסי עבודה ל-GKE.

  1. יוצרים אשכול GKE עם התוספים HttpLoadBalancing ו-HorizontalPodAutoscaling:

    gcloud container clusters create $CLUSTER_NAME \
        --addons=HttpLoadBalancing,HorizontalPodAutoscaling \
        --machine-type=n1-standard-4 \
        --enable-autoscaling --min-nodes=2 --max-nodes=10 \
        --no-issue-client-certificate --num-nodes=2 \
        --logging=SYSTEM,WORKLOAD \
        --monitoring=SYSTEM \
        --scopes=cloud-platform,logging-write,monitoring-write,pubsub \
        --region=$CLUSTER_LOCATION \
        --release-channel=rapid \
        --workload-pool=$PROJECT_ID.svc.id.goog
    
  2. ממתינים כמה דקות עד שהאשכול ייווצר. במהלך התהליך, יכול להיות שיופיעו אזהרות שאפשר להתעלם מהן. אחרי שהאשכול נוצר, הפלט אמור להיראות כך:

    Creating cluster ...done.
    Created [https://container.googleapis.com/v1/projects/my-project/zones/us-central1/clusters/events-cluster].
    
  3. מעדכנים את הקובץ kubeconfig עם פרטי הכניסה ופרטי נקודת הקצה כדי להפנות את kubectl לאשכול GKE:

    gcloud container clusters get-credentials $CLUSTER_NAME \
        --region=$CLUSTER_LOCATION
  4. יוצרים מאגר רגיל ב-Artifact Registry לאחסון קובץ אימג' של קונטיינר Docker:

    gcloud artifacts repositories create REPOSITORY \
        --repository-format=docker \
        --location=$CLUSTER_LOCATION

    מחליפים את REPOSITORY בשם ייחודי למאגר.

הגדרת חשבונות השירות

  1. כדי לאפשר לצומתי GKE לשלוף קובצי אימג' של קונטיינרים מ-Artifact Registry, צריך להקצות את התפקיד קורא של Artifact Registry (roles/artifactregistry.reader) בפרויקט לחשבון השירות שמשמש כברירת המחדל של Compute Engine, שבו משתמשים צומתי האשכול:

    PROJECT_NUMBER="$(gcloud projects describe $(gcloud config get-value project) --format='value(projectNumber)')"
    
    gcloud projects add-iam-policy-binding $PROJECT_ID \
      --member "serviceAccount:$PROJECT_NUMBER-compute@developer.gserviceaccount.com" \
      --condition=None \
      --role "roles/artifactregistry.reader"
  2. כדי לאפשר לשירותי GKE לשלוח שאילתות ל-BigQuery ולכתוב בו, לפרסם ב-Pub/Sub ולהעלות תרשימים ל-Cloud Storage, צריך להקצות את התפקידים BigQuery Data Editor‏ (roles/bigquery.dataEditor),‏ BigQuery Job User‏ (roles/bigquery.jobUser),‏ Pub/Sub Publisher‏ (roles/pubsub.publisher) ו-Storage Object Admin‏ (roles/storage.objectAdmin) בפרויקט לחשבון השירות default של Kubernetes במרחב השמות default:

    gcloud projects add-iam-policy-binding $PROJECT_ID \
      --member "principal://iam.googleapis.com/projects/$PROJECT_NUMBER/locations/global/workloadIdentityPools/$PROJECT_ID.svc.id.goog/subject/ns/default/sa/default" \
      --condition=None \
      --role "roles/bigquery.dataEditor"
    
    gcloud projects add-iam-policy-binding $PROJECT_ID \
      --member "principal://iam.googleapis.com/projects/$PROJECT_NUMBER/locations/global/workloadIdentityPools/$PROJECT_ID.svc.id.goog/subject/ns/default/sa/default" \
      --condition=None \
      --role "roles/bigquery.jobUser"
    
    gcloud projects add-iam-policy-binding $PROJECT_ID \
      --member "principal://iam.googleapis.com/projects/$PROJECT_NUMBER/locations/global/workloadIdentityPools/$PROJECT_ID.svc.id.goog/subject/ns/default/sa/default" \
      --condition=None \
      --role "roles/pubsub.publisher"
    
    gcloud projects add-iam-policy-binding $PROJECT_ID \
      --member "principal://iam.googleapis.com/projects/$PROJECT_NUMBER/locations/global/workloadIdentityPools/$PROJECT_ID.svc.id.goog/subject/ns/default/sa/default" \
      --condition=None \
      --role "roles/storage.objectAdmin"

הפעלת יעדי GKE

כדי לאפשר ל-Eventarc לנהל משאבים באשכול GKE, צריך להפעיל יעדי GKE ולקשר את חשבון השירות של Eventarc לתפקידים הנדרשים.

  1. מפעילים את יעדי GKE ל-Eventarc:

    gcloud eventarc gke-destinations init
  2. בהנחיה לקשר את התפקידים הנדרשים, מזינים y.

    התפקידים הבאים מקושרים:

    • roles/compute.viewer
    • roles/container.developer
    • roles/iam.serviceAccountAdmin

יצירת קטגוריה של Cloud Storage

יוצרים קטגוריה של Cloud Storage באותו אזור שבו נמצא שירות GKE, כדי לשמור את התרשימים, ונותנים לחשבון גישת קריאה (roles/storage.objectViewer) כדי להציג את התרשימים שנוצרו:

export BUCKET="$(gcloud config get-value core/project)-charts"
gcloud storage buckets create gs://${BUCKET} --location=$CLUSTER_LOCATION
gcloud storage buckets update gs://${BUCKET} --uniform-bucket-level-access
gcloud storage buckets add-iam-policy-binding gs://${BUCKET} \
    --member="user:$(gcloud config get-value core/account)" \
    --role=roles/storage.objectViewer

שכפול המאגר

משכפלים את המאגר ב-GitHub.

git clone https://github.com/GoogleCloudPlatform/eventarc-samples
cd eventarc-samples/processing-pipelines

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

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

  1. יוצרים חשבון שירות בשם eventarc-triggers-test-sa:

    TRIGGER_GSA=eventarc-triggers-test-sa
    gcloud iam service-accounts create $TRIGGER_GSA
  2. מקצים לחשבון השירות את התפקידים pubsub.subscriber, ‏monitoring.metricWriter ו-eventarc.eventReceiver:

    PROJECT_ID=$(gcloud config get-value project)
    
    gcloud projects add-iam-policy-binding $PROJECT_ID \
        --member "serviceAccount:$TRIGGER_GSA@$PROJECT_ID.iam.gserviceaccount.com" \
        --condition=None \
        --role "roles/pubsub.subscriber"
    
    gcloud projects add-iam-policy-binding $PROJECT_ID \
        --member "serviceAccount:$TRIGGER_GSA@$PROJECT_ID.iam.gserviceaccount.com" \
        --condition=None \
        --role "roles/monitoring.metricWriter"
    
    gcloud projects add-iam-policy-binding $PROJECT_ID \
        --member "serviceAccount:$TRIGGER_GSA@$PROJECT_ID.iam.gserviceaccount.com" \
        --condition=None \
        --role "roles/eventarc.eventReceiver"

פריסת שירות ההתראות

מהספרייה bigquery/notifier/python, פורסים שירות GKE שמקבל אירועים של יוצר התרשימים ומשתמש ב-SendGrid כדי לשלוח באימייל קישורים לתרשימים שנוצרו.

  1. יוצרים את קובץ האימג' של הקונטיינר ומעבירים אותו בדחיפה:

    pushd bigquery/notifier/python
    export SERVICE_NAME=notifier
    docker build -t $CLUSTER_LOCATION-docker.pkg.dev/$(gcloud config get-value project)/REPOSITORY/${SERVICE_NAME}:v1 .
    docker push $CLUSTER_LOCATION-docker.pkg.dev/$(gcloud config get-value project)/REPOSITORY/${SERVICE_NAME}:v1
    popd
  2. יוצרים פריסת Kubernetes לקובץ האימג' של הקונטיינר ומגדירים את משתני הסביבה הנדרשים, כולל כתובת לשליחת אימיילים ומפתח ה-API של SendGrid:

    export TO_EMAILS=EMAIL_ADDRESS
    export SENDGRID_API_KEY=YOUR_SENDGRID_API_KEY
    kubectl create deployment ${SERVICE_NAME} \
        --image=$CLUSTER_LOCATION-docker.pkg.dev/$(gcloud config get-value project)/REPOSITORY/${SERVICE_NAME}:v1
    kubectl set env deployment/${SERVICE_NAME} \
        TO_EMAILS=${TO_EMAILS} \
        SENDGRID_API_KEY=${SENDGRID_API_KEY} \
        BUCKET=${BUCKET}

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

    • ‫EMAIL_ADDRESS: כתובת אימייל שאליה יישלחו הקישורים לתרשימים שנוצרו
    • ‫YOUR_SENDGRID_API_KEY: מפתח ה-API של SendGrid שציינתם קודם
    • ‫REPOSITORY: השם של מאגר Artifact Registry
  3. חשיפת הפריסה כשירות Kubernetes:

    kubectl expose deployment ${SERVICE_NAME} \
        --type=ClusterIP --port=80 --target-port=8080

יצירת טריגר לשירות ההתראות

יוצרים טריגר של Eventarc לשירות ההתראות שנפרס ב-GKE, שמסנן את יומני הביקורת של Cloud Storage לפי הקטגוריה שצוינה ב-Cloud Storage, ושהערך של methodName הוא storage.objects.create:

gcloud eventarc triggers create trigger-${SERVICE_NAME}-gke \
      --destination-gke-cluster=$CLUSTER_NAME \
      --destination-gke-location=$CLUSTER_LOCATION \
      --destination-gke-namespace=default \
      --destination-gke-service=$SERVICE_NAME \
      --destination-gke-path=/ \
      --event-filters="type=google.cloud.audit.log.v1.written" \
      --event-filters="serviceName=storage.googleapis.com" \
      --event-filters="methodName=storage.objects.create" \
      --event-filters-path-pattern="resourceName=/projects/_/buckets/$BUCKET/objects/*" \
      --service-account=$TRIGGER_GSA@$PROJECT_ID.iam.gserviceaccount.com

הפעולה הזו יוצרת טריגר בשם trigger-notifier-gke.

פריסת השירות ליצירת תרשימים

מהספרייה bigquery/chart-creator/python, פורסים שירות GKE שמקבל אירועים של כלי להרצת שאילתות, מאחזר נתונים מטבלה ב-BigQuery עבור מדינה ספציפית, ואז יוצר תרשים מהנתונים באמצעות Matplotlib. התרשים מועלה לקטגוריה של Cloud Storage.

  1. יוצרים את קובץ האימג' של הקונטיינר ומעבירים אותו בדחיפה:

    pushd bigquery/chart-creator/python
    export SERVICE_NAME=chart-creator
    docker build -t $CLUSTER_LOCATION-docker.pkg.dev/$(gcloud config get-value project)/REPOSITORY/${SERVICE_NAME}:v1 .
    docker push $CLUSTER_LOCATION-docker.pkg.dev/$(gcloud config get-value project)/REPOSITORY/${SERVICE_NAME}:v1
    popd
  2. יוצרים פריסת Kubernetes לקובץ האימג' של הקונטיינר ומגדירים את משתנה הסביבה BUCKET:

    kubectl create deployment ${SERVICE_NAME} \
        --image=$CLUSTER_LOCATION-docker.pkg.dev/$(gcloud config get-value project)/REPOSITORY/${SERVICE_NAME}:v1
    kubectl set env deployment/${SERVICE_NAME} \
        BUCKET=${BUCKET}
  3. חושפים את הפריסה כשירות Kubernetes:

    kubectl expose deployment ${SERVICE_NAME} \
        --type=ClusterIP --port=80 --target-port=8080

יצירת טריגר לשירות ליצירת תרשימים

יוצרים טריגר של Eventarc לשירות ליצירת תרשימים שנפרס ב-GKE, שמסנן הודעות שפורסמו בנושא Pub/Sub.

  1. יוצרים את הטריגר:

    gcloud eventarc triggers create trigger-${SERVICE_NAME}-gke \
        --destination-gke-cluster=$CLUSTER_NAME \
        --destination-gke-location=$CLUSTER_LOCATION \
        --destination-gke-namespace=default \
        --destination-gke-service=$SERVICE_NAME \
        --destination-gke-path=/ \
        --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \
        --service-account=$TRIGGER_GSA@$PROJECT_ID.iam.gserviceaccount.com

    הפעולה הזו יוצרת טריגר בשם trigger-chart-creator-gke.

  2. מגדירים את משתנה הסביבה של נושא Pub/Sub.

    export TOPIC_QUERY_COMPLETED=$(basename $(gcloud eventarc triggers describe trigger-${SERVICE_NAME}-gke --format='value(transport.pubsub.topic)'))

פריסת שירות להרצת שאילתות

מהספרייה processing-pipelines, פורסים שירות GKE שמקבל אירועים של Cloud Scheduler, מאחזר נתונים ממערך נתונים ציבורי של נגיף הקורונה ושומר את התוצאות בטבלה חדשה ב-BigQuery.

  1. יוצרים את קובץ האימג' של הקונטיינר ומעבירים אותו בדחיפה:

    export SERVICE_NAME=query-runner
    docker build -t $CLUSTER_LOCATION-docker.pkg.dev/$(gcloud config get-value project)/REPOSITORY/${SERVICE_NAME}:v1 -f Dockerfile .
    docker push $CLUSTER_LOCATION-docker.pkg.dev/$(gcloud config get-value project)/REPOSITORY/${SERVICE_NAME}:v1
  2. יוצרים פריסת Kubernetes לקובץ האימג' של הקונטיינר ומגדירים את משתני הסביבה PROJECT_ID ו-TOPIC_ID:

    kubectl create deployment ${SERVICE_NAME} \
        --image=$CLUSTER_LOCATION-docker.pkg.dev/$(gcloud config get-value project)/REPOSITORY/${SERVICE_NAME}:v1
    kubectl set env deployment/${SERVICE_NAME} \
        PROJECT_ID=$(gcloud config get-value project) \
        TOPIC_ID=${TOPIC_QUERY_COMPLETED}
  3. חושפים את הפריסה כשירות Kubernetes:

    kubectl expose deployment ${SERVICE_NAME} \
        --type=ClusterIP --port=80 --target-port=8080

יצירת טריגר לשירות של מריץ השאילתות

יוצרים טריגר של Eventarc לשירות של מריץ השאילתות שנפרס ב-GKE, שמסנן הודעות שפורסמו בנושא Pub/Sub.

  1. יוצרים את הטריגר:

    gcloud eventarc triggers create trigger-${SERVICE_NAME}-gke \
        --destination-gke-cluster=$CLUSTER_NAME \
        --destination-gke-location=$CLUSTER_LOCATION \
        --destination-gke-namespace=default \
        --destination-gke-service=$SERVICE_NAME \
        --destination-gke-path=/ \
        --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \
        --service-account=$TRIGGER_GSA@$PROJECT_ID.iam.gserviceaccount.com

    הפעולה הזו יוצרת טריגר בשם trigger-query-runner-gke.

  2. מגדירים משתנה סביבה לנושא Pub/Sub.

    export TOPIC_QUERY_SCHEDULED=$(basename $(gcloud eventarc triggers describe trigger-${SERVICE_NAME}-gke --format='value(transport.pubsub.topic)'))

תזמון המשימות

צינור עיבוד הנתונים מופעל על ידי שתי משימות של Cloud Scheduler. יוצרים שתי משימות ב-Cloud Scheduler שמפרסמות בנושא Pub/Sub פעם ביום:

gcloud scheduler jobs create pubsub cre-scheduler-uk \
      --location=$CLUSTER_LOCATION \
      --schedule="0 16 * * *" \
      --topic=${TOPIC_QUERY_SCHEDULED} \
      --message-body="United Kingdom"
gcloud scheduler jobs create pubsub cre-scheduler-cy \
      --location=$CLUSTER_LOCATION \
      --schedule="0 17 * * *" \
      --topic=${TOPIC_QUERY_SCHEDULED} \
      --message-body="Cyprus"

התזמון מצוין בפורמט unix-cron. לדוגמה, 0 16 * * * פירושו שהמשימה פועלת בשעה 16:00 (4 אחר הצהריים) לפי שעון UTC בכל יום.

הרצת צינור עיבוד הנתונים

  1. מוודאים שכל הטריגרים נוצרו:

    gcloud eventarc triggers list

    הפלט אמור להיראות כך:

    NAME                       TYPE                                            DESTINATION         ACTIVE  LOCATION
    trigger-chart-creator-gke  google.cloud.pubsub.topic.v1.messagePublished   GKE:chart-creator   Yes     us-central1
    trigger-notifier-gke       google.cloud.audit.log.v1.written               GKE:notifier        Yes     us-central1
    trigger-query-runner-gke   google.cloud.pubsub.topic.v1.messagePublished   GKE:query-runner    Yes     us-central1
    
  2. אחזור מזהי המשימות של Cloud Scheduler:

    gcloud scheduler jobs list --location=$CLUSTER_LOCATION

    הפלט אמור להיראות כך:

    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
    
  3. למרות שהמשימות מתוזמנות לפעול מדי יום בשעות 16:00 ו-17:00, אפשר גם להריץ את המשימות של Cloud Scheduler באופן ידני:

    gcloud scheduler jobs run cre-scheduler-cy --location=$CLUSTER_LOCATION
    gcloud scheduler jobs run cre-scheduler-uk --location=$CLUSTER_LOCATION
  4. אחרי כמה דקות, מוודאים שיש שני תרשימים בקטגוריה של Cloud Storage:

    gcloud storage ls gs://${BUCKET}

    הפלט אמור להיראות כך:

    gs://PROJECT_ID-charts/chart-cyprus.png
    gs://PROJECT_ID-charts/chart-unitedkingdom.png
    

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

הסרת המשאבים

אם יצרתם פרויקט חדש בשביל המדריך הזה, מחקו את הפרויקט. אם השתמשתם בפרויקט קיים ואתם רוצים לשמור אותו בלי השינויים שנוספו במדריך הזה, תצטרכו למחוק את המשאבים שנוצרו לצורך המדריך.

    כדי למחוק פרויקט ב- Google Cloud :

    gcloud projects delete PROJECT_ID

מחיקת המשאבים של המדריך

  1. מוחקים את שירותי Kubernetes ואת הפריסות שפרסתם במדריך הזה, ומוחקים את אשכול GKE:

    kubectl delete service notifier chart-creator query-runner
    kubectl delete deployment notifier chart-creator query-runner
    gcloud container clusters delete $CLUSTER_NAME --region=$CLUSTER_LOCATION
  2. מוחקים את כל הטריגרים של Eventarc שיצרתם במדריך הזה:

    gcloud eventarc triggers delete TRIGGER_NAME
    

    מחליפים את TRIGGER_NAME בשם הטריגר.

  3. מוחקים את קובצי האימג' מ-Artifact Registry:

    gcloud artifacts docker images delete $CLUSTER_LOCATION-docker.pkg.dev/$(gcloud config get-value project)/REPOSITORY/notifier:v1
    gcloud artifacts docker images delete $CLUSTER_LOCATION-docker.pkg.dev/$(gcloud config get-value project)/REPOSITORY/chart-creator:v1
    gcloud artifacts docker images delete $CLUSTER_LOCATION-docker.pkg.dev/$(gcloud config get-value project)/REPOSITORY/query-runner:v1
  4. מחיקת מאגר Artifact Registry:

    gcloud artifacts repositories delete REPOSITORY \
        --location=$CLUSTER_LOCATION
  5. מוחקים את הקטגוריה ואת כל האובייקטים שבתוכה:

    gcloud storage rm --recursive gs://${BUCKET}/
  6. מוחקים את המשימות ב-Cloud Scheduler:

    gcloud scheduler jobs delete cre-scheduler-cy --location=$CLUSTER_LOCATION
    gcloud scheduler jobs delete cre-scheduler-uk --location=$CLUSTER_LOCATION
  7. מסירים את כל הגדרות ברירת המחדל של Google Cloud CLI שהוספתם במהלך ההגדרה של המדריך:

    gcloud config unset project
    gcloud config unset eventarc/location

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