1. סקירה כללית
בשיעור ה-Lab הזה תיצרו טריגר Eventarc שמקשר נושא Pub/Sub לשירות Workflows. Eventarc מאפשר לכם להפריד בין תקשורת משירות לשירות, וכך להפוך את הפתרון שלכם לניתן להרחבה יותר ומבוסס-אירועים. תצרו תהליך עבודה שכולל כמה שלבים לביצוע תהליך עסקי לחישוב נקודות בתוכנית התגמולים של לקוחות שמזמינים ב-Cymbal Eats. תהליך העבודה ישלח כמה בקשות לאפליקציה שפועלת ב-GKE Autopilot ויפרסם הודעה בנושא Pub/Sub כדי להודיע לאפליקציית שירות ההזמנות על נקודות בתוכנית התגמולים שחושבו.

מה זה GKE Autopilot?
GKE Autopilot הוא מצב פעולה ב-GKE שבו Google מנהלת את הגדרת האשכול, כולל הצמתים, שינוי הגודל, האבטחה והגדרות אחרות שהוגדרו מראש. אשכולות במצב Autopilot מותאמים להרצת רוב עומסי העבודה של הייצור, ומקצים משאבי מחשוב על סמך מניפסטים של Kubernetes. ההגדרה הפשוטה מבוססת על השיטות המומלצות של GKE וההמלצות להגדרת אשכולות ועומסי עבודה, מדרגיות ואבטחה. רשימה של הגדרות מובנות מופיעה בטבלה השוואה בין Autopilot לבין Standard.
ב-GKE Standard, המשתמשים אחראים לניהול של צמתים של עובדים ולהגדרת מאגר הצמתים, ו-GKE מטפל בכל השאר.
האחריות של הלקוח לעומת האחריות של Google כשמפעילים את GKE במצב Standard

ב-GKE Autopilot, האחריות על ההגדרה והניהול של מאגרי הצמתים היא של Google. כך תוכלו להתמקד באפליקציות ובשירותים שפועלים מעל האשכול.
מה זה Eventarc?
Eventarc מאפשר לכם לבנות ארכיטקטורות מבוססות-אירועים בלי שתצטרכו להטמיע, להתאים אישית או לתחזק את התשתית הבסיסית. Eventarc מציע פתרון סטנדרטי לניהול של זרימת שינויים במצב, שנקראים אירועים, בין מיקרו-שירותים מנותקים. כשאירועים מופעלים, הם מנותבים דרך מינויים ל-Pub/Sub ליעדים שונים (למשל, Workflows, Cloud Run) תוך ניהול המסירה, האבטחה, ההרשאה, הניראות וטיפול בשגיאות בשבילכם.
ספקי אירועים של Google
- יותר מ-90 ספקי Google Cloud. הספקים האלה שולחים אירועים ישירות מהמקור (לדוגמה, Cloud Storage) או דרך רשומות ביומני ביקורת של Cloud.
- ספקי Pub/Sub. הספקים האלה שולחים אירועים ל-Eventarc באמצעות הודעות Pub/Sub.
ספקי צד שלישי
ספקי צד שלישי הם ישויות שאינן Google שמציעות מקור Eventarc.
טריגרים של Eventarc
- אירועים של Cloud Pub/Sub. אפשר להפעיל את Eventarc באמצעות הודעות שמתפרסמות בנושאים ב-Pub/Sub.
- אירועים ביומני ביקורת של Cloud (CAL). יומני ביקורת ב-Cloud מספקים יומני ביקורת של פעילות האדמין וגישה לנתונים לכל פרויקט בענן, תיקייה וארגון.
- אירועים ישירים. אפשר להפעיל את Eventarc על ידי אירועים ישירים שונים, כמו עדכון של קטגוריה של Cloud Storage או עדכון של תבנית הגדרת תצורה מרחוק ב-Firebase.
יעדים של אירועים
- תהליכי עבודה
- Cloud Run
- GKE
- Cloud Functions( דור שני)

