เหตุการณ์สำหรับ Cloud Run สำหรับ Anthos Codelab

1. บทนำ

6a5cf23c8e20491f.png

Cloud Run ช่วยให้คุณเรียกใช้คอนเทนเนอร์แบบไม่เก็บสถานะในสภาพแวดล้อมที่มีการจัดการครบวงจรได้ โดยสร้างขึ้นจาก Knative แบบโอเพนซอร์ส ซึ่งให้คุณเลือกที่จะเรียกใช้คอนเทนเนอร์ที่มีการจัดการครบวงจรด้วย Cloud Run หรือในคลัสเตอร์ Google Kubernetes Engine ด้วย Cloud Run สำหรับ Anthos ได้

กิจกรรมสำหรับ Cloud Run สำหรับ Anthos ช่วยให้คุณเชื่อมต่อบริการ Cloud Run กับเหตุการณ์จากแหล่งที่มาต่างๆ ได้อย่างง่ายดาย ซึ่งช่วยให้คุณสร้างสถาปัตยกรรมที่ขับเคลื่อนด้วยเหตุการณ์ซึ่งมีการเชื่อมต่อและกระจาย Microservice แบบหลวมๆ นอกจากนี้ยังดูแลการส่งผ่านข้อมูลของเหตุการณ์ การนำส่ง การรักษาความปลอดภัย การให้สิทธิ์ และการจัดการข้อผิดพลาดให้คุณด้วย ซึ่งจะช่วยเพิ่มความคล่องตัวให้กับนักพัฒนาซอฟต์แวร์และความยืดหยุ่นของแอปพลิเคชัน

ใน Codelab นี้ คุณจะได้เรียนรู้เกี่ยวกับเหตุการณ์สำหรับ Cloud Run สำหรับ Anthos กล่าวอย่างเจาะจงก็คือ คุณจะได้ฟังเหตุการณ์จาก Cloud Pub/Sub, บันทึกการตรวจสอบ, Cloud Storage, Cloud Scheduler และวิธีสร้าง/ใช้เหตุการณ์ที่กำหนดเอง

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

  • วิสัยทัศน์ระยะยาวเกี่ยวกับเหตุการณ์สำหรับ Cloud Run สำหรับ Anthos
  • สถานะปัจจุบันของเหตุการณ์สำหรับ Cloud Run สำหรับ Anthos
  • สร้างซิงก์ Cloud Run
  • สร้างทริกเกอร์เหตุการณ์สำหรับ Cloud Pub/Sub
  • สร้างทริกเกอร์เหตุการณ์สำหรับบันทึกการตรวจสอบ
  • สร้างทริกเกอร์เหตุการณ์สำหรับ Cloud Storage
  • สร้างทริกเกอร์เหตุการณ์สำหรับ Cloud Scheduler
  • สร้างและใช้เหตุการณ์ที่กำหนดเอง

2. วิสัยทัศน์ระยะยาว

เมื่อนำสถาปัตยกรรมแบบ Serverless มาใช้ เหตุการณ์จึงกลายเป็นส่วนสำคัญของวิธีการสื่อสารของ Microservice ที่แยกออกจากกัน Events for Cloud Run สำหรับ Anthos ทำให้กิจกรรมเป็นพลเมืองชั้นหนึ่งของข้อเสนอ Cloud Run สำหรับ Anthos ซึ่งทำให้สร้างแอปพลิเคชันแบบ Serverless ที่ขับเคลื่อนกิจกรรมได้ง่าย

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

ce389bcafba6d669.png

แหล่งที่มาของ Google Cloud

แหล่งที่มาของเหตุการณ์ซึ่งเป็นผลิตภัณฑ์ที่ Google Cloud เป็นเจ้าของ

แหล่งที่มาของ Google

แหล่งที่มาของกิจกรรมที่เป็นผลิตภัณฑ์ของ Google เช่น Gmail, Hangouts, การจัดการ Android และอื่นๆ

แหล่งที่มาที่กำหนดเอง

แหล่งที่มาของกิจกรรมที่ไม่ใช่ผลิตภัณฑ์ที่ Google เป็นเจ้าของและสร้างโดยผู้ใช้ปลายทางเอง ซึ่งอาจเป็น Knative Source ที่พัฒนาโดยผู้ใช้ หรือแอปอื่นๆ ที่ทำงานบนคลัสเตอร์ที่สร้างเหตุการณ์ระบบคลาวด์ได้

แหล่งที่มาของบุคคลที่สาม

แหล่งที่มาของเหตุการณ์ที่ Google ไม่ได้เป็นเจ้าของและผู้ใช้ปลายทาง ซึ่งรวมถึงแหล่งข้อมูลเหตุการณ์ยอดนิยม เช่น GitHub, SAP, Datadog, Pagerduty ฯลฯ ที่ผู้ให้บริการ พาร์ทเนอร์ หรือชุมชน OSS เป็นเจ้าของและดูแล

