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

GKE Autopilot คืออะไร
GKE Autopilot เป็นโหมดการทำงานใน GKE ที่ Google จัดการการกำหนดค่าคลัสเตอร์ รวมถึงโหนด การปรับขนาด ความปลอดภัย และการตั้งค่าอื่นๆ ที่กำหนดค่าไว้ล่วงหน้า คลัสเตอร์ Autopilot ได้รับการเพิ่มประสิทธิภาพให้เรียกใช้ภาระงานการผลิตส่วนใหญ่ และจัดสรรทรัพยากรการประมวลผลตามไฟล์ Manifest ของ Kubernetes การกำหนดค่าที่ปรับปรุงแล้วเป็นไปตามแนวทางปฏิบัติแนะนำของ GKE และคำแนะนำสำหรับการตั้งค่าคลัสเตอร์และเวิร์กโหลด ความสามารถในการปรับขนาด และความปลอดภัย ดูรายการการตั้งค่าในตัวได้ที่ตารางการเปรียบเทียบ Autopilot กับ Standard
ใน GKE Standard ผู้ใช้มีหน้าที่รับผิดชอบในการจัดการโหนด Worker และการกำหนดค่า Node Pool ส่วนที่เหลือ GKE จะจัดการให้
ความรับผิดชอบของลูกค้าเทียบกับความรับผิดชอบของ Google เมื่อเรียกใช้ในโหมดมาตรฐานของ GKE

เมื่อใช้ GKE Autopilot การกำหนดค่าและการจัดการ Node Pool จะเป็นความรับผิดชอบของ Google ซึ่งช่วยให้คุณมุ่งเน้นที่แอปพลิเคชันและบริการที่ทำงานอยู่บนคลัสเตอร์ได้
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 ข้อความที่เผยแพร่ไปยังหัวข้อ Pub/Sub สามารถทริกเกอร์ Eventarc ได้
- เหตุการณ์บันทึกการตรวจสอบ Cloud (CAL) บันทึกการตรวจสอบของ Cloud จะมีบันทึกการตรวจสอบกิจกรรมของผู้ดูแลระบบและการเข้าถึงข้อมูลสำหรับแต่ละโปรเจ็กต์ที่อยู่ในระบบคลาวด์ โฟลเดอร์ และองค์กร
- เหตุการณ์โดยตรง Eventarc สามารถทริกเกอร์ได้จากเหตุการณ์โดยตรงต่างๆ เช่น การอัปเดตที่ถังเก็บข้อมูล Cloud Storage หรือการอัปเดตเทมเพลตการกำหนดค่าระยะไกลของ Firebase
ปลายทางของเหตุการณ์
- เวิร์กโฟลว์
- Cloud Run
- GKE
- Cloud Functions( รุ่นที่ 2)