מה זה Workflows?
Workflows הוא שירות שמנוהל במלואו שמאפשר לשלב מיקרו-שירותים, משימות וממשקי API. Workflows הוא שירות בלי שרת, והוא יותאם לביקוש שלכם.
תרחישים לדוגמה לשימוש ב-Workflows:
- תהליכי עבודה מבוססי-אירועים מופעלים על ידי טריגרים מוגדרים. לדוגמה, כשנשלחת הזמנה חדשה ואתם רוצים לחשב נקודות מועדון לקוחות. או כשמבטלים הזמנה, אפשר לפרסם את האירוע וכל השירותים שמתעניינים בו יעבדו אותו.
- תהליכי עבודה של משימות באצווה מריצים משימות על בסיס קבוע באמצעות Cloud Scheduler. לדוגמה, משימה שמתבצעת מדי לילה כדי לבדוק אם יש פריטים בתפריט עם סטטוס 'נכשל' ולמחוק אותם.
Workflows הוא כלי אידיאלי לתהליכי עבודה שמתזמרים שירותים. אפשר להגדיר תהליכים אוטומטיים שכוללים המתנה וניסיונות חוזרים למשך עד שנה.
היתרונות של Workflows:
- הגדרה במקום קוד: מעבירים את הלוגיקה להגדרה במקום לכתוב קוד, וכך מצמצמים את החוב הטכני.
- מפשטים את הארכיטקטורה. בעזרת Workflows עם שמירת מצב אפשר לראות ולעקוב אחרי שילובים מורכבים של שירותים בלי תלות נוספת.
- משלבים אמינות ועמידות בפני תקלות. שליטה בכשלים באמצעות לוגיקה של ניסיון חוזר וטיפול בשגיאות, גם כשמערכות אחרות נכשלות – יצירת נקודות ביקורת בכל שלב ב-Cloud Spanner כדי לעזור לכם לעקוב אחרי ההתקדמות.
- ללא כל תחזוקה. אפשר להגדיל את הקיבולת לפי הצורך: אין צורך לתקן או לתחזק. משלמים רק כשהתהליכי העבודה פועלים, ואין עלות בזמן ההמתנה או כשהם לא פעילים.
בשיעור ה-Lab הזה תגדירו תהליך עבודה מבוסס-אירועים.
מה תלמדו
בשיעור Lab זה תלמדו איך:
- הגדרת נושא Pub/Sub ו-Eventarc להפעלת תהליכי עבודה
- הגדרת Workflow כדי לבצע קריאות ל-API לאפליקציה שפועלת ב-GKE Autopilot
- הגדרת Workflow לפרסום הודעות ב-Pub/Sub
- איך שולחים שאילתות ליומנים מובְנים של Workflows ב-Cloud Logging באמצעות ה-CLI של gcloud
דרישות מוקדמות
- ההנחה בשיעור ה-Lab הזה היא שאתם מכירים את הסביבות של Cloud Console ו-Cloud Shell.
- ניסיון קודם עם GKE ו-Cloud Pub/Sub מועיל אבל לא חובה.
2. הגדרה ודרישות
הגדרה של פרויקט ב-Cloud
- נכנסים ל-מסוף Google Cloud ויוצרים פרויקט חדש או משתמשים בפרויקט קיים. אם עדיין אין לכם חשבון Gmail או Google Workspace, אתם צריכים ליצור חשבון.



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

משכפלים את המאגר ועוברים לספרייה, מעתיקים את הפקודה שבהמשך ומדביקים אותה בטרמינל, ואז מקישים על Enter:
git clone https://github.com/GoogleCloudPlatform/cymbal-eats.git && cd cymbal-eats/customer-service
פורסים את יחסי התלות הנדרשים על ידי הפעלת הפקודה gke-lab-setup.sh
המשאבים הבאים ייווצרו:
- אשכול ומכונה של AlloyDB
- אשכול GKE Autopilot
./gke-lab-setup.sh
אם מתבקשים לאשר, לוחצים על 'אישור' כדי להמשיך.

