การทริกเกอร์เวิร์กโฟลว์ด้วย Eventarc

1. ภาพรวม

ใน Lab นี้ คุณจะได้สร้างทริกเกอร์ Eventarc ที่เชื่อมต่อหัวข้อ Pub/Sub กับบริการเวิร์กโฟลว์ Eventarc ช่วยให้คุณแยกการสื่อสารระหว่างบริการออกจากกันได้ ซึ่งจะทำให้โซลูชันของคุณขยายได้มากขึ้นและขับเคลื่อนด้วยเหตุการณ์ คุณจะสร้างเวิร์กโฟลว์ที่มีหลายขั้นตอนเพื่อดำเนินการตามกระบวนการทางธุรกิจในการคำนวณคะแนนสะสมของลูกค้าสำหรับการสั่งซื้อที่ Cymbal Eats เวิร์กโฟลว์จะเรียกใช้ API บริการ Cloud Run ส่วนตัวเพื่อเรียกใช้ตรรกะทางธุรกิจ บริการ Cloud Run ได้รับการกำหนดค่าให้อนุญาตเฉพาะการรับส่งข้อมูลภายในและต้องมีการตรวจสอบสิทธิ์ เวิร์กโฟลว์จะเผยแพร่ข้อความไปยังหัวข้อ Pub/Sub เพื่อแจ้งให้ Order Service ทราบเกี่ยวกับคะแนนสะสมที่คำนวณแล้ว

c6d4337a47b55333.png

Eventarc คืออะไร

Eventarc ช่วยให้คุณสร้างสถาปัตยกรรมที่ขับเคลื่อนด้วยเหตุการณ์ได้โดยไม่ต้องติดตั้งใช้งาน ปรับแต่ง หรือบํารุงรักษาโครงสร้างพื้นฐานที่อยู่เบื้องหลัง Eventarc มีโซลูชันที่ได้มาตรฐานในการจัดการโฟลว์ของการเปลี่ยนแปลงสถานะที่เรียกว่าเหตุการณ์ระหว่างไมโครเซอร์วิสที่แยกออกจากกัน เมื่อทริกเกอร์แล้ว Eventarc จะกำหนดเส้นทางเหตุการณ์เหล่านี้ผ่านการสมัครใช้บริการ Pub/Sub ไปยังปลายทางต่างๆ (เช่น เวิร์กโฟลว์หรือ Cloud Run) ขณะจัดการการนำส่ง ความปลอดภัย การให้สิทธิ์ การสังเกตการณ์ และการจัดการข้อผิดพลาดให้คุณ

ผู้ให้บริการกิจกรรมของ Google

  • ผู้ให้บริการ Google Cloud กว่า 90 ราย ผู้ให้บริการเหล่านี้จะส่งเหตุการณ์จากแหล่งที่มาโดยตรง (เช่น Cloud Storage) หรือผ่านรายการบันทึกของ Cloud Audit
  • ผู้ให้บริการ Pub/Sub ผู้ให้บริการเหล่านี้จะส่งเหตุการณ์ไปยัง Eventarc โดยใช้ข้อความ Pub/Sub

ผู้ให้บริการบุคคลที่สาม

ผู้ให้บริการบุคคลที่สามคือหน่วยงานที่ไม่ใช่ Google ที่เสนอแหล่งที่มาของ Eventarc

ทริกเกอร์ Eventarc

  • เหตุการณ์ Cloud Pub/Sub Eventarc สามารถทริกเกอร์ได้โดยข้อความที่เผยแพร่ไปยังหัวข้อ Pub/Sub
  • เหตุการณ์บันทึกการตรวจสอบ Cloud (CAL) บันทึกการตรวจสอบของ Cloud จะมีบันทึกการตรวจสอบกิจกรรมของผู้ดูแลระบบและการเข้าถึงข้อมูลสำหรับแต่ละโปรเจ็กต์ โฟลเดอร์ และองค์กรในระบบคลาวด์
  • เหตุการณ์โดยตรง Eventarc สามารถทริกเกอร์ได้จากเหตุการณ์โดยตรงต่างๆ เช่น การอัปเดตที่ถังเก็บข้อมูล Cloud Storage หรือการอัปเดตเทมเพลตการกำหนดค่าระยะไกลของ Firebase