ระบบจะแปลงเหตุการณ์เป็นรูปแบบ CloudEvents v1.0 เพื่อความสามารถในการทำงานร่วมกันข้ามบริการ CloudEvent เป็นข้อกำหนดแบบเปิดของผู้ให้บริการแต่ละราย ซึ่งอธิบายข้อมูลเหตุการณ์ในรูปแบบทั่วไป ทำให้สามารถทำงานร่วมกันในบริการ แพลตฟอร์ม และระบบต่างๆ ได้

เหตุการณ์สำหรับ Cloud Run สอดคล้องกับ Knative Eventing และอนุญาตให้เคลื่อนย้ายคอนเทนเนอร์ไปยังและจากการติดตั้งใช้งานอื่นๆ ที่ใช้ Knative ได้ วิธีนี้มอบเฟรมเวิร์กที่เข้าใจได้บนระบบคลาวด์และสอดคล้องกันสำหรับผู้ผลิตกิจกรรมเดินสายพร้อมผู้บริโภคในการจัดกิจกรรมอย่างเคร่งครัด

3. สถานะปัจจุบัน

ตัวอย่างนี้เป็นเวอร์ชันแรกที่นำเสนอชุดฟังก์ชันการทำงานระยะยาวชุดแรก

b1dd0d8a73185b95.png

เพื่อให้ผู้ใช้สร้างแอปพลิเคชันแบบ Serverless ที่ขับเคลื่อนด้วยเหตุการณ์ได้ จุดโฟกัสแรกเริ่มของเราอยู่ที่ 2 ส่วน ดังนี้

  1. มอบระบบนิเวศแบบกว้างของแหล่งที่มาของ Google Cloud ที่เปิดใช้บริการ Cloud Run ในคลัสเตอร์ Anthos เพื่อตอบสนองต่อเหตุการณ์จากบริการ Google Cloud
  • ในระยะแรก ระบบจะส่งเหตุการณ์จาก Google Cloud Source โดยใช้ Cloud Audit Logging (CAL) ซึ่งทำให้มีแหล่งที่มาของเหตุการณ์ที่หลากหลาย เวลาในการตอบสนองและความพร้อมใช้งานของการนำส่งเหตุการณ์จากแหล่งที่มาเหล่านี้จะเชื่อมโยงกับบันทึกของ Cloud Audit เมื่อใดก็ตามที่มีการเผยแพร่กิจกรรมจากแหล่งที่มาของ Google Cloud ระบบจะสร้างรายการบันทึกของ Cloud Audit ที่สอดคล้องกัน
  • นอกจากบันทึก Cloud Audit แล้ว ยังมีการสนับสนุนระดับเฟิร์สคลาสเพื่อใช้เหตุการณ์จาก Cloud Storage, Cloud Pub/Sub และ Cloud Scheduler เราจะขยายระบบนิเวศของแหล่งที่มานี้ต่อไปด้วยแหล่งข้อมูลชั้นหนึ่งเพิ่มเติมในระหว่างที่ได้เรียนรู้จากเส้นทางและความคิดเห็นของผู้ใช้เพิ่มเติม
  1. เปิดใช้แอปพลิเคชันและบริการของผู้ใช้ปลายทางเพื่อปล่อยเหตุการณ์ที่กำหนดเองโดยการเผยแพร่ไปยัง URL โบรกเกอร์ภายในคลัสเตอร์ซึ่งมีขอบเขตเนมสเปซ

กลไกการนำส่งที่สำคัญจะใช้หัวข้อ Cloud Pub/Sub และการสมัครใช้บริการที่ปรากฏในลูกค้า โปรเจ็กต์ ดังนั้น ฟีเจอร์นี้ให้การรับประกันการนำส่งเช่นเดียวกับ Cloud Pub/Sub

ทริกเกอร์เหตุการณ์เป็นวิธีสมัครรับข้อมูลเหตุการณ์เพื่อให้เหตุการณ์ที่ตรงกับตัวกรองทริกเกอร์ส่งไปยังปลายทาง (หรือปลายทาง) ที่ทริกเกอร์ชี้ไป

ระบบจะส่งเหตุการณ์ทั้งหมดในรูปแบบ Cloud Events v1.0 สำหรับความสามารถในการทำงานร่วมกันข้ามบริการ

เราจะยังคงสร้างมูลค่าให้มากขึ้นในวิธีการแบบซ้ำๆ ไปจนถึง GA และอื่นๆ

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

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

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

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

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

การใช้งาน Codelab นี้น่าจะไม่มีค่าใช้จ่ายใดๆ หากมี ตรวจสอบว่าคุณได้ทำตามวิธีการใน "การล้างข้อมูล" ซึ่งจะแนะนำคุณเกี่ยวกับวิธีปิดทรัพยากรเพื่อไม่ให้มีการเรียกเก็บเงินนอกเหนือจากบทแนะนำนี้ ผู้ใช้ใหม่ของ Google Cloud จะมีสิทธิ์เข้าร่วมโปรแกรมทดลองใช้ฟรี$300 USD

