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

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

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

c6d4337a47b55333.png

מה זה Eventarc?

Eventarc מאפשר לפתח ארכיטקטורות מבוססות-אירועים בלי שתצטרכו להטמיע, להתאים אישית או לתחזק את התשתית עצמה. חברת Eventarc מציעה פתרון סטנדרטי לניהול זרימת השינויים במצב (State) שנקרא 'אירועים', בין מיקרו-שירותים (microservices) מופרדים. כשהאירוע מופעל, Eventarc מנתב את האירועים האלה דרך מינויי Pub/Sub ליעדים שונים (לדוגמה: תהליכי עבודה או Cloud Run) בזמן ניהול מסירה, אבטחה, הרשאה, ניראות (observability) וטיפול בשגיאות.

ספקי אירועים של Google

  • יותר מ-90 ספקים של Google Cloud. הספקים האלה שולחים אירועים ישירות מהמקור (למשל מ-Cloud Storage) או דרך רשומות ביומני הביקורת של Cloud.
  • ספקי Pub/Sub. הספקים האלה שולחים אירועים ל-Eventarc באמצעות הודעות Pub/Sub.

ספקי צד שלישי

ספקי צד שלישי הם ישויות שאינן של Google שמציעות מקור של Eventarc.

טריגרים של Eventarc

  • אירועי Cloud Pub/Sub. אפשר להפעיל Eventarc על ידי הודעות שפורסמו בנושאי Pub/Sub.
  • אירועים של יומני ביקורת של Cloud (CAL). יומני הביקורת של Cloud מספקים את יומני הביקורת Admin Activity ו-Data Access לכל פרויקט, תיקייה וארגון ב-Cloud.
  • אירועים ישירים. אפשר להפעיל את Eventarc על ידי אירועים ישירים שונים, כמו עדכון לקטגוריה של Cloud Storage או עדכון של תבנית להגדרת תצורה מרחוק ב-Firebase.

יעדי אירועים

  • תהליכי עבודה
  • Cloud Run
  • GKE
  • Cloud Functions( דור שני)

c7ca054200edf1b3.png

מהם תהליכי עבודה?

Workflows הוא שירות מנוהל שמאפשר לשלב מיקרו-שירותים, משימות וממשקי API. Workflows הוא שירות ללא שרת (serverless), וההיקף שלו ישתנה כדי לעמוד בביקוש.

תרחישים לדוגמה של תהליכי עבודה:

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

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

היתרונות של תהליכי עבודה:

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

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

מה תלמדו

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

  • הגדרת נושא Pub/Sub ו-Eventarc כדי להפעיל תהליכי עבודה
  • הגדרת תהליך העבודה לקריאה לשירות 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

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

הגדרת סביבה

לוחצים על הסמל שמופיע מימין לסרגל החיפוש כדי להפעיל את 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 ולשירות לקוחות
  • מחבר גישה ל-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. בדיקת תהליך העבודה

מושגי ליבה של תהליכי עבודה

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

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

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

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

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

הפעלת הפעלות

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

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

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

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

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

למידע נוסף על אימות שירות לשירות, מומלץ לעיין בתיעוד.

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

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
  • ממשקי API לרישום שיחות
  • פרסום הודעות בנושא 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

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

d3527393fb07a9b3.png

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

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

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

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

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

כדי לדמות את השירות Order Service, תצטרכו לשלוח הודעות לנושא 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>

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

נקודת הקצה תהפוך לגלויה לכולם ותוכלו לקרוא ל-Customer Service 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

השלב הבא:

בקישורים הבאים תוכלו למצוא עוד מעבדי קוד Labs של Cymbal Eats:

הסרת המשאבים

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

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

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