תהליך ההגדרה יימשך כ-10 דקות.
צריך לחכות עד שהסקריפט יסיים את הפעולה ועד שיוצג הפלט שבהמשך לפני שממשיכים לשלבים אחרים.
NAME: client-instance ZONE: us-central1-c MACHINE_TYPE: e2-medium PREEMPTIBLE: INTERNAL_IP: 10.128.0.9 EXTERNAL_IP: 35.232.109.233 STATUS: RUNNING
3. אשכול GKE Autopilot
בדיקת אשכול GKE Autopilot
מגדירים משתני סביבה של הפרויקט:
export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')
export PROJECT_NAME=$(gcloud projects describe $PROJECT_ID --format='value(name)')
במסגרת ההגדרה הראשונית, האשכול נוצר באמצעות הפקודה שמופיעה בהמשך (אין צורך להריץ את הפקודה הזו):
gcloud container clusters create-auto $CLUSTER_NAME --region $REGION
מריצים את הפקודה כדי לראות את אשכול GKE Autopilot שנוצר:
gcloud container clusters list
פלט לדוגמה:

מריצים את הפקודה כדי לאחסן את פרטי הכניסה לאשכול:
CLUSTER_NAME=rewards-cluster
REGION=us-central1
gcloud container clusters get-credentials $CLUSTER_NAME --region=$REGION
פריסת אפליקציה
בשלב הבא תפרסו אפליקציה לשירות לקוחות. זהו מיקרו-שירות מבוסס Java שמשתמש ב-Quarkus framework.
עוברים לתיקייה cymbal-eats/customer-service ומריצים את הפקודות הבאות כדי ליצור ולהעלות קובץ אימג' של קונטיינר:
./mvnw clean package -DskipTests
export CUSTOMER_SERVICE_IMAGE=gcr.io/$PROJECT_ID/customer-service:1.0.0
gcloud builds submit --tag $CUSTOMER_SERVICE_IMAGE .
הגדרת כתובת IP פרטית ב-AlloyDB:
export DB_HOST=$(gcloud beta alloydb instances describe customer-instance \
--cluster=customer-cluster \
--region=$REGION \
--format=json | jq \
--raw-output ".ipAddress")
echo $DB_HOST
מריצים את הפקודות הבאות כדי ליצור אובייקט סודות של Kubernetes לאחסון פרטי הכניסה למסד הנתונים, שישמשו את אפליקציית שירות הלקוחות להתחבר למסד הנתונים:
DB_NAME=customers
DB_USER=postgres
DB_PASSWORD=password123
kubectl create secret generic gke-alloydb-secrets \
--from-literal=database=$DB_NAME \
--from-literal=username=$DB_USER \
--from-literal=password=$DB_PASSWORD \
--from-literal=db_host=$DB_HOST
מריצים את הפקודה כדי להחליף את CUSTOMER_SERVICE_IMAGE בקובץ deployment.yaml:
sed "s@CUSTOMER_SERVICE_IMAGE@$CUSTOMER_SERVICE_IMAGE@g" deployment.yaml.tmpl > customer-service-deployment.yaml
מריצים את הפקודה כדי לפרוס את האפליקציה:
kubectl apply -f customer-service-deployment.yaml
יחלפו כמה רגעים עד שהאפליקציה תעבור למצב RUNNING.
בדיקת קובץ מפרט הפריסה:
deployment.yaml.tmpl
זה החלק בהגדרה שמציין את המשאבים שנדרשים להפעלת האפליקציה הזו.
spec:
containers:
- name: customer-service
image: CUSTOMER_SERVICE_IMAGE
resources:
requests:
cpu: 250m
memory: 512Mi
ephemeral-storage: 512Mi
limits:
cpu: 500m
memory: 1024Mi
ephemeral-storage: 1Gi
מריצים את הפקודה כדי ליצור כתובת IP חיצונית שתשמש בתהליך העבודה:
SERVICE_NAME=customer-service
kubectl expose deployment $SERVICE_NAME \
--type LoadBalancer --port 80 --target-port 8080
מריצים את הפקודה כדי לוודא שהמשאבים נוצרו:
kubectl get all
פלט לדוגמה:

4. בדיקת תהליך העבודה
מושגי ליבה של Workflows
תהליך עבודה מורכב מסדרה של שלבים שמתוארים באמצעות התחביר של Workflows( YAML או JSON).
אחרי שיוצרים תהליך עבודה, הוא נפרס, כך שהוא מוכן להרצה.
הרצה היא הפעלה יחידה של הלוגיקה שמוגדרת בתהליך עבודה. תהליך עבודה שלא בוצע לא יוצר חיובים. כל ההרצות של תהליכי העבודה הן עצמאיות, וההתאמה המהירה של המוצר מאפשרת מספר גבוה של הרצות בו-זמניות.
אמצעי בקרה על ביצוע בקשות
- שלבים – כדי ליצור תהליך עבודה, מגדירים את
stepsואת סדר הביצוע הרצויים באמצעות התחביר של Workflows. כל תהליך עבודה חייב לכלול לפחות שלב אחד. - תנאים – אפשר להשתמש בבלוק
switchכמנגנון בחירה שמאפשר לערך של ביטוי לשלוט בזרימת הביצוע של תהליך עבודה. - איטרציות – אפשר להשתמש בלולאת
forכדי לבצע איטרציה על רצף של מספרים או על אוסף נתונים, כמו רשימה או מפה. - תת-תהליכי עבודה – תת-תהליך עבודה פועל באופן דומה לשגרה או לפונקציה בשפת תכנות, ומאפשר לכם להגדיר שלב או קבוצת שלבים שתהליך העבודה יחזור עליהם כמה פעמים.
הפעלת הרצות
- ידני – אתם יכולים לנהל את תהליכי העבודה ממסוף Google Cloud או משורת הפקודה באמצעות Google Cloud CLI.
- באופן פרוגרמטי – אפשר להשתמש בספריות הלקוח של Cloud ל-Workflows API או ב-API בארכיטקטורת REST כדי לנהל את תהליכי העבודה.
- מתוזמן – אפשר להשתמש ב-Cloud Scheduler כדי להריץ תהליך עבודה לפי לוח זמנים מסוים.
ארגומנטים של זמן ריצה
כדי לגשת לנתונים שמועברים בזמן הריצה, צריך להוסיף שדה params לתהליך העבודה הראשי (בבלוק ראשי). הבלוק הראשי מקבל ארגומנט יחיד שהוא כל סוג נתונים חוקי של JSON. בשדה params מציינים את שם המשתנה שבו זרימת העבודה משתמשת כדי לאחסן את הנתונים שמעבירים.
הלוגיקה של תהליך העבודה
אם הלקוח לא קיים, תהליך העבודה יבצע קריאה ל-API כדי ליצור לקוח, ואז יעדכן את נקודות התגמול. על סמך הסכום הכולל של ההזמנה, תהליך העבודה יבחר מכפיל לחישוב נקודות המועדון של הלקוח. פרטים נוספים מופיעים בדוגמה שבהמשך.
- calculate_multiplier:
switch:
- condition: ${totalAmount < 10}
steps:
- set_multiplier1:
assign:
- multiplier: 2
- condition: ${totalAmount >= 10 and totalAmount < 25}
steps:
- set_multiplier2:
assign:
- multiplier: 3
- condition: ${totalAmount >= 25}
steps:
- set_multiplier3:
assign:
- multiplier: 5
- calculate_rewards:
assign:
- rewardPoints: ${customerRecord.rewardPoints + multiplier}

5. הגדרה ופריסה של תהליך עבודה
מריצים את הפקודה כדי לראות את כתובת ה-IP החיצונית של השירות:
kubectl get svc
פלט לדוגמה:

מגדירים את משתנה הסביבה שבהמשך באמצעות הערך של כתובת ה-IP החיצונית מהפלט הקודם.
CUSTOMER_SERVICE_URL=http://$(kubectl get svc customer-service -o=jsonpath='{.status.loadBalancer.ingress[0].ip}')
מחליפים את כתובת ה-URL של אפליקציית שירות הלקוחות בתבנית של תהליך העבודה:
sed "s@CUSTOMER_SERVICE_URL@$CUSTOMER_SERVICE_URL@g" gkeRewardsWorkflow.yaml.tmpl > gkeRewardsWorkflow.yaml
הגדרת מיקום למשתני סביבה של שירות Workflows ושל הפרויקט:
gcloud config set workflows/location ${REGION}
export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')
export PROJECT_NAME=$(gcloud projects describe $PROJECT_ID --format='value(name)')
יוצרים חשבון שירות מותאם אישית לתהליך העבודה עם ההרשאות הבאות:
- Call Logging APIs
- פרסום הודעות בנושא PubSub
export WORKFLOW_SERVICE_ACCOUNT=workflows-sa
gcloud iam service-accounts create ${WORKFLOW_SERVICE_ACCOUNT}
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member "serviceAccount:${WORKFLOW_SERVICE_ACCOUNT}@$PROJECT_ID.iam.gserviceaccount.com" \
--role "roles/logging.logWriter"
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member "serviceAccount:${WORKFLOW_SERVICE_ACCOUNT}@$PROJECT_ID.iam.gserviceaccount.com" \
--role "roles/pubsub.publisher"
פריסת תהליך העבודה. תהליך העבודה מוגדר לשימוש בחשבון השירות שנוצר בשלב הקודם:
export WORKFLOW_NAME=rewardsWorkflow
gcloud workflows deploy ${WORKFLOW_NAME} \
--source=gkeRewardsWorkflow.yaml \
--service-account=${WORKFLOW_SERVICE_ACCOUNT}@$PROJECT_ID.iam.gserviceaccount.com
בודקים את המקור של תהליך העבודה ופרטים אחרים(בכרטיסייה Triggers). כרגע לא מוגדרים טריגרים להפעלת תהליך העבודה הזה. בשלב הבא תגדירו את זה.

6. הגדרת נושאים ב-Pub/Sub וטריגר Eventarc
בשלב הבא יוצרים שני נושאים ב-Pub/Sub ומגדירים טריגר אחד ב-Eventarc.
אפליקציית Order Service תפרסם הודעות ב-order-topic עם מידע על הזמנות חדשות.
תהליך העבודה יפרסם הודעות ב-order-points-topic עם מידע על נקודות בתוכנית התגמולים של ההזמנה והסכום הכולל. שירות ההזמנות (לא נפרס כחלק משיעור ה-Lab הזה) חושף נקודת קצה (endpoint) שמשמשת את מינוי הדחיפה ל-order-points-topic, כדי לעדכן את נקודות בתוכנית התגמולים ואת הסכום הכולל לכל הזמנה.
יצירת נושאים חדשים ב-Pub/Sub:
export TOPIC_ID=order-topic
export ORDER_POINTS_TOPIC_ID=order-points-topic
gcloud pubsub topics create $TOPIC_ID --project=$PROJECT_ID
gcloud pubsub topics create $ORDER_POINTS_TOPIC_ID --project=$PROJECT_ID
הגדרת מיקום לשירות Eventarc:
gcloud config set eventarc/location ${REGION}
יוצרים חשבון שירות בהתאמה אישית שישמש את טריגר Eventarc להפעלת תהליכי עבודה.
export TRIGGER_SERVICE_ACCOUNT=eventarc-workflow-sa
gcloud iam service-accounts create ${TRIGGER_SERVICE_ACCOUNT}
נותנים לחשבון השירות גישה להרצת תהליכי עבודה.
gcloud projects add-iam-policy-binding ${PROJECT_ID} \
--member="serviceAccount:${TRIGGER_SERVICE_ACCOUNT}@${PROJECT_ID}.iam.gserviceaccount.com" \
--role="roles/workflows.invoker"
יוצרים טריגר Eventarc כדי להאזין להודעות Pub/Sub ולהעביר אותן ל-Workflows.
gcloud eventarc triggers create new-orders-trigger \
--destination-workflow=${WORKFLOW_NAME} \
--destination-workflow-location=${REGION} \
--event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \
--service-account="${TRIGGER_SERVICE_ACCOUNT}@${PROJECT_ID}.iam.gserviceaccount.com" \
--transport-topic=$TOPIC_ID
פלט לדוגמה:
Creating trigger [new-orders-trigger] in project [qwiklabs-gcp-01-1a990bfcadb3], location [us-east1]...done. Publish to Pub/Sub topic [projects/qwiklabs-gcp-01-1a990bfcadb3/topics/order-topic] to receive events in Workflow [rewardsWorkflow]. WARNING: It may take up to 2 minutes for the new trigger to become active.
בודקים את הטריגר של Eventarc שנוצר.