เริ่มต้น Cloud Shell

แม้ว่าคุณจะดำเนินการ Google Cloud จากระยะไกลได้จากแล็ปท็อป แต่คุณจะใช้ Google Cloud Shell ซึ่งเป็นสภาพแวดล้อมแบบบรรทัดคำสั่งที่ทำงานในระบบคลาวด์ใน Codelab นี้

จากคอนโซล GCP ให้คลิกไอคอน Cloud Shell บนแถบเครื่องมือด้านขวาบนดังนี้

bce75f34b2c53987.png

การจัดสรรและเชื่อมต่อกับสภาพแวดล้อมนี้ควรใช้เวลาเพียงครู่เดียว เมื่อเสร็จแล้ว คุณจะเห็นข้อมูลต่อไปนี้

f6ef2b5f13479f3a.png

เครื่องเสมือนนี้เต็มไปด้วยเครื่องมือการพัฒนาทั้งหมดที่คุณต้องการ โดยมีไดเรกทอรีหลักขนาด 5 GB ที่ใช้งานได้ต่อเนื่องและทำงานบน Google Cloud ซึ่งช่วยเพิ่มประสิทธิภาพของเครือข่ายและการตรวจสอบสิทธิ์ได้อย่างมาก งานทั้งหมดใน Lab นี้สามารถทำได้โดยใช้เบราว์เซอร์

5. เปิดใช้ API, ตั้งค่าโซนและแพลตฟอร์ม

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

ใน Cloud Shell ควรตั้งค่า GOOGLE_CLOUD_PROJECT เป็นรหัสโปรเจ็กต์อยู่แล้ว หากไม่มี ให้ตรวจสอบว่ามีการตั้งค่าและกำหนดค่า gcloud ด้วยรหัสโปรเจ็กต์ดังกล่าว ดังนี้

export GOOGLE_CLOUD_PROJECT=your-project-id
gcloud config set project ${GOOGLE_CLOUD_PROJECT}

ตรวจสอบว่าได้ติดตั้งคอมโพเนนต์ gcloud สำหรับอัลฟ่าในองค์ประกอบต่อไปนี้แล้ว

gcloud components install alpha

เปิดใช้ API

เปิดใช้บริการที่จำเป็นทั้งหมด

gcloud services enable cloudapis.googleapis.com 
gcloud services enable container.googleapis.com 
gcloud services enable containerregistry.googleapis.com
gcloud services enable cloudbuild.googleapis.com

ตั้งค่าโซนและแพลตฟอร์ม

ก่อนสร้างคลัสเตอร์ GKE ด้วยเหตุการณ์ Cloud Run ให้ตั้งชื่อคลัสเตอร์ โซน และแพลตฟอร์ม ตัวอย่างเช่น เราตั้งชื่อและโซนเป็น events-cluster และ europe-west1-b และแพลตฟอร์มคือ gke,

ใน Cloud Shell:

export CLUSTER_NAME=events-cluster
export CLUSTER_ZONE=europe-west1-b

gcloud config set run/cluster ${CLUSTER_NAME}
gcloud config set run/cluster_location ${CLUSTER_ZONE}
gcloud config set run/platform gke

คุณจะตรวจสอบได้ว่ามีการกำหนดค่าโดยทำดังนี้

gcloud config list

...
[run]
cluster = events-cluster
cluster_location = europe-west1-b
platform = gke

6. สร้างคลัสเตอร์ GKE ด้วยเหตุการณ์ Cloud Run

สร้างคลัสเตอร์ GKE ที่เรียกใช้ Kubernetes >= 1.15.9-gke.26 ที่เปิดใช้ส่วนเสริมต่อไปนี้: CloudRun, HttpLoadBalancing, HorizontalPodAutoscaling

gcloud beta container clusters create ${CLUSTER_NAME} \
  --addons=HttpLoadBalancing,HorizontalPodAutoscaling,CloudRun \
  --machine-type=n1-standard-4 \
  --enable-autoscaling --min-nodes=3 --max-nodes=10 \
  --no-issue-client-certificate --num-nodes=3 --image-type=cos \
  --enable-stackdriver-kubernetes \
  --scopes=cloud-platform,logging-write,monitoring-write,pubsub \
  --zone ${CLUSTER_ZONE} \
  --release-channel=rapid

7. ตั้งค่าเหตุการณ์ Cloud Run (Control Plane)

เหตุการณ์ Cloud Run มีระนาบควบคุมและระนาบข้อมูลที่ต้องตั้งค่าแยกกัน วิธีตั้งค่า Control Plane

ใน Cloud Shell:

gcloud beta events init 

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

