הפעלת Cloud Run עם אירועי Eventarc

1. מבוא

894762ebb681671c.png

‫Cloud Run מאפשר להריץ קונטיינרים ללא שמירת מצב בסביבה מנוהלת. הוא מבוסס על Knative בקוד פתוח, ומאפשר לכם לבחור אם להריץ את הקונטיינרים שלכם בניהול מלא באמצעות Cloud Run, או באשכול Google Kubernetes Engine באמצעות Cloud Run for Anthos.

cb762f29e9183a3f.png

‫Eventarc מאפשר לחבר בקלות שירותים שונים (Cloud Run, ‏ Cloud Functions, ‏ Workflows) לאירועים ממגוון מקורות. הוא מאפשר לכם לבנות ארכיטקטורות מבוססות-אירועים שבהן מיקרו-שירותים (microservices) הם בצימוד חלש ומבוזרים. השירות גם מטפל בהעברה, בהצגה, באבטחה, בהרשאה ובטיפול בשגיאות של אירועים, וכך משפר את הגמישות של המפתחים ואת עמידות האפליקציה.

ב-Codelab הזה תלמדו על Eventarc. באופן ספציפי יותר, תקשיבו לאירועים מ-Pub/Sub, מ-Cloud Storage ומיומני הביקורת של Cloud באמצעות Eventarc ותעבירו אותם לשירות Cloud Run.

מה תלמדו

  • החזון של Eventarc
  • חיפוש אירועים ב-Eventarc
  • יצירת יעד ב-Cloud Run
  • יצירת טריגר ל-Pub/Sub
  • יצירת טריגר ל-Cloud Storage
  • יצירת טריגר ליומני ביקורת של Cloud
  • הכרת ממשק המשתמש של Eventarc

2. החזון של Eventarc

המטרה של Eventarc היא להעביר אירועים ממקורות שונים של אירועים ב-Google, ב-Google Cloud ובצד שלישי ליעדים של אירועים ב-Google Cloud.

59b147dc030b2b0b.png

מקורות של Google Cloud

מקורות אירועים שהם מוצרים בבעלות Google Cloud

מקורות של Google

מקורות אירועים שהם מוצרים בבעלות Google, כמו Gmail,‏ Hangouts,‏ Android Management ועוד

מקורות מותאמים אישית

מקורות אירועים שאינם מוצרים בבעלות Google ונוצרים על ידי משתמשי קצה

מקורות צד שלישי

מקורות אירועים שלא נמצאים בבעלות Google ולא נוצרו על ידי הלקוח. השירות כולל מקורות אירועים פופולריים כמו Check Point CloudGuard, ‏ Datadog, ‏ ForgeRock, ‏ Lacework ועוד, שנמצאים בבעלות של ספקי צד שלישי ושותפים ומתוחזקים על ידם.

האירועים מנורמלים לפורמט CloudEvents v1.0 כדי לאפשר פעולה הדדית בין שירותים. ‫CloudEvents הוא מפרט פתוח שאינו תלוי בספק, ומתאר נתוני אירועים בפורמטים נפוצים. הוא מאפשר אינטראופרביליות בין שירותים, פלטפורמות ומערכות.

3. הגדרה ודרישות

הגדרת סביבה בקצב אישי

  1. נכנסים ל-מסוף Google Cloud ויוצרים פרויקט חדש או משתמשים בפרויקט קיים. אם עדיין אין לכם חשבון Gmail או Google Workspace, אתם צריכים ליצור חשבון.