ปลายทางของเหตุการณ์

c7ca054200edf1b3.png

เวิร์กโฟลว์คืออะไร

เวิร์กโฟลว์เป็นบริการที่มีการจัดการครบวงจรซึ่งช่วยให้คุณผสานรวม Microservice, งาน และ API ได้ เวิร์กโฟลว์เป็นบริการแบบ Serverless และจะปรับขนาดให้ตรงกับความต้องการของคุณ

กรณีการใช้งานเวิร์กโฟลว์

  • เวิร์กโฟลว์ที่ขับเคลื่อนด้วยเหตุการณ์จะทำงานเมื่อทริกเกอร์ที่กำหนด เช่น เมื่อมีการส่งคำสั่งซื้อใหม่และคุณต้องการคำนวณคะแนนสะสมของลูกค้า หรือเมื่อมีการยกเลิกคำสั่งซื้อ คุณจะเผยแพร่กิจกรรมได้และบริการที่สนใจทั้งหมดจะประมวลผลกิจกรรม
  • เวิร์กโฟลว์ของงานแบบกลุ่มจะเรียกใช้งานเป็นประจำโดยใช้ Cloud Scheduler เช่น งานที่ทำงานทุกคืนเพื่อตรวจสอบรายการเมนูที่มีสถานะล้มเหลวและลบรายการเหล่านั้น

เวิร์กโฟลว์เหมาะสำหรับเวิร์กโฟลว์ที่จัดระเบียบบริการ คุณสามารถตั้งค่ากระบวนการอัตโนมัติที่มีการรอและการลองใหม่ได้นานสูงสุด 1 ปี

ประโยชน์ของเวิร์กโฟลว์

  • การกำหนดค่าเหนือโค้ด: ลดหนี้ทางเทคนิคด้วยการย้ายตรรกะไปที่การกำหนดค่าแทนการเขียนโค้ด
  • ลดความซับซ้อนของสถาปัตยกรรม เวิร์กโฟลว์แบบมีสถานะช่วยให้คุณเห็นภาพและตรวจสอบการผสานรวมบริการที่ซับซ้อนได้โดยไม่ต้องมีทรัพยากร Dependency เพิ่มเติม
  • รวมความน่าเชื่อถือและความทนทานต่อข้อบกพร่อง ควบคุมความล้มเหลวด้วยตรรกะการลองใหม่และการจัดการข้อผิดพลาดเริ่มต้นหรือที่กำหนดเอง แม้ว่าระบบอื่นๆ จะล้มเหลวก็ตาม โดยจะตรวจสอบทุกขั้นตอนไปยัง Cloud Spanner เพื่อช่วยให้คุณติดตามความคืบหน้าได้
  • ไม่ต้องบำรุงรักษา ปรับขนาดได้ตามต้องการ: ไม่ต้องแพตช์หรือบำรุงรักษา จ่ายเมื่อเวิร์กโฟลว์ทำงานเท่านั้น โดยจะไม่มีค่าใช้จ่ายขณะรอหรือไม่ได้ใช้งาน

ใน Lab นี้ คุณจะได้กำหนดค่าเวิร์กโฟลว์ที่ขับเคลื่อนด้วยเหตุการณ์

สิ่งที่คุณจะได้เรียนรู้

ในแล็บนี้ คุณจะได้เรียนรู้วิธีทำสิ่งต่อไปนี้

  • กำหนดค่าหัวข้อ Pub/Sub และ Eventarc เพื่อทริกเกอร์เวิร์กโฟลว์
  • กำหนดค่าเวิร์กโฟลว์เพื่อเรียกใช้บริการ Cloud Run และเผยแพร่ข้อความไปยัง Pub/Sub
  • วิธีค้นหาบันทึกที่มีโครงสร้างของเวิร์กโฟลว์ใน Cloud Logging และการใช้ gcloud CLI