ถึงจุดนี้ ระนาบควบคุมควรเริ่มต้นอย่างถูกต้องแล้ว คุณควรจะเห็น 4 พ็อดที่มี

สถานะ Running, 2 (controller-xxx-xxx และ webhook-xxx-xxx) ในเนมสเปซ cloud-run-events และ 2 (eventing-controller-xxx-xxx และ eventing-webhook-xxx-xxx) ในเนมสเปซ knative-eventing ซึ่งตรวจสอบได้โดยเรียกใช้คำสั่งต่อไปนี้

kubectl get pods -n cloud-run-events

NAME                         READY   STATUS    RESTARTS   AGE
controller-9cc679b67-2952n   1/1     Running   0          22s
webhook-8576c4cfcb-dhz82     1/1     Running   0          16m
kubectl get pods -n knative-eventing

NAME                                   READY   STATUS    RESTARTS   AGE
eventing-controller-77f46f6cf8-kj9ck   1/1     Running   0          17m
eventing-webhook-5bc787965f-hcmwg      1/1     Running   0          17m

8. ตั้งค่าเหตุการณ์ Cloud Run (Data Plane)

ขั้นตอนถัดไปคือการตั้งค่าระนาบข้อมูลในเนมสเปซของผู้ใช้ การดำเนินการนี้จะสร้างโบรกเกอร์ที่มีสิทธิ์ที่เหมาะสมในการอ่าน/เขียนจาก/ไปยัง Pub/Sub

ภายใน Cloud Shell ให้ตั้งค่าตัวแปรสภาพแวดล้อม NAMESPACE สำหรับเนมสเปซที่ต้องการใช้กับออบเจ็กต์ คุณสามารถตั้งค่าเป็น default ได้หากต้องการใช้เนมสเปซเริ่มต้นดังที่แสดงด้านล่าง

export NAMESPACE=default

โปรดทราบว่าหากไม่มีเนมสเปซที่ระบุ (กล่าวคือ Namespace ไม่ใช่ค่าเริ่มต้น) คุณจะต้องสร้างเนมสเปซดังนี้

kubectl create namespace ${NAMESPACE}

เริ่มต้นเนมสเปซด้วยข้อมูลลับเริ่มต้นดังนี้

gcloud beta events namespaces init ${NAMESPACE} --copy-default-secret 

สร้างโบรกเกอร์เริ่มต้นในเนมสเปซดังนี้

gcloud beta events brokers create default --namespace ${NAMESPACE}

ตรวจสอบว่ามีการสร้างนายหน้าแล้ว โปรดทราบว่าอาจใช้เวลา 2-3 วินาทีก่อนที่นายหน้าจะพร้อม:

kubectl get broker -n ${NAMESPACE}

NAME      READY   REASON   URL
default   True             http://default-brokercell-ingress.cloud-run-events.svc.cluster.local/default/default

9. การค้นพบเหตุการณ์

คุณสามารถดูว่าแหล่งที่มาที่ลงทะเบียนคืออะไร ประเภทของเหตุการณ์ที่สามารถปล่อยออกมาได้ และวิธีกําหนดค่าทริกเกอร์เพื่อใช้ทริกเกอร์เหล่านั้น

วิธีดูรายการเหตุการณ์ประเภทต่างๆ

gcloud beta events types list

วิธีดูข้อมูลเพิ่มเติมเกี่ยวกับกิจกรรมแต่ละประเภท

gcloud beta events types describe google.cloud.pubsub.topic.v1.messagePublished

10. สร้างซิงก์ Cloud Run

ในฐานะซิงก์เหตุการณ์ ให้ทำให้บริการ Cloud Run ที่บันทึกเนื้อหาของ CloudEvent ที่ได้รับมาใช้งานได้

คุณสามารถใช้ event_display ของ Knative ที่ได้รับการคอมไพล์แล้วและอิมเมจคอนเทนเนอร์ที่สร้างขึ้นเป็นส่วนหนึ่งของรุ่น Knative คุณสามารถดูรายละเอียดอิมเมจคอนเทนเนอร์ได้ใน event-display.yaml

...
containers:
  - image: gcr.io/knative-releases/knative.dev/eventing-contrib/cmd/event_display@sha256:8da2440b62a5c077d9882ed50397730e84d07037b1c8a3e40ff6b89c37332b27

ทำให้ใช้งานได้กับ Cloud Run

ทำให้แอปพลิเคชันที่มีคอนเทนเนอร์ใช้งานได้กับ Cloud Run ด้วยคำสั่งต่อไปนี้

export SERVICE_NAME=event-display
gcloud run deploy ${SERVICE_NAME} \
  --namespace=${NAMESPACE} \
  --image gcr.io/knative-releases/knative.dev/eventing-contrib/cmd/event_display@sha256:8da2440b62a5c077d9882ed50397730e84d07037b1c8a3e40ff6b89c37332b27

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

