1. ภาพรวม
ในห้องทดลองนี้ คุณจะสร้างทริกเกอร์ Eventarc ที่เชื่อมต่อหัวข้อ Pub/Sub กับบริการเวิร์กโฟลว์ Eventarc ให้คุณแยกบริการออกจากการสื่อสารด้านบริการ ทำให้โซลูชันมีความยืดหยุ่นและขับเคลื่อนเหตุการณ์ได้มากขึ้น คุณจะสร้างเวิร์กโฟลว์ที่มีหลายขั้นตอนในการดำเนินกระบวนการทางธุรกิจเพื่อคำนวณคะแนนสะสมของลูกค้าสำหรับการสั่งซื้อที่ Cymbal Eats เวิร์กโฟลว์จะเรียกใช้ API บริการ Cloud Run ส่วนตัวเพื่อเรียกใช้ตรรกะทางธุรกิจ บริการ Cloud Run มีการกำหนดค่าให้อนุญาตการรับส่งข้อมูลภายในเท่านั้นและต้องมีการตรวจสอบสิทธิ์ เวิร์กโฟลว์จะเผยแพร่ข้อความไปยังหัวข้อ Pub/Sub เพื่อแจ้งบริการสั่งซื้อเกี่ยวกับคะแนนสะสมที่คำนวณแล้ว
Eventarc คืออะไร
Eventarc ช่วยให้คุณสร้างสถาปัตยกรรมที่ขับเคลื่อนด้วยเหตุการณ์ได้โดยไม่ต้องใช้ ปรับแต่ง หรือบำรุงรักษาโครงสร้างพื้นฐานที่สำคัญ Eventarc นำเสนอโซลูชันที่เป็นมาตรฐานเพื่อจัดการโฟลว์ของการเปลี่ยนแปลงสถานะ ซึ่งเรียกว่าเหตุการณ์ ระหว่าง Microservice ที่แยกส่วนออกจากกัน เมื่อทริกเกอร์ 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
จุดหมายของเหตุการณ์
- เวิร์กโฟลว์
- Cloud Run
- GKE
- Cloud Functions( รุ่นที่ 2)
เวิร์กโฟลว์คืออะไร
เวิร์กโฟลว์คือบริการที่มีการจัดการครบวงจรซึ่งช่วยให้คุณผสานรวม Microservice, งาน และ API ได้ เวิร์กโฟลว์เป็นบริการแบบ Serverless และจะปรับขนาดให้ตรงกับความต้องการของคุณ
กรณีการใช้งานเวิร์กโฟลว์
- เวิร์กโฟลว์ที่ขับเคลื่อนด้วยเหตุการณ์จะดำเนินการกับทริกเกอร์ที่กำหนด เช่น เมื่อมีการส่งคำสั่งซื้อใหม่และคุณต้องการคำนวณคะแนนสะสมของลูกค้า หรือเมื่อคำสั่งซื้อถูกยกเลิก กิจกรรมจะเผยแพร่ได้และบริการที่สนใจทั้งหมดจะประมวลผลกิจกรรม
- เวิร์กโฟลว์ของงานแบบกลุ่มจะเรียกใช้งานเป็นประจำโดยใช้ Cloud Scheduler ตัวอย่างเช่น งานทุกคืนสำหรับตรวจสอบรายการในเมนูที่อยู่ในสถานะล้มเหลวและลบออก
เวิร์กโฟลว์เหมาะสำหรับเวิร์กโฟลว์ที่จัดการบริการเป็นกลุ่ม คุณสามารถทำให้กระบวนการทำงานโดยอัตโนมัติ ซึ่งได้แก่ การรอและการลองใหม่เป็นเวลาสูงสุด 1 ปี
ประโยชน์ของเวิร์กโฟลว์
- การกำหนดค่าผ่านโค้ด: ลดหนี้ทางเทคนิคด้วยการย้ายตรรกะไปยังการกำหนดค่าแทนการเขียนโค้ด
- ลดความซับซ้อนของสถาปัตยกรรม เวิร์กโฟลว์การเก็บสถานะช่วยให้คุณแสดงภาพและตรวจสอบการผสานรวมบริการที่ซับซ้อนได้โดยไม่ต้องใช้ทรัพยากร Dependency เพิ่มเติม
- ผสานรวมความน่าเชื่อถือและความอดทนต่อความผิดพลาด ควบคุมความล้มเหลวด้วยตรรกะการลองอีกครั้งแบบเริ่มต้นหรือแบบกำหนดเอง รวมถึงการจัดการข้อผิดพลาดแม้ในกรณีที่ระบบอื่นล้มเหลว การตรวจสอบจุดทุกขั้นตอนไปยัง Cloud Spanner เพื่อช่วยให้คุณติดตามความคืบหน้าได้
- ไม่ต้องบำรุงรักษาเลย ปรับขนาดได้ตามต้องการ: ไม่จำเป็นต้องแก้ไขหรือบำรุงรักษา จ่ายเมื่อเวิร์กโฟลว์ทำงานเท่านั้น โดยไม่มีค่าใช้จ่ายระหว่างรอหรือไม่ได้ใช้งาน
ในห้องทดลองนี้ คุณจะต้องกำหนดค่าเวิร์กโฟลว์ที่ขับเคลื่อนด้วยเหตุการณ์
สิ่งที่คุณจะได้เรียนรู้
ในห้องทดลองนี้ คุณจะได้ศึกษาวิธีทำสิ่งต่อไปนี้
- กำหนดค่าหัวข้อ Pub/Sub และ Eventarc เพื่อทริกเกอร์เวิร์กโฟลว์
- กำหนดค่าเวิร์กโฟลว์เพื่อเรียกใช้บริการ Cloud Run และเผยแพร่ข้อความไปยัง Pub/Sub
- วิธีค้นหาบันทึกที่มีโครงสร้างของเวิร์กโฟลว์ใน Cloud Logging และการใช้ gcloud CLI
ข้อกำหนดเบื้องต้น
- ห้องทดลองนี้จะถือว่ามีความคุ้นเคยกับสภาพแวดล้อม Cloud Console และ Cloud Shell
- ประสบการณ์การใช้งาน Cloud Run และ Cloud Pub/Sub ก่อนหน้านี้นั้นมีประโยชน์แต่ไม่ได้บังคับ
2. การตั้งค่าและข้อกำหนด
ตั้งค่าโปรเจ็กต์ที่อยู่ในระบบคลาวด์
- ลงชื่อเข้าใช้ Google Cloud Console และสร้างโปรเจ็กต์ใหม่หรือใช้โปรเจ็กต์ที่มีอยู่ซ้ำ หากยังไม่มีบัญชี Gmail หรือ Google Workspace คุณต้องสร้างบัญชี
- ชื่อโครงการคือชื่อที่แสดงของผู้เข้าร่วมโปรเจ็กต์นี้ เป็นสตริงอักขระที่ Google APIs ไม่ได้ใช้ โดยคุณจะอัปเดตได้ทุกเมื่อ
- รหัสโปรเจ็กต์จะไม่ซ้ำกันในทุกโปรเจ็กต์ของ Google Cloud และจะเปลี่ยนแปลงไม่ได้ (เปลี่ยนแปลงไม่ได้หลังจากตั้งค่าแล้ว) Cloud Console จะสร้างสตริงที่ไม่ซ้ำกันโดยอัตโนมัติ ปกติแล้วคุณไม่สนว่าอะไรเป็นอะไร ใน Codelab ส่วนใหญ่ คุณจะต้องอ้างอิงรหัสโปรเจ็กต์ (โดยปกติจะระบุเป็น
PROJECT_ID
) หากคุณไม่ชอบรหัสที่สร้างขึ้น คุณสามารถสร้างรหัสแบบสุ่มอื่นได้ หรือคุณจะลองดำเนินการเองแล้วดูว่าพร้อมให้บริการหรือไม่ และไม่สามารถเปลี่ยนแปลงได้หลังจากขั้นตอนนี้และจะยังคงอยู่ตลอดระยะเวลาของโปรเจ็กต์ - สำหรับข้อมูลของคุณ ค่าที่ 3 คือหมายเลขโปรเจ็กต์ที่ API บางตัวใช้ ดูข้อมูลเพิ่มเติมเกี่ยวกับค่าทั้ง 3 ค่าได้ในเอกสารประกอบ
- ถัดไป คุณจะต้องเปิดใช้การเรียกเก็บเงินใน Cloud Console เพื่อใช้ทรัพยากร/API ของระบบคลาวด์ การใช้งาน Codelab นี้น่าจะไม่มีค่าใช้จ่ายใดๆ หากมี หากต้องการปิดทรัพยากรเพื่อไม่ให้มีการเรียกเก็บเงินนอกเหนือจากบทแนะนำนี้ คุณสามารถลบทรัพยากรที่คุณสร้างหรือลบทั้งโปรเจ็กต์ได้ ผู้ใช้ใหม่ของ Google Cloud จะมีสิทธิ์เข้าร่วมโปรแกรมทดลองใช้ฟรี$300 USD
การตั้งค่าสภาพแวดล้อม
เปิดใช้งาน Cloud Shell โดยคลิกไอคอนทางด้านขวาของแถบค้นหา
โคลนที่เก็บและไปยังไดเรกทอรี คัดลอกและวางคำสั่งด้านล่างลงในเทอร์มินัลแล้วกด Enter:
git clone https://github.com/GoogleCloudPlatform/cymbal-eats.git && cd cymbal-eats/customer-service
ทำให้ทรัพยากร Dependency ที่จำเป็นใช้งานได้โดยการเรียกใช้ lab-setup.sh
ระบบจะสร้างแหล่งข้อมูลต่อไปนี้
- คลัสเตอร์และอินสแตนซ์ของ AlloyDB
- Artifact Registry เพื่อจัดเก็บอิมเมจคอนเทนเนอร์สำหรับงาน Cloud Run และบริการลูกค้า
- เครื่องมือเชื่อมต่อการเข้าถึง VPC สำหรับบริการ Cloud Run และงานเพื่อสื่อสารกับฐานข้อมูล AlloyDB
- Cloud Run Job เพื่อสร้างฐานข้อมูล AlloyDB
- ฝ่ายบริการลูกค้า Cloud Run - Microservice โดยใช้ Java ที่ใช้เฟรมเวิร์ก Quarkus
./lab-setup.sh
หากได้รับข้อความแจ้งให้ให้สิทธิ์ ให้คลิก "ให้สิทธิ์" เพื่อดำเนินการต่อ
การตั้งค่าจะใช้เวลาประมาณ 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)
หลังจากสร้างเวิร์กโฟลว์แล้ว ระบบจะทำให้ใช้งานได้ ซึ่งจะทำให้เวิร์กโฟลว์พร้อมดำเนินการ
การดำเนินการคือการเรียกใช้ตรรกะ 1 ครั้งที่อยู่ในคำจำกัดความของเวิร์กโฟลว์ เวิร์กโฟลว์ที่ยังไม่มีการดำเนินการจะไม่ทำให้เกิดการเรียกเก็บเงิน การดำเนินการตามเวิร์กโฟลว์ทั้งหมดเป็นอิสระจากกัน และการปรับขนาดอย่างรวดเร็วของผลิตภัณฑ์ทำให้เกิดการดำเนินการพร้อมกันจำนวนมาก
การควบคุมการดำเนินการ
- ขั้นตอน - หากต้องการสร้างเวิร์กโฟลว์ คุณต้องระบุ
steps
และลำดับการดำเนินการที่ต้องการโดยใช้ไวยากรณ์เวิร์กโฟลว์ เวิร์กโฟลว์ทั้งหมดต้องมีอย่างน้อย 1 ขั้นตอน - เงื่อนไข - คุณสามารถใช้บล็อก
switch
เป็นกลไกการเลือกที่อนุญาตให้ค่าของนิพจน์ควบคุมโฟลว์การดำเนินการของเวิร์กโฟลว์ - การทำซ้ำ - คุณสามารถใช้การวนซ้ำ
for
เพื่อทำซ้ำลำดับตัวเลขหรือผ่านการรวบรวมข้อมูล เช่น รายการหรือแผนที่ - เวิร์กโฟลว์ย่อย - เวิร์กโฟลว์ย่อยทำงานคล้ายกับกิจวัตรหรือฟังก์ชันในภาษาโปรแกรม ซึ่งทำให้คุณสรุปขั้นตอนหรือชุดขั้นตอนที่จะต้องทำซ้ำๆ หลายครั้ง
การทริกเกอร์การดำเนินการ
- ด้วยตนเอง - คุณสามารถจัดการเวิร์กโฟลว์ได้จากคอนโซล Google Cloud หรือจากบรรทัดคำสั่งโดยใช้ Google Cloud CLI
- แบบเป็นโปรแกรม - คุณจะใช้ไลบรารีของไคลเอ็นต์ระบบคลาวด์สำหรับ Workflows API หรือ REST API เพื่อจัดการเวิร์กโฟลว์ได้
- กำหนดเวลาไว้ - คุณใช้ Cloud Scheduler เพื่อเรียกใช้เวิร์กโฟลว์ตามเวลาที่กำหนดได้
อาร์กิวเมนต์รันไทม์
คุณเข้าถึงข้อมูลที่ส่งขณะรันไทม์ได้โดยการเพิ่มช่อง params
ลงในเวิร์กโฟลว์หลัก (วางไว้ในบล็อกหลัก) การบล็อกหลักจะยอมรับอาร์กิวเมนต์เดียวที่เป็นประเภทข้อมูล JSON ที่ถูกต้อง ช่องพารามิเตอร์จะตั้งชื่อตัวแปรที่เวิร์กโฟลว์ใช้ในการจัดเก็บข้อมูลที่คุณส่ง
เวิร์กโฟลว์สำหรับการตรวจสอบสิทธิ์บริการ 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}
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
- 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
ตรวจสอบแหล่งที่มาของเวิร์กโฟลว์และรายละเอียดอื่นๆ(แท็บทริกเกอร์) ขณะนี้ไม่มีทริกเกอร์ที่กำหนดค่าเพื่อเรียกใช้เวิร์กโฟลว์นี้ คุณจะได้ตั้งค่าในขั้นตอนถัดไป
5. กำหนดค่าหัวข้อ Pub/Sub และทริกเกอร์ Eventarc
ถัดไป คุณจะต้องสร้างหัวข้อ Pub/Sub จำนวน 2 รายการ และกำหนดค่าทริกเกอร์ Eventarc 1 รายการ
บริการสั่งซื้อจะเผยแพร่ข้อความไปยัง order-topic
พร้อมข้อมูลเกี่ยวกับคำสั่งซื้อใหม่
เวิร์กโฟลว์จะเผยแพร่ข้อความไปยัง order-points-topic
พร้อมข้อมูลเกี่ยวกับคะแนนสะสมสำหรับคำสั่งซื้อและจำนวนเงินทั้งหมด บริการสั่งซื้อ(ไม่ใช่ส่วนหนึ่งของห้องทดลองนี้) จะแสดงปลายทางที่การสมัครใช้บริการพุชสำหรับ 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 ที่สร้าง
ตรวจสอบการสมัครใช้บริการที่สร้างขึ้นสำหรับทริกเกอร์
ตรวจสอบการเปลี่ยนแปลงในฝั่งเวิร์กโฟลว์ เพิ่มทริกเกอร์ใหม่
6. ทดสอบเวิร์กโฟลว์
หากต้องการจำลองบริการคำสั่งซื้อ คุณจะต้องส่งข้อความไปยังหัวข้อ 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'
ตรวจสอบรายละเอียดการดำเนินการเวิร์กโฟลว์และบันทึก
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 ในคอนโซลและเรียกใช้การค้นหาสำหรับคำสั่งซื้อที่ประมวลผลแล้วซึ่งมียอดเงินรวมมากกว่า 60 บาท
โปรดใช้การค้นหาด้านล่าง แทนที่รหัสโปรเจ็กต์(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"
ตัวอย่างเอาต์พุต:
เปิด 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
:
แทนที่รหัสโปรเจ็กต์(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
:
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
ขาเข้า เป็น "Allow all traffic
" แล้วคลิก "บันทึก"
การดำเนินการนี้จะทำให้ปลายทางเป็นสาธารณะและคุณจะเรียกใช้ Customer Service API จาก Cloud Shell โดยใช้ curl ได้
เรียกใช้คำสั่งด้านล่างเพื่อบันทึก 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
- การทริกเกอร์การประมวลผลเหตุการณ์จาก Cloud Storage
- การเชื่อมต่อกับ Private CloudSQL จาก Cloud Run
- การเชื่อมต่อกับฐานข้อมูลที่มีการจัดการครบวงจรจาก Cloud Run
- แอปพลิเคชัน Serverless ที่ปลอดภัยด้วย Identity Aware Proxy (IAP)
- การทริกเกอร์งาน Cloud Run ด้วย Cloud Scheduler
- การทำให้ Cloud Run ใช้งานได้อย่างปลอดภัย
- การรักษาความปลอดภัยการรับส่งข้อมูลขาเข้าของ Cloud Run
- การเชื่อมต่อกับ AlloyDB แบบส่วนตัวจาก GKE Autopilot
ล้างข้อมูล
เพื่อหลีกเลี่ยงไม่ให้เกิดการเรียกเก็บเงินกับบัญชี Google Cloud สำหรับทรัพยากรที่ใช้ในบทแนะนำนี้ โปรดลบโปรเจ็กต์ที่มีทรัพยากรดังกล่าวหรือเก็บโปรเจ็กต์ไว้และลบทรัพยากรแต่ละรายการ
กำลังลบโปรเจ็กต์
วิธีที่ง่ายที่สุดในการยกเลิกการเรียกเก็บเงินคือการลบโปรเจ็กต์ที่คุณสร้างไว้สำหรับบทแนะนำ