ข้อกำหนดเบื้องต้น

  • แล็บนี้มีสมมติฐานว่าคุณคุ้นเคยกับสภาพแวดล้อมของ Cloud Console และ Cloud Shell
  • ประสบการณ์การใช้งาน Cloud Run และ Cloud Pub/Sub มาก่อนจะเป็นประโยชน์ แต่ไม่จำเป็น

2. การตั้งค่าและข้อกำหนด

การตั้งค่าโปรเจ็กต์ Cloud

  1. ลงชื่อเข้าใช้ Google Cloud Console แล้วสร้างโปรเจ็กต์ใหม่หรือใช้โปรเจ็กต์ที่มีอยู่ซ้ำ หากยังไม่มีบัญชี Gmail หรือ Google Workspace คุณต้องสร้างบัญชี

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • ชื่อโปรเจ็กต์คือชื่อที่แสดงสำหรับผู้เข้าร่วมโปรเจ็กต์นี้ ซึ่งเป็นสตริงอักขระที่ Google APIs ไม่ได้ใช้ โดยคุณจะอัปเดตได้ทุกเมื่อ
  • รหัสโปรเจ็กต์จะไม่ซ้ำกันในโปรเจ็กต์ Google Cloud ทั้งหมดและเปลี่ยนแปลงไม่ได้ (เปลี่ยนไม่ได้หลังจากตั้งค่าแล้ว) Cloud Console จะสร้างสตริงที่ไม่ซ้ำกันโดยอัตโนมัติ ซึ่งโดยปกติแล้วคุณไม่จำเป็นต้องสนใจว่าสตริงนั้นคืออะไร ใน Codelab ส่วนใหญ่ คุณจะต้องอ้างอิงรหัสโปรเจ็กต์ (โดยปกติจะระบุเป็น PROJECT_ID) หากไม่ชอบรหัสที่สร้างขึ้น คุณก็สร้างรหัสแบบสุ่มอีกรหัสหนึ่งได้ หรือคุณจะลองใช้ชื่อของคุณเองเพื่อดูว่าพร้อมใช้งานหรือไม่ก็ได้ คุณจะเปลี่ยนแปลงรหัสนี้หลังจากขั้นตอนนี้ไม่ได้ และรหัสจะยังคงอยู่ตลอดระยะเวลาของโปรเจ็กต์
  • โปรดทราบว่ายังมีค่าที่ 3 ซึ่งคือหมายเลขโปรเจ็กต์ที่ API บางตัวใช้ ดูข้อมูลเพิ่มเติมเกี่ยวกับค่าทั้ง 3 นี้ได้ในเอกสารประกอบ
  1. จากนั้นคุณจะต้องเปิดใช้การเรียกเก็บเงินใน Cloud Console เพื่อใช้ทรัพยากร/API ของ Cloud การทำตาม Codelab นี้ไม่ควรมีค่าใช้จ่ายมากนัก หรืออาจไม่มีเลย หากต้องการปิดทรัพยากรเพื่อไม่ให้มีการเรียกเก็บเงินนอกเหนือจากบทแนะนำนี้ คุณสามารถลบทรัพยากรที่สร้างขึ้นหรือลบทั้งโปรเจ็กต์ได้ ผู้ใช้ Google Cloud รายใหม่มีสิทธิ์เข้าร่วมโปรแกรมช่วงทดลองใช้ฟรีมูลค่า$300 USD

การตั้งค่าสภาพแวดล้อม

เปิดใช้งาน Cloud Shell โดยคลิกไอคอนทางด้านขวาของแถบค้นหา

eb0157a992f16fa3.png

โคลนที่เก็บและไปที่ไดเรกทอรี จากนั้นคัดลอกและวางคำสั่งด้านล่างลงในเทอร์มินัล แล้วกด Enter

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