b35bf95b8bf3d5d8.pnga99b7ace416376c4.pngbd84a6d3004737c5.png

  • שם הפרויקט הוא השם המוצג למשתתפים בפרויקט. זו מחרוזת של תווים שלא נמצאת בשימוש ב-Google APIs, ואפשר לעדכן אותה בכל שלב.
  • מזהה הפרויקט חייב להיות ייחודי לכל הפרויקטים ב-Google Cloud, והוא קבוע (אי אפשר לשנות אותו אחרי שהוא מוגדר). מסוף Cloud יוצר באופן אוטומטי מחרוזת ייחודית. בדרך כלל לא צריך לדעת מה היא. ברוב סדנאות ה-Codelab, תצטרכו להפנות למזהה הפרויקט (ובדרך כלל הוא מזוהה כ-PROJECT_ID), אז אם אתם לא אוהבים אותו, תוכלו ליצור מזהה אקראי אחר, או לנסות ליצור מזהה משלכם ולראות אם הוא זמין. אחרי שהפרויקט נוצר, הוא 'קפוא'.
  • יש ערך שלישי, מספר פרויקט, שמשמש חלק מממשקי ה-API. מידע נוסף על שלושת הערכים האלה מופיע במאמרי העזרה.
  1. בשלב הבא, תצטרכו להפעיל את החיוב במסוף Cloud כדי להשתמש במשאבי Cloud או בממשקי API. העלות של התרגול הזה לא אמורה להיות גבוהה, ואולי לא תהיה עלות בכלל. כדי לכבות את המשאבים ולא לחייב אתכם מעבר למה שמוסבר במדריך הזה, צריך לפעול לפי ההוראות לניקוי שמופיעות בסוף ה-Codelab. משתמשים חדשים ב-Google Cloud זכאים לתוכנית תקופת ניסיון בחינם בשווי 300$.

מפעילים את Cloud Shell

אפשר להפעיל את Google Cloud מרחוק מהמחשב הנייד, אבל ב-Codelab הזה נשתמש ב-Google Cloud Shell, סביבת שורת פקודה שפועלת בענן.

ב-GCP Console, לוחצים על סמל Cloud Shell בסרגל הכלים שבפינה הימנית העליונה:

55efc1aaa7a4d3ad.png

הקצאת המשאבים והחיבור לסביבה יימשכו רק כמה רגעים. בסיום התהליך, אמור להופיע משהו כזה:

7ffe5cbb04455448.png

המכונה הווירטואלית הזו כוללת את כל הכלים שדרושים למפתחים. יש בה ספריית בית בנפח מתמיד של 5GB והיא פועלת ב-Google Cloud, מה שמשפר מאוד את הביצועים והאימות ברשת. אפשר לבצע את כל העבודה ב-Lab הזה רק באמצעות דפדפן.

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

ב-Cloud Shell, מוודאים שמזהה הפרויקט מוגדר:

PROJECT_ID=your-project-id
gcloud config set project $PROJECT_ID

4. פריסת שירות Cloud Run

פריסת שירות Cloud Run לקבלת אירועים. תפרסו את קונטיינר Hello של Cloud Run שמתעד ביומן את התוכן של CloudEvents.

קודם כול, מפעילים את השירותים הנדרשים ל-Cloud Run:

gcloud services enable run.googleapis.com

פורסים את קונטיינר hello ב-Cloud Run:

REGION=us-central1
SERVICE_NAME=hello

gcloud run deploy $SERVICE_NAME \
  --allow-unauthenticated \
  --image=gcr.io/cloudrun/hello \
  --region=$REGION

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

5. גילוי אירועים

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

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

gcloud beta eventarc attributes types list

NAME                                           DESCRIPTION
google.cloud.audit.log.v1.written              Cloud Audit Log written
google.cloud.pubsub.topic.v1.messagePublished  Cloud Pub/Sub message published
google.cloud.storage.object.v1.archived         Cloud Storage: Sent when a live version of an (object versioned) object is archived or deleted.
google.cloud.storage.object.v1.deleted          Cloud Storage: Sent when an object has been permanently deleted.
google.cloud.storage.object.v1.finalized        Cloud Storage: Sent when a new object (or a new generation of an existing object).
google.cloud.storage.object.v1.metadataUpdated  Cloud Storage: Sent when the metadata of an existing object changes.

כדי לקבל מידע נוסף על כל סוג אירוע:

gcloud beta eventarc attributes types describe google.cloud.audit.log.v1.written

attributes: type,serviceName,methodName,resourceName
description: 'Cloud Audit Log: Sent when a log is written.'
name: google.cloud.audit.log.v1.written

כדי לראות את רשימת השירותים שפולטים סוג מסוים של אירוע:

gcloud beta eventarc attributes service-names list --type=google.cloud.audit.log.v1.written

SERVICE_NAME                                DISPLAY_NAME
accessapproval.googleapis.com               Access Approval
accesscontextmanager.googleapis.com         Access Context Manager
admin.googleapis.com                        Google Workspace Admin
aiplatform.googleapis.com                   AI Platform (under Vertex AI)
apigee.googleapis.com                       Apigee
apigeeconnect.googleapis.com                Apigee Connect
...
workflows.googleapis.com                    Workflows