11. สร้างทริกเกอร์เหตุการณ์สำหรับ Cloud Pub/Sub

วิธีหนึ่งในการรับเหตุการณ์คือผ่าน Cloud Pub/Sub แอปพลิเคชันที่กำหนดเองสามารถเผยแพร่ข้อความไปยัง Cloud Pub/Sub ได้ และระบบส่งข้อความเหล่านี้ไปยังซิงก์ Google Cloud Run ผ่าน Event for Cloud Run ได้

สร้างหัวข้อ

ขั้นแรก ให้สร้างหัวข้อ Cloud Pub/Sub คุณสามารถแทนที่ TOPIC_ID ด้วยชื่อหัวข้อที่ไม่ซ้ำกันตามที่ต้องการได้ ดังนี้

export TOPIC_ID=cr-gke-topic
gcloud pubsub topics create ${TOPIC_ID}

สร้างทริกเกอร์

ก่อนที่จะสร้างทริกเกอร์ ให้ดูรายละเอียดเพิ่มเติมเกี่ยวกับพารามิเตอร์ที่คุณต้องสร้างทริกเกอร์สำหรับเหตุการณ์จาก Cloud Pub/Sub ดังนี้

gcloud beta events types describe google.cloud.pubsub.topic.v1.messagePublished

สร้างทริกเกอร์เพื่อกรองเหตุการณ์ที่เผยแพร่ไปยังหัวข้อ Cloud Pub/Sub ไปยังบริการ Cloud Run ที่ทำให้ใช้งานได้แล้ว ดังนี้

gcloud beta events triggers create trigger-pubsub \
  --namespace ${NAMESPACE} \
  --target-service ${SERVICE_NAME} \
  --type google.cloud.pubsub.topic.v1.messagePublished \
  --parameters topic=${TOPIC_ID}

ทดสอบทริกเกอร์

คุณตรวจสอบได้ว่ามีการสร้างทริกเกอร์หรือไม่โดยแสดงทริกเกอร์ทั้งหมด ดังนี้

gcloud beta events triggers list

คุณอาจต้องรอสูงสุด 10 นาทีเพื่อเผยแพร่การสร้างทริกเกอร์และเริ่มกรองเหตุการณ์

หากต้องการจำลองการส่งข้อความของแอปพลิเคชันที่กำหนดเอง คุณสามารถใช้ gcloud เพื่อทำให้เหตุการณ์เริ่มทำงานได้ ดังนี้

gcloud pubsub topics publish ${TOPIC_ID} --message="Hello there"

ซิงก์ Cloud Run ที่เราสร้างจะบันทึกเนื้อหาของข้อความขาเข้า คุณดูข้อมูลนี้ได้ในส่วนบันทึกของอินสแตนซ์ Cloud Run ดังนี้

9526909a06c6d4f4.png

โปรดทราบว่า "สวัสดี" จะเข้ารหัส base64 เนื่องจากส่งโดย Pub/Sub และคุณจะต้องถอดรหัสหากต้องการดูข้อความต้นฉบับที่ส่ง

ลบทริกเกอร์

หรือคุณจะลบทริกเกอร์เมื่อทดสอบเสร็จแล้วก็ได้

gcloud beta events triggers delete trigger-pubsub --namespace ${NAMESPACE}

12. สร้างทริกเกอร์เหตุการณ์สำหรับบันทึกการตรวจสอบ

คุณจะตั้งค่าทริกเกอร์ให้เฝ้าติดตามเหตุการณ์จากบันทึกการตรวจสอบ กล่าวอย่างเจาะจงก็คือ คุณจะพบเหตุการณ์การสร้างหัวข้อ Pub/Sub ในบันทึกการตรวจสอบ

เปิดใช้บันทึกการตรวจสอบ

หากต้องการรับเหตุการณ์จากบริการ คุณต้องเปิดใช้บันทึกการตรวจสอบ เลือก IAM & Admin > Audit Logs จากเมนูด้านซ้ายบน Cloud Console ในรายการบริการ ให้ตรวจสอบ Google Cloud Pub/Sub ดังนี้

97bd4b57c6a05fcc.png

ทางด้านขวามือ ให้ตรวจสอบว่าเลือก "ผู้ดูแลระบบ" "อ่านและเขียน" แล้ว คลิกบันทึก

bec31b4f35fbcea.png

บันทึกการตรวจสอบการทดสอบ

หากต้องการเรียนรู้วิธีระบุพารามิเตอร์ที่คุณต้องตั้งค่าทริกเกอร์จริง ให้ทำการดำเนินการจริง

ตัวอย่างเช่น สร้างหัวข้อ Pub/Sub ดังนี้

gcloud pubsub topics create cre-gke-topic1

ตอนนี้มาดูกันว่าการอัปเดตนี้สร้างบันทึกการตรวจสอบประเภทใด เลือก Logging > Logs Viewer จากเมนูด้านซ้ายบน Cloud Console

