הגדרת Eventarc להפעלת תהליכי עבודה שמשתלבים עם GKE Autopilot ו-Pub/Sub

1. סקירה כללית

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

6c0606022b76f79d.png

מה זה GKE Autopilot?

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

ב-GKE Standard, המשתמשים אחראים לניהול של צמתים של עובדים ולהגדרת מאגר הצמתים, ו-GKE מטפל בכל השאר.

האחריות של הלקוח לעומת האחריות של Google כשמפעילים את GKE במצב Standard

85500aad65f87437.png

ב-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( דור שני)

c7ca054200edf1b3.png

מה זה 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

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

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

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

הגדרת הסביבה

לוחצים על הסמל משמאל לסרגל החיפוש כדי להפעיל את Cloud Shell.

8613854df02635a3.png

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

אם מתבקשים לאשר, לוחצים על 'אישור' כדי להמשיך.

6356559df3eccdda.png

תהליך ההגדרה יימשך כ-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

פלט לדוגמה:

772db9dd58172e0c.png

מריצים את הפקודה כדי לאחסן את פרטי הכניסה לאשכול:

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

פלט לדוגמה:

179a23bd33793924.png

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}

99f9cf1076c03fb6.png

5. הגדרה ופריסה של תהליך עבודה

מריצים את הפקודה כדי לראות את כתובת ה-IP החיצונית של השירות:

kubectl get svc

פלט לדוגמה:

fe5cfec2bc836a5f.png

מגדירים את משתנה הסביבה שבהמשך באמצעות הערך של כתובת ה-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). כרגע לא מוגדרים טריגרים להפעלת תהליך העבודה הזה. בשלב הבא תגדירו את זה.

66ba7ebbde76d5a6.png

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 שנוצר.

bda445561ad5f4.png

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

3fccdda7d5526597.png

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

23d338abc16eaac8.png

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

6c0606022b76f79d.png

כדי לדמות את שירות ההזמנות, תשלחו הודעות לנושא 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'

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

1e802826c700cc3e.png

57ff9705bf507fb0.png

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$.

כדי להציג את שדה שאילתת החיפוש, לוחצים על 'הצגת שאילתה'.

f0a57ff3d10bad2.png

resource.type="workflows.googleapis.com/Workflow" AND 
jsonPayload.totalAmount > 2 AND 
timestamp >= "2023-01-01T00:00:00Z" AND 
timestamp <= "2024-12-31T23:59:59Z"

פלט לדוגמה:

9093f87159f1b928.png

פותחים את 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:

35d5fd851ecde60.png

מריצים את הפקודה הבאה כדי להחזיר יומנים בפורמט 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:

ac7421548ea9a9f2.png

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:

הסרת המשאבים

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

מחיקת הפרויקט

הדרך הקלה ביותר לבטל את החיוב היא למחוק את הפרויקט שיצרתם בשביל המדריך.