כדי לראות את רשימת שמות השיטות (אירועי משנה) שכל שירות יכול לשלוח:

gcloud beta eventarc attributes method-names list --type=google.cloud.audit.log.v1.written --service-name=workflows.googleapis.com

METHOD_NAME
google.cloud.workflows.v1.Workflows.CreateWorkflow
google.cloud.workflows.v1.Workflows.DeleteWorkflow
google.cloud.workflows.v1.Workflows.GetWorkflow
google.cloud.workflows.v1.Workflows.ListWorkflows
google.cloud.workflows.v1.Workflows.UpdateWorkflow
google.cloud.workflows.v1beta.Workflows.CreateWorkflow
google.cloud.workflows.v1beta.Workflows.DeleteWorkflow
google.cloud.workflows.v1beta.Workflows.GetWorkflow
google.cloud.workflows.v1beta.Workflows.ListWorkflows
google.cloud.workflows.v1beta.Workflows.UpdateWorkflow

6. יצירת טריגר Pub/Sub

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

הגדרה

לפני שיוצרים טריגרים, צריך להפעיל את השירותים הנדרשים ל-Eventarc:

gcloud services enable eventarc.googleapis.com

צריך גם חשבון שירות לשימוש בטריגרים. יוצרים חשבון שירות:

SERVICE_ACCOUNT=eventarc-trigger-sa

gcloud iam service-accounts create $SERVICE_ACCOUNT

יצירה

יוצרים טריגר לסינון אירועים שפורסמו בנושא Pub/Sub לשירות Cloud Run שפרסנו:

TRIGGER_NAME=trigger-pubsub

gcloud eventarc triggers create $TRIGGER_NAME \
  --destination-run-service=$SERVICE_NAME \
  --destination-run-region=$REGION \
  --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \
  --location=$REGION \
  --service-account=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com

בדיקה

טריגר Pub/Sub יוצר נושא מאחורי הקלעים. בואו נגלה את הערך ונשייך אותו למשתנה:

TOPIC_ID=$(gcloud eventarc triggers describe $TRIGGER_NAME --location $REGION --format='value(transport.pubsub.topic)')

משתמשים ב-gcloud כדי לפרסם הודעה בנושא:

gcloud pubsub topics publish $TOPIC_ID --message="Hello World"

שירות Cloud Run מתעד ביומן את גוף ההודעה הנכנסת. אפשר לראות את זה בקטע Logs (יומנים) של מופע Cloud Run:

69e0177e04a0d1af.png

יצירה באמצעות נושא Pub/Sub קיים

כברירת מחדל, כשיוצרים טריגר Pub/Sub, ‏ Eventarc יוצר נושא מאחורי הקלעים כדי שתוכלו להשתמש בו כנושא העברה בין האפליקציה לבין שירות Cloud Run. האפשרות הזו שימושית ליצירה קלה ומהירה של טריגר שמגובה על ידי Pub/Sub, אבל לפעמים רוצים להשתמש בנושא קיים. בעזרת Eventarc אפשר לציין נושא Pub/Sub קיים באותו פרויקט עם --transport-topic gcloud flag.

כדי לראות איך זה עובד, יוצרים נושא Pub/Sub לשימוש כנושא העברה:

TOPIC_ID=eventarc-topic

gcloud pubsub topics create $TOPIC_ID

יצירת טריגר:

TRIGGER_NAME=trigger-pubsub-existing

gcloud eventarc triggers create $TRIGGER_NAME \
  --destination-run-service=$SERVICE_NAME \
  --destination-run-region=$REGION \
  --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \
  --location=$REGION \
  --transport-topic=projects/$PROJECT_ID/topics/$TOPIC_ID \
  --service-account=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com

כדי לבדוק את הטריגר, שולחים הודעה לנושא:

gcloud pubsub topics publish $TOPIC_ID --message="Hello again"

7. יצירת טריגר Cloud Storage

בשלב הזה, תיצרו טריגר להאזנה לאירועים מ-Cloud Storage.

הגדרה

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

BUCKET_NAME=eventarc-gcs-$PROJECT_ID

gsutil mb -l $REGION gs://$BUCKET_NAME