ใน Query Builder, ให้เลือก Cloud Pub/Sub Topic และคลิก Add:

f5c634057e935bc6.png

เมื่อเรียกใช้การค้นหา คุณจะเห็นบันทึกสำหรับหัวข้อ Pub/Sub และหนึ่งในรายการควรเป็น google.pubsub.v1.Publisher.CreateTopic

b083cce219773d24.png

จดบันทึก serviceName, methodName และ resourceName เราจะใช้สิ่งเหล่านี้ในการสร้างทริกเกอร์

สร้างทริกเกอร์

ตอนนี้คุณพร้อมที่จะสร้างทริกเกอร์เหตุการณ์สำหรับบันทึกการตรวจสอบแล้ว

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

gcloud beta events types describe google.cloud.audit.log.v1.written

สร้างทริกเกอร์ด้วยตัวกรองที่เหมาะสม ดังนี้

gcloud beta events triggers create trigger-auditlog \
  --namespace ${NAMESPACE} \
  --target-service ${SERVICE_NAME} \
  --type=google.cloud.audit.log.v1.written \
  --parameters serviceName=pubsub.googleapis.com \
  --parameters methodName=google.pubsub.v1.Publisher.CreateTopic

ทดสอบทริกเกอร์

แสดงรายการทริกเกอร์ทั้งหมดเพื่อยืนยันว่าสร้างทริกเกอร์เรียบร้อยแล้ว

gcloud beta events triggers list

รอประมาณ 10 นาทีเพื่อให้ระบบเผยแพร่การสร้างทริกเกอร์ และให้ทริกเกอร์เริ่มกรองเหตุการณ์ เมื่อพร้อมแล้ว ระบบจะกรองการสร้างเหตุการณ์และส่งไปยังบริการ ตอนนี้คุณพร้อมที่จะเริ่มเหตุการณ์แล้ว

สร้างหัวข้อ Pub/Sub อื่นเหมือนที่ทำก่อนหน้านี้

gcloud pubsub topics create cre-gke-topic2

หากคุณตรวจสอบบันทึกของบริการ Cloud Run ใน Cloud Console คุณควรเห็นเหตุการณ์ที่ได้รับดังนี้

aff3b2e7ad05c75d.png

ลบทริกเกอร์และหัวข้อ

นอกจากนี้ คุณยังลบทริกเกอร์ได้เมื่อทดสอบเสร็จแล้ว โดยทำดังนี้

gcloud beta events triggers delete trigger-auditlog

ลบหัวข้อด้วย:

gcloud pubsub topics delete cre-gke-topic1 cre-gke-topic2

13. สร้างทริกเกอร์เหตุการณ์สำหรับ Cloud Storage

คุณจะตั้งค่าทริกเกอร์เพื่อฟังเหตุการณ์จาก Cloud Storage

สร้างที่เก็บข้อมูล

ขั้นแรก ให้สร้างที่เก็บข้อมูล Cloud Storage ในภูมิภาคเดียวกับบริการ Cloud Run ที่ทำให้ใช้งานได้แล้ว คุณสามารถแทนที่ BUCKET_NAME ด้วยชื่อเฉพาะที่ต้องการ ดังนี้

export BUCKET_NAME=[new bucket name]
export REGION=europe-west1

gsutil mb -p $(gcloud config get-value project) \
  -l $REGION \
  gs://$BUCKET_NAME/

ตั้งค่าสิทธิ์ Cloud Storage

ก่อนสร้างทริกเกอร์ คุณต้องให้สิทธิ์บัญชีบริการเริ่มต้นสำหรับ Cloud Storage ในการเผยแพร่ไปยัง Pub/Sub

ก่อนอื่น คุณต้องค้นหาบัญชีบริการที่ Cloud Storage ใช้เพื่อเผยแพร่ไปยัง Pub/Sub คุณสามารถทำตามขั้นตอนที่ระบุไว้ในการรับบัญชีบริการ Cloud Storage เพื่อรับบัญชีบริการหรือใช้คำสั่งต่อไปนี้

curl -X GET -H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://storage.googleapis.com/storage/v1/projects/$(gcloud config get-value project)/serviceAccount"

บัญชีบริการควรอยู่ในรายการ email_address

สมมติว่าบัญชีบริการที่คุณพบจากด้านบนคือ service-XYZ@gs-project-accounts.iam.gserviceaccount.com ให้ตั้งค่านี้เป็นตัวแปรสภาพแวดล้อม

export GCS_SERVICE_ACCOUNT=service-XYZ@gs-project-accounts.iam.gserviceaccount.com

จากนั้นให้สิทธิ์บัญชีบริการดังกล่าวในการเผยแพร่ไปยัง Pub/Sub โดยทำดังนี้

gcloud projects add-iam-policy-binding ${GOOGLE_CLOUD_PROJECT} \
  --member=serviceAccount:${GCS_SERVICE_ACCOUNT} \
  --role roles/pubsub.publisher

