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

เวิร์กโฟลว์คืออะไร
เวิร์กโฟลว์เป็นบริการที่มีการจัดการครบวงจรซึ่งช่วยให้คุณผสานรวม Microservice, งาน และ API ได้ เวิร์กโฟลว์เป็นบริการแบบ Serverless และจะปรับขนาดให้ตรงกับความต้องการของคุณ
กรณีการใช้งานเวิร์กโฟลว์
- เวิร์กโฟลว์ที่ขับเคลื่อนด้วยเหตุการณ์จะทำงานเมื่อทริกเกอร์ที่กำหนด เช่น เมื่อมีการส่งคำสั่งซื้อใหม่และคุณต้องการคำนวณคะแนนสะสมของลูกค้า หรือเมื่อมีการยกเลิกคำสั่งซื้อ คุณจะเผยแพร่กิจกรรมได้และบริการที่สนใจทั้งหมดจะประมวลผลกิจกรรม
- เวิร์กโฟลว์ของงานแบบกลุ่มจะเรียกใช้งานเป็นประจำโดยใช้ Cloud Scheduler เช่น งานที่ทำงานทุกคืนเพื่อตรวจสอบรายการเมนูที่มีสถานะล้มเหลวและลบรายการเหล่านั้น
Workflows เหมาะสำหรับเวิร์กโฟลว์ที่จัดระเบียบบริการ คุณสามารถตั้งค่ากระบวนการอัตโนมัติที่มีการรอและการลองใหม่ได้นานสูงสุด 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 Console แล้วสร้างโปรเจ็กต์ใหม่หรือใช้โปรเจ็กต์ที่มีอยู่ซ้ำ หากยังไม่มีบัญชี 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. เวิร์กโฟลว์การตรวจสอบ
แนวคิดหลักของ Workflows
เวิร์กโฟลว์ประกอบด้วยชุดขั้นตอนที่อธิบายโดยใช้ไวยากรณ์เวิร์กโฟลว์( 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 สำหรับทรัพยากรที่ใช้ในบทแนะนำนี้
การลบโปรเจ็กต์
วิธีที่ง่ายที่สุดในการยกเลิกการเรียกเก็บเงินคือการลบโปรเจ็กต์ที่คุณสร้างขึ้นสำหรับบทแนะนำ