מקצים את התפקיד eventarc.eventReceiver, כדי שאפשר יהיה להשתמש בחשבון השירות בטריגר של Cloud Storage:

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --role roles/eventarc.eventReceiver \
  --member serviceAccount:$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com

בנוסף, צריך להוסיף את התפקיד pubsub.publisher לחשבון השירות של Cloud Storage עבור טריגרים של Cloud Storage:

SERVICE_ACCOUNT_STORAGE=$(gsutil kms serviceaccount -p $PROJECT_ID)

gcloud projects add-iam-policy-binding $PROJECT_ID \
    --member serviceAccount:$SERVICE_ACCOUNT_STORAGE \
    --role roles/pubsub.publisher

יצירה

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

TRIGGER_NAME=trigger-storage

gcloud eventarc triggers create $TRIGGER_NAME \
  --destination-run-service=$SERVICE_NAME \
  --destination-run-region=$REGION \
  --event-filters="type=google.cloud.storage.object.v1.finalized" \
  --event-filters="bucket=$BUCKET_NAME" \
  --location=$REGION \
  --service-account=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com

בדיקה

כדי לוודא שהטריגר נוצר בהצלחה, מציגים את כל הטריגרים:

gcloud eventarc triggers list

מעלים קובץ לקטגוריה של Cloud Storage:

echo "Hello World" > random.txt
gsutil cp random.txt gs://$BUCKET_NAME/random.txt

אם בודקים את היומנים של שירות Cloud Run ב-Cloud Console, אמור להופיע האירוע שהתקבל:

904cfc93bb8e8df1.png

8. יצירת טריגר של יומני ביקורת של Cloud

למרות שטריגר של Cloud Storage הוא הדרך הטובה יותר להאזין לאירועים ב-Cloud Storage, בשלב הזה יוצרים טריגר של יומן ביקורת ב-Cloud כדי לעשות את אותו הדבר.

הגדרה

כדי לקבל אירועים משירות, צריך להפעיל את Cloud Audit Logs. בתפריט הימני העליון של Cloud Console, בוחרים באפשרות IAM & Admin ואז באפשרות Audit Logs. ברשימת השירותים, מסמנים את Google Cloud Storage:

3c654597faed237c.png

בצד שמאל, מוודאים שהאפשרויות Admin, Read ו-Write מסומנות ולוחצים על Save:

1deb3ad78f11dd5f.png

יצירה

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

TRIGGER_NAME=trigger-auditlog-storage

gcloud eventarc triggers create $TRIGGER_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" \
  --event-filters-path-pattern="resourceName=/projects/_/buckets/$BUCKET_NAME/objects/*" \
  --location=$REGION \
  --service-account=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com

בדיקה

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

gcloud eventarc triggers list

השדה ACTIVE אמור להיות Yes:

NAME                          TYPE                                       DESTINATION               ACTIVE
trigger-auditlog-storage  google.cloud.audit.log.v1.written              Cloud Run service: hello  Yes

מעלים את אותו קובץ לקטגוריה של Cloud Storage כמו קודם:

gsutil cp random.txt gs://$BUCKET_NAME/random.txt

אם בודקים את היומנים של שירות Cloud Run ב-Cloud Console, אמור להופיע האירוע שהתקבל:

7be7859bcc8976f8.png

9. הכרת ממשק המשתמש של Eventarc

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

עוברים לקטע Eventarc ב-Google Cloud:

81e139f17e0d29bf.png

תוצג רשימת הטריגרים שיצרתם קודם:

3240c7c830398718.png

אם לוחצים על טריגר, אפשר לראות את הפרטים שלו, לערוך אותו או למחוק אותו:

b4d8bbc6601a8b9e.png

אפשר גם ליצור טריגר חדש על ידי בחירה באפשרות Create trigger ומילוי הפרטים של הטריגר:

3ee290ec72f130d5.png

10. מעולה!

כל הכבוד, סיימתם את ה-Codelab.

מה נכלל

  • החזון של Eventarc
  • חיפוש אירועים ב-Eventarc
  • יצירת יעד ב-Cloud Run
  • יצירת טריגר ל-Pub/Sub
  • יצירת טריגר ל-Cloud Storage
  • יצירת טריגר ליומני ביקורת של Cloud
  • הכרת ממשק המשתמש של Eventarc