สร้างทริกเกอร์

ตอนนี้คุณพร้อมที่จะสร้างทริกเกอร์เหตุการณ์สำหรับเหตุการณ์ Cloud Storage แล้ว

คุณสามารถดูรายละเอียดเพิ่มเติมเกี่ยวกับพารามิเตอร์ที่ต้องใช้ในการสร้างทริกเกอร์ ดังนี้

gcloud beta events types describe google.cloud.storage.object.v1.finalized

สร้างทริกเกอร์ด้วยตัวกรองที่เหมาะสม ดังนี้

gcloud beta events triggers create trigger-storage \
  --namespace ${NAMESPACE} \
  --target-service ${SERVICE_NAME} \
  --type=google.cloud.storage.object.v1.finalized \
  --parameters bucket=${BUCKET_NAME}

ทดสอบทริกเกอร์

แสดงรายการทริกเกอร์ทั้งหมดเพื่อยืนยันว่าสร้างทริกเกอร์เรียบร้อยแล้ว

gcloud beta events triggers list

รอประมาณ 10 นาทีเพื่อให้ระบบเผยแพร่การสร้างทริกเกอร์ และให้ทริกเกอร์เริ่มกรองเหตุการณ์ เมื่อพร้อมแล้ว ระบบจะกรองการสร้างเหตุการณ์และส่งไปยังบริการ

ตอนนี้คุณพร้อมที่จะเริ่มเหตุการณ์แล้ว

อัปโหลดไฟล์แบบสุ่มไปยังที่เก็บข้อมูล Cloud Storage

echo "Hello World" > random.txt
gsutil cp random.txt gs://${BUCKET_NAME}/random.txt

หากคุณตรวจสอบบันทึกของบริการ Cloud Run ใน Cloud Console คุณควรเห็นเหตุการณ์ที่ได้รับดังนี้

aff3b2e7ad05c75d.png

ลบทริกเกอร์

นอกจากนี้ คุณยังลบทริกเกอร์ได้เมื่อทดสอบเสร็จแล้ว โดยทำดังนี้

gcloud beta events triggers delete trigger-storage

14. สร้างทริกเกอร์เหตุการณ์สำหรับ Cloud Scheduler

คุณจะตั้งค่าทริกเกอร์เพื่อฟังเหตุการณ์จาก Cloud Scheduler

สร้างแอปพลิเคชัน App Engine

ขณะนี้ Cloud Scheduler ต้องการให้ผู้ใช้สร้างแอปพลิเคชัน App Engine เลือกตำแหน่งของ App Engine แล้วสร้างแอป โดยทำดังนี้

export APP_ENGINE_LOCATION=europe-west
gcloud app create --region=${APP_ENGINE_LOCATION}

สร้างทริกเกอร์

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

gcloud beta events types describe google.cloud.scheduler.job.v1.executed

เลือกตำแหน่ง Cloud Scheduler เพื่อสร้างเครื่องจัดตารางเวลาดังนี้

export SCHEDULER_LOCATION=europe-west1

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

gcloud beta events triggers create trigger-scheduler \
  --namespace ${NAMESPACE} \
  --target-service=${SERVICE_NAME} \
  --type=google.cloud.scheduler.job.v1.executed \
  --parameters location=${SCHEDULER_LOCATION} \
  --parameters schedule="* * * * *" \
  --parameters data="trigger-scheduler-data"

ทดสอบทริกเกอร์

แสดงรายการทริกเกอร์ทั้งหมดเพื่อยืนยันว่าสร้างทริกเกอร์เรียบร้อยแล้ว

gcloud beta events triggers list

รอประมาณ 10 นาทีเพื่อให้ระบบเผยแพร่การสร้างทริกเกอร์ และให้ทริกเกอร์เริ่มกรองเหตุการณ์ เมื่อพร้อมแล้ว ระบบจะกรองการสร้างเหตุการณ์และส่งไปยังบริการ

หากตรวจสอบบันทึกของบริการ Cloud Run ใน Cloud Console คุณควรจะเห็นเหตุการณ์ที่ได้รับ

ลบทริกเกอร์

นอกจากนี้ คุณยังลบทริกเกอร์ได้เมื่อทดสอบเสร็จแล้ว โดยทำดังนี้

gcloud beta events triggers delete trigger-scheduler

15. เหตุการณ์ที่กำหนดเอง (ปลายทางของโบรกเกอร์)

ใน Codelab นี้ คุณจะต้องสร้างและใช้เหตุการณ์ที่กำหนดเองโดยใช้โบรกเกอร์

สร้าง Curl Pod เพื่อสร้างกิจกรรม

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

ในการสร้างพ็อดที่ทำหน้าที่เป็นผู้สร้างเหตุการณ์ ให้เรียกใช้คำสั่งต่อไปนี้

cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Pod
metadata:
  labels:
    run: curl
  name: curl
  namespace: $NAMESPACE
spec:
  containers:
  - image: radial/busyboxplus:curl
    imagePullPolicy: IfNotPresent
    name: curl
    resources: {}
    stdin: true
    terminationMessagePath: /dev/termination-log
    terminationMessagePolicy: File
    tty: true
EOF

ยืนยันว่าพ็อด Curl ทำงานอย่างถูกต้อง คุณควรเห็นพ็อดที่ชื่อว่า curl ที่มี Status=Running:

kubectl get pod curl -n ${NAMESPACE}

สร้างทริกเกอร์

คุณจะสร้างทริกเกอร์ที่มีตัวกรองสำหรับประเภท Cloud Events (ในกรณีนี้คือ alpha-type) ที่คุณจะปล่อย โปรดทราบว่าระบบรองรับการกรองการทำงานแบบตรงทั้งหมดในแอตทริบิวต์ CloudEvents และส่วนขยายกี่รายการก็ได้ หากตัวกรองตั้งค่าแอตทริบิวต์หลายรายการ เหตุการณ์จะต้องมีแอตทริบิวต์ทั้งหมดให้ทริกเกอร์กรอง ในทางกลับกัน หากคุณไม่ระบุตัวกรอง เหตุการณ์ทั้งหมดจะได้รับในบริการของคุณ

สร้างทริกเกอร์โดยทำดังนี้

gcloud beta events triggers create trigger-custom \
  --namespace ${NAMESPACE} \
  --target-service ${SERVICE_NAME} \
  --type=alpha-type \
  --custom-type

ทดสอบทริกเกอร์

แสดงรายการทริกเกอร์ทั้งหมดเพื่อยืนยันว่าสร้างทริกเกอร์เรียบร้อยแล้ว

gcloud beta events triggers list

สร้างเหตุการณ์โดยส่งคำขอ HTTP ไปยังโบรกเกอร์ เตือนตัวคุณเองเกี่ยวกับ URL ของโบรกเกอร์โดยเรียกใช้โค้ดต่อไปนี้:

kubectl get brokers -n ${NAMESPACE}

NAME      READY   REASON   URL
default   True             http://default-broker.<NAMESPACE>.svc.cluster.local

SSH ไปยังพ็อด curl ที่คุณสร้างไว้ก่อนหน้านี้:

kubectl --namespace ${NAMESPACE} attach curl -it

คุณได้ SSH เข้าสู่พ็อดแล้วและตอนนี้จะส่งคำขอ HTTP ได้ ข้อความแจ้งที่คล้ายกับข้อความด้านล่างจะปรากฏขึ้น

Defaulting container name to curl.
Use 'kubectl describe pod/curl -n default' to see all of the containers in this pod.
If you don't see a command prompt, try pressing enter.
[ root@curl:/ ]$

สร้างกิจกรรม

curl -v "<BROKER-URL>" \
-X POST \
-H "Ce-Id: my-id" \
-H "Ce-Specversion: 1.0" \
-H "Ce-Type: alpha-type" \
-H "Ce-Source: my-source" \
-H "Content-Type: application/json" \
-d '{"msg":"send-cloudevents-to-broker"}'

หากเราได้รับกิจกรรมแล้ว คุณจะได้รับการตอบกลับ HTTP 202 Accepted ออกจากเซสชัน SSH ด้วย Ctrl + D

ยืนยันว่ามีการส่งเหตุการณ์ที่เผยแพร่แล้วโดยดูบันทึกของบริการ Cloud Run ดังนี้

kubectl logs --selector serving.knative.dev/service=$SERVICE_NAME \
 -c user-container -n $NAMESPACE --tail=100

ลบทริกเกอร์

นอกจากนี้ คุณยังลบทริกเกอร์ได้เมื่อทดสอบเสร็จแล้ว โดยทำดังนี้

gcloud beta events triggers delete trigger-custom

16. ยินดีด้วย

ขอแสดงความยินดีที่เรียน Codelab จนจบ

สรุปประเด็นที่ได้พูดถึง

  • วิสัยทัศน์ระยะยาวเกี่ยวกับเหตุการณ์สำหรับ Cloud Run สำหรับ Anthos
  • สถานะปัจจุบันของเหตุการณ์สำหรับ Cloud Run สำหรับ Anthos
  • สร้างซิงก์ Cloud Run
  • สร้างทริกเกอร์เหตุการณ์สำหรับ Cloud Pub/Sub
  • สร้างทริกเกอร์เหตุการณ์สำหรับบันทึกการตรวจสอบ
  • สร้างทริกเกอร์เหตุการณ์สำหรับ Cloud Storage
  • สร้างทริกเกอร์เหตุการณ์สำหรับ Cloud Scheduler
  • สร้างและใช้เหตุการณ์ที่กำหนดเอง