เวิร์กโฟลว์คืออะไร
เวิร์กโฟลว์เป็นบริการที่มีการจัดการครบวงจรซึ่งช่วยให้คุณผสานรวม Microservice, งาน และ API ได้ เวิร์กโฟลว์เป็นบริการแบบ Serverless และจะปรับขนาดให้ตรงกับความต้องการของคุณ
กรณีการใช้งานเวิร์กโฟลว์
- เวิร์กโฟลว์ที่ขับเคลื่อนด้วยเหตุการณ์จะทำงานเมื่อทริกเกอร์ที่กำหนด เช่น เมื่อมีการส่งคำสั่งซื้อใหม่และคุณต้องการคำนวณคะแนนสะสมของลูกค้า หรือเมื่อมีการยกเลิกคำสั่งซื้อ คุณจะเผยแพร่กิจกรรมได้และบริการที่สนใจทั้งหมดจะประมวลผลกิจกรรม
- เวิร์กโฟลว์ของงานแบบกลุ่มจะเรียกใช้งานเป็นประจำโดยใช้ Cloud Scheduler เช่น งานที่ทำงานทุกคืนเพื่อตรวจสอบรายการเมนูที่มีสถานะเป็น "ไม่สำเร็จ" และลบรายการเหล่านั้น
เวิร์กโฟลว์เหมาะสำหรับเวิร์กโฟลว์ที่จัดระเบียบบริการ คุณสามารถตั้งค่ากระบวนการอัตโนมัติที่มีการรอและการลองใหม่ได้นานสูงสุด 1 ปี
ข้อดีของเวิร์กโฟลว์
- การกำหนดค่าเหนือโค้ด: ลดหนี้ทางเทคนิคด้วยการย้ายตรรกะไปที่การกำหนดค่าแทนการเขียนโค้ด
- ลดความซับซ้อนของสถาปัตยกรรม เวิร์กโฟลว์แบบมีสถานะช่วยให้คุณเห็นภาพและตรวจสอบการผสานรวมบริการที่ซับซ้อนได้โดยไม่ต้องมีทรัพยากร Dependency เพิ่มเติม
- รวมความน่าเชื่อถือและความทนทานต่อข้อผิดพลาด ควบคุมความล้มเหลวด้วยตรรกะการลองใหม่และการจัดการข้อผิดพลาดเริ่มต้นหรือที่กำหนดเอง แม้ว่าระบบอื่นๆ จะล้มเหลวก็ตาม โดยจะตรวจสอบทุกขั้นตอนไปยัง Cloud Spanner เพื่อช่วยให้คุณติดตามความคืบหน้าได้
- ไม่ต้องบำรุงรักษา ปรับขนาดได้ตามต้องการ: ไม่ต้องแพตช์หรือบำรุงรักษา จ่ายเมื่อเวิร์กโฟลว์ทำงานเท่านั้น โดยจะไม่มีค่าใช้จ่ายขณะรอหรือไม่ได้ใช้งาน
ใน Lab นี้ คุณจะได้กำหนดค่าเวิร์กโฟลว์ที่ขับเคลื่อนด้วยเหตุการณ์
สิ่งที่คุณจะได้เรียนรู้
ในแล็บนี้ คุณจะได้เรียนรู้วิธีทำสิ่งต่อไปนี้
- กำหนดค่าหัวข้อ Pub/Sub และ Eventarc เพื่อทริกเกอร์ Workflows
- กำหนดค่าเวิร์กโฟลว์เพื่อทำการเรียก API ไปยังแอปพลิเคชันที่ทำงานใน GKE Autopilot
- กำหนดค่าเวิร์กโฟลว์เพื่อเผยแพร่ข้อความไปยัง Pub/Sub
- วิธีกำหนดการค้นหาบันทึกแบบมีโครงสร้างของเวิร์กโฟลว์ใน Cloud Logging และการใช้ gcloud CLI
ข้อกำหนดเบื้องต้น
- แล็บนี้ถือว่าคุณคุ้นเคยกับสภาพแวดล้อมของ Cloud Console และ Cloud Shell
- ประสบการณ์การใช้งาน GKE และ Cloud Pub/Sub มาก่อนจะเป็นประโยชน์ แต่ไม่จำเป็น
2. การตั้งค่าและข้อกำหนด
การตั้งค่าโปรเจ็กต์ Cloud
- ลงชื่อเข้าใช้ คอนโซล Google Cloud แล้วสร้างโปรเจ็กต์ใหม่หรือใช้โปรเจ็กต์ที่มีอยู่ซ้ำ หากยังไม่มีบัญชี Gmail หรือ Google Workspace คุณต้องสร้างบัญชี



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

โคลนที่เก็บและไปที่ไดเรกทอรี จากนั้นคัดลอกและวางคำสั่งด้านล่างลงในเทอร์มินัล แล้วกด Enter
git clone https://github.com/GoogleCloudPlatform/cymbal-eats.git && cd cymbal-eats/customer-service
ติดตั้งใช้งานทรัพยากร Dependency ที่จำเป็นโดยเรียกใช้ 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
ทำให้แอปพลิเคชันใช้งานได้
จากนั้นคุณจะติดตั้งใช้งานแอปพลิเคชันฝ่ายบริการลูกค้า ซึ่งเป็น Microservice ที่ใช้ Java และใช้เฟรมเวิร์ก Quarkus
ไปที่โฟลเดอร์ 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
ระบบจะใช้เวลาสักครู่ในการเปลี่ยนแอปพลิเคชันเป็นสถานะ "กำลังทำงาน"
ตรวจสอบไฟล์ข้อกำหนดการติดตั้งใช้งาน
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. เวิร์กโฟลว์การตรวจสอบ
แนวคิดหลักของเวิร์กโฟลว์
เวิร์กโฟลว์ประกอบด้วยชุดขั้นตอนที่อธิบายโดยใช้ไวยากรณ์เวิร์กโฟลว์( YAML หรือ JSON)
หลังจากสร้างเวิร์กโฟลว์แล้ว ระบบจะนําไปใช้งาน ซึ่งทําให้เวิร์กโฟลว์พร้อมดําเนินการ
การดำเนินการคือการเรียกใช้ตรรกะที่อยู่ในคำจำกัดความของเวิร์กโฟลว์เพียงครั้งเดียว เวิร์กโฟลว์ที่ยังไม่ได้ดำเนินการจะไม่ทำให้เกิดการเรียกเก็บเงิน การดำเนินการเวิร์กโฟลว์ทั้งหมดเป็นอิสระต่อกัน และการปรับขนาดอย่างรวดเร็วของผลิตภัณฑ์ช่วยให้ดำเนินการพร้อมกันได้เป็นจำนวนมาก
การควบคุมการดำเนินการ
- ขั้นตอน - หากต้องการสร้างเวิร์กโฟลว์ ให้กำหนด
stepsและลำดับการดำเนินการที่ต้องการโดยใช้ไวยากรณ์เวิร์กโฟลว์ ทุกเวิร์กโฟลว์ต้องมีอย่างน้อย 1 ขั้นตอน - เงื่อนไข - คุณสามารถใช้บล็อก
switchเป็นกลไกการเลือกที่อนุญาตให้ค่าของนิพจน์ควบคุมโฟลว์ของการดำเนินการเวิร์กโฟลว์ - การวนซ้ำ - คุณใช้ลูป
forเพื่อวนซ้ำในลำดับตัวเลขหรือผ่านคอลเล็กชันข้อมูล เช่น รายการหรือแผนที่ - เวิร์กโฟลว์ย่อย - เวิร์กโฟลว์ย่อยทำงานคล้ายกับกิจวัตรหรือฟังก์ชันในภาษาโปรแกรม ซึ่งช่วยให้คุณห่อหุ้มขั้นตอนหรือชุดขั้นตอนที่เวิร์กโฟลว์จะทำซ้ำหลายครั้งได้
การเรียกใช้การดำเนินการ
- ด้วยตนเอง - คุณจัดการเวิร์กโฟลว์ได้จากคอนโซล Google Cloud หรือจากบรรทัดคำสั่งโดยใช้ Google Cloud CLI
- แบบเป็นโปรแกรม - คุณสามารถใช้ไลบรารีของไคลเอ็นต์ Cloud สำหรับ Workflows API หรือ REST API เพื่อจัดการเวิร์กโฟลว์ได้
- กำหนดเวลาไว้ - คุณใช้ 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
ตั้งค่าตัวแปรสภาพแวดล้อมของบริการเวิร์กโฟลว์และโปรเจ็กต์
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
ตรวจสอบแหล่งที่มาของเวิร์กโฟลว์และรายละเอียดอื่นๆ(แท็บทริกเกอร์) ขณะนี้ยังไม่มีการกำหนดค่าทริกเกอร์เพื่อเรียกใช้เวิร์กโฟลว์นี้ คุณจะตั้งค่านี้ในขั้นตอนถัดไป