ติดตั้งใช้งานทรัพยากร Dependency ที่จำเป็นโดยเรียกใช้ lab-setup.sh

ระบบจะสร้างทรัพยากรต่อไปนี้

  • คลัสเตอร์และอินสแตนซ์ AlloyDB
  • Artifact Registry เพื่อจัดเก็บอิมเมจคอนเทนเนอร์สำหรับ Cloud Run Job และ Customer Service
  • เครื่องมือเชื่อมต่อการเข้าถึง VPC สำหรับบริการและงาน Cloud Run เพื่อสื่อสารกับฐานข้อมูล AlloyDB
  • งานใน Cloud Run เพื่อสร้างฐานข้อมูล AlloyDB
  • ฝ่ายบริการลูกค้าของ Cloud Run - Microservice ที่ใช้ Java ซึ่งใช้เฟรมเวิร์ก Quarkus
./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 และลำดับการดำเนินการที่ต้องการโดยใช้ไวยากรณ์เวิร์กโฟลว์ เวิร์กโฟลว์ทุกรายการต้องมีอย่างน้อย 1 ขั้นตอน
  • เงื่อนไข - คุณสามารถใช้บล็อก switch เป็นกลไกการเลือกที่ช่วยให้ค่าของนิพจน์ควบคุมโฟลว์ของการดำเนินการเวิร์กโฟลว์ได้
  • การวนซ้ำ - คุณใช้ลูป for เพื่อวนซ้ำลำดับตัวเลขหรือผ่านคอลเล็กชันข้อมูล เช่น รายการหรือแผนที่ ได้
  • เวิร์กโฟลว์ย่อย - เวิร์กโฟลว์ย่อยทำงานคล้ายกับกิจวัตรหรือฟังก์ชันในภาษาโปรแกรม ซึ่งช่วยให้คุณห่อหุ้มขั้นตอนหรือชุดขั้นตอนที่เวิร์กโฟลว์จะทำซ้ำหลายครั้งได้

การเรียกใช้การดำเนินการ

  • ด้วยตนเอง - คุณจัดการเวิร์กโฟลว์ได้จากคอนโซล Google Cloud หรือจากบรรทัดคำสั่งโดยใช้ Google Cloud CLI
  • แบบเป็นโปรแกรม - คุณสามารถใช้ไลบรารีของไคลเอ็นต์ Cloud สำหรับ Workflows API หรือ REST API เพื่อจัดการเวิร์กโฟลว์ได้
  • กำหนดเวลาไว้ - คุณใช้ Cloud Scheduler เพื่อเรียกใช้เวิร์กโฟลว์ตามกำหนดการที่เฉพาะเจาะจงได้

อาร์กิวเมนต์รันไทม์

คุณเข้าถึงข้อมูลที่ส่งผ่านในรันไทม์ได้โดยการเพิ่มฟิลด์ params ลงในเวิร์กโฟลว์หลัก (วางไว้ในบล็อกหลัก) บล็อกหลักยอมรับอาร์กิวเมนต์เดียวซึ่งเป็นประเภทข้อมูล JSON ที่ถูกต้อง ฟิลด์ params จะตั้งชื่อตัวแปรที่เวิร์กโฟลว์ใช้เพื่อจัดเก็บข้อมูลที่คุณส่ง

เวิร์กโฟลว์ในการตรวจสอบสิทธิ์บริการ Cloud Run

ฝ่ายบริการลูกค้าเป็นแอปพลิเคชันตัวอย่างที่รวมอยู่ในที่เก็บนี้ ซึ่งทำงานบน Cloud Run และได้รับการกำหนดค่าให้ยอมรับคำขอที่ผ่านการตรวจสอบสิทธิ์ซึ่งมาจากเครือข่ายภายในเท่านั้น คุณจะกำหนดค่าเวิร์กโฟลว์เพื่อเพิ่มโทเค็น OpenID Connect(OIDC) ที่ Google ลงนามในคำขอเพื่อตรวจสอบสิทธิ์กับบริการ Cloud Run

