הפעלת תהליכי עבודה באמצעות Eventarc

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

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

c6d4337a47b55333.png

מה זה Eventarc?

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 הוא שירות בלי שרת (serverless), והוא יותאם לביקוש שלכם.

תרחישים לדוגמה לשימוש ב-Workflows:

  • תהליכי עבודה מבוססי-אירועים מופעלים על ידי טריגרים מוגדרים. לדוגמה, כשנשלחת הזמנה חדשה ואתם רוצים לחשב נקודות מועדון לקוחות. או כשמבטלים הזמנה, אפשר לפרסם את האירוע וכל השירותים שמתעניינים בו יעבדו אותו.
  • תהליכי עבודה של משימות באצווה מריצים משימות על בסיס קבוע באמצעות Cloud Scheduler. לדוגמה, משימה שמתבצעת מדי לילה כדי לבדוק אם יש פריטים בתפריט עם סטטוס 'נכשל' ולמחוק אותם.

‫Workflows הוא כלי אידיאלי לתזמור של שירותים בתהליכי עבודה. אפשר להגדיר תהליכים אוטומטיים שכוללים המתנה וניסיונות חוזרים למשך עד שנה.

היתרונות של Workflows:

  • הגדרה במקום קוד: אפשר לצמצם את החוב הטכני על ידי העברת הלוגיקה להגדרה במקום כתיבת קוד.
  • מפשטים את הארכיטקטורה. תהליכי עבודה עם שמירת מצב מאפשרים לכם לראות ולעקוב אחרי שילובים מורכבים של שירותים בלי תלות נוספת.
  • משלבים אמינות ועמידות בפני תקלות. שליטה בכשלים באמצעות לוגיקה של ניסיון חוזר וטיפול בשגיאות, גם אם מערכות אחרות נכשלות – יצירת נקודות ביקורת בכל שלב ב-Cloud Spanner כדי לעזור לכם לעקוב אחר ההתקדמות.
  • ללא כל תחזוקה. התאמה לפי הצורך: אין צורך בתיקון או בתחזוקה. משלמים רק כשהתהליכי העבודה פועלים, ואין עלות בזמן ההמתנה או כשהם לא פעילים.

בשיעור ה-Lab הזה תגדירו תהליך עבודה מבוסס-אירועים.

מה תלמדו

בשיעור Lab זה תלמדו איך:

  • הגדרת נושא Pub/Sub ו-Eventarc להפעלת Workflows
  • הגדרת Workflow לקריאה לשירות Cloud Run ופרסום הודעות ב-Pub/Sub
  • איך שולחים שאילתות ליומנים מובנים של Workflows ב-Cloud Logging באמצעות ה-CLI של gcloud

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

  • ההנחה בשיעור ה-Lab הזה היא שאתם מכירים את הסביבות של Cloud Console ו-Cloud Shell.
  • ניסיון קודם עם Cloud Run ו-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.

eb0157a992f16fa3.png

משכפלים את המאגר ועוברים לספרייה, מעתיקים את הפקודה שבהמשך ומדביקים אותה בטרמינל, ואז מקישים על Enter:

git clone https://github.com/GoogleCloudPlatform/cymbal-eats.git && cd cymbal-eats/customer-service

פורסים את יחסי התלות הנדרשים על ידי הפעלת הפקודה lab-setup.sh

המשאבים הבאים ייווצרו:

  • אשכול ומכונה של AlloyDB
  • ‫Artifact Registry לאחסון קובצי אימג' של קונטיינרים ל-Cloud Run Job ולשירות לקוחות
  • מחבר גישה ל-VPC כדי ששירות ומשימה ב-Cloud Run יוכלו לתקשר עם מסד נתונים של AlloyDB
  • משימה ב-Cloud Run ליצירת מסד נתונים ב-AlloyDB
  • שירות לקוחות של Cloud Run – מיקרו-שירות מבוסס-Java שמשתמש ב-Quarkus framework.
./lab-setup.sh

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

6356559df3eccdda.png

תהליך ההגדרה יימשך כ-10 דקות.

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

Deploying container to Cloud Run service [customer-service] in project [cymbal-eats-19227-5681] region [us-east1]
OK Deploying new service... Done.                                                   
  OK Creating Revision...
  OK Routing traffic...
Done.
Service [customer-service] revision [customer-service-00001-mid] has been deployed and is serving 100 percent of traffic.
Service URL: https://customer-service-e4p5zon5rq-ue.a.run.app

אפשר לעבור לקטע הבא ואז לחזור כדי להמשיך מהשלב הבא.

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

מושגי ליבה של Workflows

