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

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

מה תלמדו

  • החזון של Eventarc
  • אירועים ב-Eventarc
  • יצירת sink ב-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 ועוד

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

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

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

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

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

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

הגדרת סביבה בקצב עצמאי

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

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

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

הפעלת Cloud Shell

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

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

55efc1aaa7a4d3ad.png

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

7ffe5cbb04455448.png

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

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

ב-Inside 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.

כדי לראות איך זה עובד, יוצרים נושא 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, אתם אמורים לראות את האירוע שהתקבל:

904cfc93b8e8df1.png

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

על אף שהטריגר של Cloud Storage הוא הדרך הטובה יותר להאזין לאירועים של Cloud Storage, בשלב הזה תיצרו טריגר של Cloud Audit Log, כדי לעשות זאת.

הגדרה

כדי לקבל אירועים משירות מסוים, צריך להפעיל את יומני הביקורת של Cloud. במסוף Cloud, בוחרים את 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, אתם אמורים לראות את האירוע שהתקבל:

7be7859bcc8976f8.png

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

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

נכנסים לקטע Eventarc ב-Google Cloud:

81e139f17e0d29bf.png

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

3240c7c830398718.png

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

b4d8bbc6601a8b9e.png

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

3ee290ec72f130d5.png

10. מעולה!

ברכות על השלמת ה-Codelab.

הנושאים שטיפלנו בהם

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