โปรดอ่านเอกสารประกอบเพื่อดูข้อมูลเพิ่มเติมเกี่ยวกับการตรวจสอบสิทธิ์แบบบริการต่อบริการ

การตรวจสอบสิทธิ์เวิร์กโฟลว์ได้รับการกำหนดค่าภายใต้บล็อก 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

ตั้งค่าตัวแปรสภาพแวดล้อมของบริการเวิร์กโฟลว์และโปรเจ็กต์

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

ตรวจสอบแหล่งที่มาของเวิร์กโฟลว์และรายละเอียดอื่นๆ(แท็บทริกเกอร์) ขณะนี้ยังไม่มีการกำหนดค่าทริกเกอร์เพื่อเรียกใช้เวิร์กโฟลว์นี้ คุณจะตั้งค่าในขั้นตอนถัดไป

d3527393fb07a9b3.png

5. กำหนดค่าหัวข้อ Pub/Sub และทริกเกอร์ Eventarc

จากนั้นคุณจะสร้างหัวข้อ Pub/Sub 2 หัวข้อและกำหนดค่าทริกเกอร์ Eventarc 1 รายการ

บริการคำสั่งซื้อจะเผยแพร่ข้อความไปยัง order-topic พร้อมข้อมูลเกี่ยวกับคำสั่งซื้อใหม่

เวิร์กโฟลว์จะเผยแพร่ข้อความไปยัง order-points-topic พร้อมข้อมูลเกี่ยวกับคะแนนสะสมของคำสั่งซื้อและจำนวนเงินทั้งหมด Order Service(ส่วนที่ไม่ได้ติดตั้งใช้งานของแล็บนี้) จะแสดงปลายทางที่ใช้โดยการสมัครใช้บริการแบบพุชสำหรับ 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 trigger ที่สร้างขึ้น

bda445561ad5f4.png

ตรวจสอบการสมัครใช้บริการที่สร้างขึ้นสำหรับทริกเกอร์

3fccdda7d5526597.png

ตรวจสอบการเปลี่ยนแปลงในฝั่งเวิร์กโฟลว์ เพิ่มทริกเกอร์ใหม่แล้ว

23d338abc16eaac8.png

6. เวิร์กโฟลว์การทดสอบ

c6d4337a47b55333.png

หากต้องการจำลองบริการคำสั่งซื้อ คุณจะต้องส่งข้อความไปยังหัวข้อ Pub/Sub จาก Cloud Shell และยืนยันบันทึกบริการลูกค้าของ Cloud Run ใน Cloud Console

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 แล้วใช้ gcloud CLI เพื่ออ่านบันทึกด้วยคำสั่งด้านล่าง

แทนที่รหัสโปรเจ็กต์(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>

หากต้องการดูบันทึกลูกค้าที่มีอยู่ ให้เปลี่ยนการตั้งค่าcustomer-service ขาเข้าของ Cloud Run เป็นตัวเลือก "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 สำหรับเวิร์กโฟลว์
  • วิธีเรียกใช้บริการ Cloud Run จากเวิร์กโฟลว์
  • วิธีค้นหาบันทึกที่มีโครงสร้างใน Cloud Logging และการใช้ gcloud CLI

ขั้นตอนต่อไปที่ทำได้

ดู Codelab อื่นๆ ของ Cymbal Eats

ล้างข้อมูล

โปรดลบโปรเจ็กต์ที่มีทรัพยากรหรือเก็บโปรเจ็กต์ไว้และลบทรัพยากรแต่ละรายการเพื่อหลีกเลี่ยงการเรียกเก็บเงินจากบัญชี Google Cloud สำหรับทรัพยากรที่ใช้ในบทแนะนำนี้

การลบโปรเจ็กต์

วิธีที่ง่ายที่สุดในการยกเลิกการเรียกเก็บเงินคือการลบโปรเจ็กต์ที่คุณสร้างขึ้นสำหรับบทแนะนำ