6. กำหนดค่าหัวข้อ Pub/Sub และทริกเกอร์ Eventarc
จากนั้นคุณจะสร้างหัวข้อ Pub/Sub 2 หัวข้อและกำหนดค่าทริกเกอร์ Eventarc 1 รายการ
แอปพลิเคชัน Order Service จะเผยแพร่ข้อความไปยัง 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 และส่งไปยัง 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 trigger ที่สร้างขึ้น

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

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

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

หากต้องการจำลองบริการคำสั่งซื้อ คุณจะต้องส่งข้อความไปยังหัวข้อ Pub/Sub จาก Cloud Shell และยืนยันบันทึกของฝ่ายบริการลูกค้าใน 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'
ตรวจสอบรายละเอียดการดำเนินการเวิร์กโฟลว์และบันทึก


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 แล้วใช้ gcloud CLI เพื่ออ่านบันทึกด้วยคำสั่งด้านล่าง
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 เพื่อทริกเกอร์ Workflows
- วิธีกำหนดค่าเวิร์กโฟลว์เพื่อเรียก API ไปยังแอปพลิเคชันที่ทำงานใน GKE Autopilot
- วิธีกำหนดค่าเวิร์กโฟลว์เพื่อเผยแพร่ข้อความไปยัง Pub/Sub
- วิธีกำหนดการค้นหาบันทึกแบบมีโครงสร้างของเวิร์กโฟลว์ใน Cloud Logging และการใช้ gcloud CLI
ขั้นตอนต่อไปที่ทำได้
ดู Codelab อื่นๆ ของ Cymbal Eats
- การทริกเกอร์ Cloud Workflows ด้วย Eventarc
- การทริกเกอร์การประมวลผลเหตุการณ์จาก Cloud Storage
- การเชื่อมต่อกับ Private CloudSQL จาก Cloud Run
- การเชื่อมต่อกับฐานข้อมูลที่มีการจัดการครบวงจรจาก Cloud Run
- รักษาความปลอดภัยให้กับแอปพลิเคชันแบบ Serverless ด้วย Identity Aware Proxy (IAP)
- การทริกเกอร์ Cloud Run Jobs ด้วย Cloud Scheduler
- การติดตั้งใช้งานกับ Cloud Run อย่างปลอดภัย
- การรักษาความปลอดภัยให้กับการเข้าชมขาเข้าของ Cloud Run
ล้างข้อมูล
โปรดลบโปรเจ็กต์ที่มีทรัพยากรออก หรือเก็บโปรเจ็กต์ไว้และลบทรัพยากรแต่ละรายการออก เพื่อไม่ให้เกิดการเรียกเก็บเงินกับบัญชี Google Cloud สำหรับทรัพยากรที่ใช้ในบทแนะนำนี้
การลบโปรเจ็กต์
วิธีที่ง่ายที่สุดในการยกเลิกการเรียกเก็บเงินคือการลบโปรเจ็กต์ที่คุณสร้างขึ้นสำหรับบทแนะนำ