בודקים את המינוי שנוצר לטריגר.

בודקים את השינויים בצד של תהליך העבודה. נוסף טריגר חדש.

7. בדיקת תהליך העבודה

כדי לדמות את שירות ההזמנות, תשלחו הודעות לנושא Pub/Sub מ-Cloud Shell ותאמתו את יומני שירות הלקוחות במסוף Cloud.
export TOPIC_ID=order-topic
gcloud pubsub topics publish $TOPIC_ID --message '{"userId":"id1","orderNumber":123456,"name":"Angela Jensen","email":"ajensen9090+eats@gmail.com","address":"1845 Denise St","city":"Mountain View","state":"CA","zip":"94043","orderItems":[{"id":7,"createDateTime":"2022-03-17T21:51:44.968584","itemImageURL":"https://images.unsplash.com/photo-1618449840665-9ed506d73a34?ixlib=rb-1.2.1&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=687&q=80","itemName":"Curry Plate","itemPrice":12.5,"itemThumbnailURL":"https://images.unsplash.com/photo-1618449840665-9ed506d73a34?ixlib=rb-1.2.1&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=687&q=80","spiceLevel":0,"status":"Ready","tagLine":"Spicy touch for your taste buds","updateDateTime":"2022-03-18T01:30:29.340584","inventory":8,"quantity":1}]}'
פלט לדוגמה:
messageIds: - '5063709859203105'
בודקים את פרטי ההרצה של תהליך העבודה ואת היומנים.


8. רישום ביומן של תהליכי עבודה במבנה
תהליך העבודה מוגדר לכתוב יומנים מובְנים בפורמט JSON. היומנים נכתבים באמצעות Cloud Logging API, המשאב workflows.googleapis.com/Workflow ושם היומן projects/${PROJECT_ID}/logs/Workflows.
בהמשך מוסבר איך מגדירים את הרישום ביומן.
- log_totalAmount:
call: sys.log
args:
json:
orderNumber: ${order.orderNumber}
totalAmount: ${totalAmount}
multiplier: ${multiplier}
totalRewardPoints: ${rewardPoints}
orderRewardPoints: ${orderRewardPoints}
severity: INFO
פותחים את Logs Explorer ב-Cloud Console ומריצים שאילתה כדי למצוא הזמנות שעברו עיבוד עם סכום כולל של יותר מ-2$.
כדי להציג את שדה שאילתת החיפוש, לוחצים על 'הצגת שאילתה'.

resource.type="workflows.googleapis.com/Workflow" AND
jsonPayload.totalAmount > 2 AND
timestamp >= "2023-01-01T00:00:00Z" AND
timestamp <= "2024-12-31T23:59:59Z"
פלט לדוגמה:

פותחים את Cloud Shell ומשתמשים ב-ה-CLI של gcloud כדי לקרוא יומנים באמצעות הפקודות שבהמשך.
gcloud logging read 'resource.type="workflows.googleapis.com/Workflow" AND jsonPayload.totalAmount > 2 AND timestamp >= "2023-01-01T00:00:00Z" AND timestamp <= "2023-12-31T23:59:59Z"' --limit 10 --format="table(jsonPayload.orderNumber,jsonPayload.totalAmount,jsonPayload.orderRewardPoints,jsonPayload.totalRewardPoints,jsonPayload.multiplier)"
פלט לדוגמה בפורמט table:

מריצים את הפקודה הבאה כדי להחזיר יומנים בפורמט JSON:
gcloud logging read 'resource.type="workflows.googleapis.com/Workflow" AND jsonPayload.totalAmount > 2 AND timestamp >= "2023-01-01T00:00:00Z" AND timestamp <= "2023-12-31T23:59:59Z"' --limit 10 --format=json | jq
פלט לדוגמה בפורמט json:

9. בדיקת רשומות של לקוחות
(שלבים אופציונליים)
מריצים את הפקודות הבאות כדי להגדיר את משתנה הסביבה של כתובת ה-URL של שירות הלקוחות.
CUSTOMER_SERVICE_URL=http://$(kubectl get svc customer-service -o=jsonpath='{.status.loadBalancer.ingress[0].ip}')
curl $CUSTOMER_SERVICE_URL/customer | jq
פלט לדוגמה:
[
{
"address": "1845 Denise St",
"city": "Mountain View",
"createDateTime": "2023-01-31T17:22:08.853644",
"email": "ajensen9090+eats@gmail.com",
"id": "id1",
"name": "Angela Jensen",
"rewardPoints": 4,
"state": "CA",
"updateDateTime": "2023-01-31T17:22:09.652117",
"zip": "94043"
}
]
מריצים פקודה לפרסום הזמנה חדשה מספר פעמים ומאמתים את נקודות בתוכנית התגמולים של הלקוח באמצעות פקודת curl.
פרסום הודעה חדשה לגבי הזמנה:
export TOPIC_ID=order-topic
gcloud pubsub topics publish $TOPIC_ID --message '{"userId":"id1","orderNumber":123456,"name":"Angela Jensen","email":"ajensen9090+eats@gmail.com","address":"1845 Denise St","city":"Mountain View","state":"CA","zip":"94043","orderItems":[{"id":7,"createDateTime":"2022-03-17T21:51:44.968584","itemImageURL":"https://images.unsplash.com/photo-1618449840665-9ed506d73a34?ixlib=rb-1.2.1&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=687&q=80","itemName":"Curry Plate","itemPrice":12.5,"itemThumbnailURL":"https://images.unsplash.com/photo-1618449840665-9ed506d73a34?ixlib=rb-1.2.1&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=687&q=80","spiceLevel":0,"status":"Ready","tagLine":"Spicy touch for your taste buds","updateDateTime":"2022-03-18T01:30:29.340584","inventory":8,"quantity":1}]}'
אימות נקודות בתוכנית התגמולים של הלקוח:
curl $CUSTOMER_SERVICE_URL/customer | jq
מריצים את הפקודה הבאה כדי לבדוק אם יש יומנים עדכניים:
gcloud logging read 'resource.type="workflows.googleapis.com/Workflow" AND jsonPayload.totalAmount > 2 AND timestamp >= "2023-01-01T00:00:00Z" AND timestamp <= "2023-12-31T23:59:59Z"' --limit 10 --format="table(jsonPayload.orderNumber,jsonPayload.totalAmount,jsonPayload.orderRewardPoints,jsonPayload.totalRewardPoints,jsonPayload.multiplier)"
10. מעולה!
כל הכבוד, סיימתם את ה-Codelab!
הנושאים שדיברנו עליהם:
- איך מגדירים נושא Pub/Sub ו-Eventarc כדי להפעיל תהליכי עבודה
- איך מגדירים Workflow כדי לבצע קריאות ל-API של אפליקציה שפועלת ב-GKE Autopilot
- איך מגדירים את Workflow לפרסום הודעות ב-Pub/Sub
- איך שולחים שאילתות ליומנים מובְנים של Workflows ב-Cloud Logging באמצעות ה-CLI של gcloud
השלב הבא:
כדאי לעיין במדריכי Codelab נוספים של Cymbal Eats:
- הפעלת Cloud Workflows באמצעות Eventarc
- הפעלת עיבוד אירועים מ-Cloud Storage
- התחברות ל-Cloud SQL פרטי מ-Cloud Run
- חיבור למסדי נתונים מנוהלים באופן מלא מ-Cloud Run
- אבטחת אפליקציה בלי שרת (serverless) באמצעות שרת proxy לאימות זהויות (IAP)
- הפעלת משימות של Cloud Run באמצעות Cloud Scheduler
- פריסה מאובטחת ב-Cloud Run
- אבטחת תנועת נתונים נכנסת ב-Cloud Run
הסרת המשאבים
כדי להימנע מחיובים בחשבון Google Cloud בגלל השימוש במשאבים שנעשה במסגרת המדריך הזה, אפשר למחוק את הפרויקט שמכיל את המשאבים, או להשאיר את הפרויקט ולמחוק את המשאבים בנפרד.
מחיקת הפרויקט
הדרך הקלה ביותר לבטל את החיוב היא למחוק את הפרויקט שיצרתם בשביל המדריך.