תהליך עבודה מורכב מסדרה של שלבים שמתוארים באמצעות התחביר של Workflows( YAML או JSON).

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

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

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

  • שלבים – כדי ליצור תהליך עבודה, מגדירים את steps ואת סדר הביצוע הרצויים באמצעות התחביר של Workflows. כל תהליך עבודה חייב לכלול לפחות שלב אחד.
  • תנאים – אפשר להשתמש בבלוק switch כמנגנון בחירה שמאפשר לערך של ביטוי לשלוט בזרימת הביצוע של תהליך עבודה.
  • איטרציות – אפשר להשתמש בלולאת for כדי לבצע איטרציה על רצף של מספרים או על אוסף נתונים, כמו רשימה או מפה.
  • תת-תהליכי עבודה – תת-תהליך עבודה פועל באופן דומה לשגרה או לפונקציה בשפת תכנות, ומאפשר לכם להגדיר שלב או קבוצת שלבים שתהליך העבודה יחזור עליהם כמה פעמים.

הפעלת הרצות

  • ידני – אתם יכולים לנהל את תהליכי העבודה ממסוף Google Cloud או משורת הפקודה באמצעות Google Cloud CLI.
  • באופן פרוגרמטי – אפשר להשתמש בספריות הלקוח של Cloud ל-Workflows API או ב-API בארכיטקטורת REST כדי לנהל את תהליכי העבודה.
  • מתוזמן – אפשר להשתמש ב-Cloud Scheduler כדי להריץ תהליך עבודה לפי לוח זמנים מסוים.

ארגומנטים של זמן ריצה

אפשר לגשת לנתונים שמועברים בזמן הריצה על ידי הוספת שדה params לתהליך העבודה הראשי (שמוצב בבלוק ראשי). הבלוק הראשי מקבל ארגומנט יחיד שהוא כל סוג נתונים חוקי של JSON. בשדה params מציינים את שם המשתנה שבו ישתמש תהליך העבודה כדי לאחסן את הנתונים שמעבירים.

תהליך העבודה לאימות שירות Cloud Run

שירות הלקוחות הוא אפליקציה לדוגמה שכלולה במאגר הזה, שפועלת ב-Cloud Run ומוגדרת כך שהיא מאפשרת רק בקשות מאומתות שמגיעות מרשתות פנימיות. תגדירו את Workflows כך שיוסיף לבקשה אסימון OpenID Connect ‏(OIDC) בחתימת Google כדי לבצע אימות עם שירות Cloud Run.

מידע נוסף על אימות בין שירותים

האימות של זרימת העבודה מוגדר בקטע auth בבלוק args.

rewardsWorkflow.yaml.tmpl

   - create_customer:
        call: http.post
        args:
          url: CUSTOMER_SERVICE_URL/customer
          auth:
            type: OIDC

הלוגיקה של תהליך העבודה

אם הלקוח לא קיים, תהליך העבודה הזה יבצע קריאה ל-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}

fcd91b2bc5d60347.png

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

מגדירים משתני סביבה:

export REGION=us-east1

export CUSTOMER_SERVICE_URL=$(gcloud run services describe customer-service \
  --platform managed \
  --region $REGION \
  --format=json | jq \
  --raw-output ".status.url")

echo $CUSTOMER_SERVICE_URL

מחליפים את כתובת ה-URL של השירות בתבנית של זרימת העבודה:

sed "s@CUSTOMER_SERVICE_URL@$CUSTOMER_SERVICE_URL@g" rewardsWorkflow.yaml.tmpl > rewardsWorkflow.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)')

יוצרים חשבון שירות מותאם אישית לתהליך העבודה עם ההרשאות הבאות:

  • הפעלת שירות Cloud Run
  • Call Logging APIs
  • פרסום הודעות בנושא PubSub
export WORKFLOW_SERVICE_ACCOUNT=workflows-cloudrun-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/run.invoker"

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=rewardsWorkflow.yaml \
  --service-account=${WORKFLOW_SERVICE_ACCOUNT}@$PROJECT_ID.iam.gserviceaccount.com

בודקים את המקור של תהליך העבודה ופרטים אחרים(בכרטיסייה Triggers). כרגע לא מוגדרים טריגרים להפעלת תהליך העבודה הזה. בשלב הבא תגדירו את זה.

d3527393fb07a9b3.png

5. הגדרת נושאים ב-Pub/Sub וטריגר Eventarc

בשלב הבא יוצרים שני נושאים ב-Pub/Sub ומגדירים טריגר אחד ב-Eventarc.

שירות ההזמנות יפרסם הודעות ב-order-topic עם מידע על הזמנות חדשות.

תהליך העבודה יפרסם הודעות ב-order-points-topic עם מידע על נקודות בתוכנית התגמולים של ההזמנה והסכום הכולל. שירות ההזמנות(לא נפרס כחלק מתוכנית Lab זו) חושף נקודת קצה שמשמשת את מינוי הדחיפה ל-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

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

c6d4337a47b55333.png

כדי לדמות את שירות ההזמנות, תשלחו הודעות לנושא Pub/Sub מ-Cloud Shell ותאמתו את היומנים של שירות הלקוחות של Cloud Run במסוף 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

aad0eae7a970316.png

7. רישום ביומן של תהליכי עבודה במבנה

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

משתמשים בשאילתה שלמטה ומחליפים את מזהה הפרויקט(qwiklabs-gcp-01-1a990bfcadb3) במזהה הפרויקט הנוכחי:

resource.type="workflows.googleapis.com/Workflow" AND 
logName=projects/qwiklabs-gcp-01-1a990bfcadb3/logs/Workflows AND 
jsonPayload.totalAmount > 2 AND 
timestamp >= "2022-11-01T23:59:59Z" AND 
timestamp <= "2023-11-05T00:00:00Z"

פלט לדוגמה:

22d2f4686c58724d.png

פותחים את Cloud Shell ומשתמשים ב-ה-CLI של gcloud כדי לקרוא יומנים באמצעות הפקודות שבהמשך.

מחליפים את מזהה הפרויקט(qwiklabs-gcp-01-1a990bfcadb3) במזהה הפרויקט הנוכחי.

gcloud logging read 'resource.type="workflows.googleapis.com/Workflow" AND logName=projects/qwiklabs-gcp-01-1a990bfcadb3/logs/Workflows AND jsonPayload.totalAmount > 2 AND timestamp >= "2022-11-01T23:59:59Z" AND timestamp <= "2023-11-05T00:00:00Z"' --limit 10 --format="table(jsonPayload.orderNumber,jsonPayload.totalAmount,jsonPayload.orderRewardPoints,jsonPayload.totalRewardPoints,jsonPayload.multiplier)"

פלט לדוגמה בפורמט table:

35d5fd851ecde60.png

מחליפים את מזהה הפרויקט(qwiklabs-gcp-01-1a990bfcadb3) במזהה הפרויקט הנוכחי.

gcloud logging read 'resource.type="workflows.googleapis.com/Workflow" AND logName=projects/qwiklabs-gcp-01-1a990bfcadb3/logs/Workflows AND jsonPayload.totalAmount > 2 AND timestamp >= "2022-11-01T23:59:59Z" AND timestamp <= "2023-11-05T00:00:00Z"' --limit 10 --format=json | jq

פלט לדוגמה בפורמט json:

ac7421548ea9a9f2.png

8. בדיקת רשומות של לקוחות

(שלבים אופציונליים) בשלב הזה, customer-service מוגדר לקבל תנועה מרשתות פנימיות בלבד.

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

export REGION=us-east1
CUSTOMER_SERVICE_URL=$(gcloud run services describe customer-service \
    --region=$REGION \
    --format=json | jq \
    --raw-output ".status.url")

curl -H "Authorization: Bearer $(gcloud auth print-identity-token)" $CUSTOMER_SERVICE_URL/customer

תוצג הודעת שגיאה שלפיה הגישה אסורה.

<html><head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<title>403 Forbidden</title>
</head>
<body text=#000000 bgcolor=#ffffff>
<h1>Error: Forbidden</h1>
<h2>Access is forbidden.</h2>
<h2></h2>
</body></html>

כדי לראות רשומות קיימות של לקוחות, משנים את ההגדרות של ingress ב-Cloud Run customer-service לאפשרות Allow all traffic ולוחצים על 'שמירה'.

כך נקודת הקצה תהיה ציבורית ותוכלו לקרוא ל-API של שירות הלקוחות מ-Cloud Shell באמצעות curl.

9156e0eb0a19bc68.png

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

CUSTOMER_SERVICE_URL=$(gcloud run services describe customer-service \
    --region=$REGION \
    --format=json | jq \
    --raw-output ".status.url")

curl -H "Authorization: Bearer $(gcloud auth print-identity-token)" $CUSTOMER_SERVICE_URL/customer | jq

פלט לדוגמה:

[
  {
    "id": "id1",
    "rewardPoints": 3,
    "address": "1845 Denise St",
    "city": "Mountain View",
    "createDateTime": "2022-11-11T15:56:45.487566",
    "email": "ajensen9090+eats@gmail.com",
    "name": "Angela Jensen",
    "state": "CA",
    "updateDateTime": "2022-11-11T15:56:45.866125",
    "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 -H "Authorization: Bearer $(gcloud auth print-identity-token)" $CUSTOMER_SERVICE_URL/customer | jq

בודקים את היומנים. מחליפים את מזהה הפרויקט(qwiklabs-gcp-01-1a990bfcadb3) במזהה הפרויקט הנוכחי.

gcloud logging read 'resource.type="workflows.googleapis.com/Workflow" AND logName=projects/qwiklabs-gcp-01-1a990bfcadb3/logs/Workflows AND jsonPayload.totalAmount > 2 AND timestamp >= "2022-11-01T23:59:59Z" AND timestamp <= "2023-11-05T00:00:00Z"' --limit 10 --format="table(jsonPayload.orderNumber,jsonPayload.totalAmount,jsonPayload.orderRewardPoints,jsonPayload.totalRewardPoints,jsonPayload.multiplier)"

9. מעולה!

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

הנושאים שדיברנו עליהם:

  • איך מגדירים תהליכי עבודה
  • איך מגדירים טריגר Eventarc ל-Workflows
  • איך קוראים לשירות Cloud Run מ-Workflows
  • איך שולפים נתונים מיומנים מובנים ב-Cloud Logging באמצעות ה-CLI של gcloud

השלב הבא:

כדאי לעיין במדריכי Codelab נוספים של Cymbal Eats:

הסרת המשאבים

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

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

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