1. บทนำ

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

Eventarc ช่วยให้เชื่อมต่อบริการต่างๆ (Cloud Run, Cloud Functions, Workfklows) กับเหตุการณ์จากแหล่งที่มาต่างๆ ได้ง่าย ซึ่งช่วยให้คุณสร้างสถาปัตยกรรมที่ขับเคลื่อนด้วยเหตุการณ์ซึ่ง Microservice มีการเชื่อมต่อแบบหลวมๆ และกระจายอยู่ นอกจากนี้ยังจัดการการส่งผ่านข้อมูลเหตุการณ์ การนำส่ง ความปลอดภัย การให้สิทธิ์ และการจัดการข้อผิดพลาดให้คุณ ซึ่งจะช่วยเพิ่มความคล่องตัวของนักพัฒนาแอปและความยืดหยุ่นของแอปพลิเคชัน
ในโค้ดแล็บนี้ คุณจะได้เรียนรู้เกี่ยวกับ Eventarc กล่าวโดยละเอียดคือ คุณจะรับฟังเหตุการณ์จาก Pub/Sub, Cloud Storage และบันทึกการตรวจสอบ Cloud ด้วย Eventarc แล้วส่งไปยังบริการ Cloud Run
สิ่งที่คุณจะได้เรียนรู้
- วิสัยทัศน์ของ Eventarc
- ค้นพบเหตุการณ์ใน Eventarc
- สร้างซิงก์ Cloud Run
- สร้างทริกเกอร์สำหรับ Pub/Sub
- สร้างทริกเกอร์สำหรับ Cloud Storage
- สร้างทริกเกอร์สำหรับบันทึกการตรวจสอบ Cloud
- สำรวจ UI ของ Eventarc
2. วิสัยทัศน์ของ Eventarc
Eventarc มีเป้าหมายที่จะส่งเหตุการณ์จากแหล่งที่มาของเหตุการณ์ต่างๆ ของ Google, Google Cloud และบุคคลที่สามไปยังปลายทางของเหตุการณ์ใน Google Cloud

แหล่งข้อมูลของ Google Cloud | แหล่งที่มาของเหตุการณ์ที่เป็นผลิตภัณฑ์ของ Google Cloud |
แหล่งข้อมูลของ Google | แหล่งที่มาของเหตุการณ์ที่เป็นผลิตภัณฑ์ของ Google เช่น Gmail, Hangouts, Android Management และอื่นๆ |
แหล่งที่มาที่กำหนดเอง | แหล่งที่มาของกิจกรรมที่ไม่ใช่ผลิตภัณฑ์ของ Google และสร้างโดยผู้ใช้ปลายทางเอง |
แหล่งที่มาของบุคคลที่สาม | แหล่งที่มาของเหตุการณ์ที่ไม่ได้เป็นของ Google หรือลูกค้า ซึ่งรวมถึงแหล่งที่มาของเหตุการณ์ยอดนิยม เช่น Check Point CloudGuard, Datadog, ForgeRock, Lacework ฯลฯ ซึ่งเป็นของผู้ให้บริการและพาร์ทเนอร์บุคคลที่สามและได้รับการดูแลรักษาโดยผู้ให้บริการและพาร์ทเนอร์บุคคลที่สาม |
ระบบจะแปลงเหตุการณ์ให้อยู่ในรูปแบบ CloudEvents v1.0 เพื่อให้ทำงานร่วมกันได้ในบริการต่างๆ CloudEvents เป็นข้อกำหนดแบบเปิดที่ไม่ขึ้นกับผู้ให้บริการ ซึ่งอธิบายข้อมูลเหตุการณ์ในรูปแบบทั่วไป ทำให้สามารถทำงานร่วมกันได้ในบริการ แพลตฟอร์ม และระบบต่างๆ
3. การตั้งค่าและข้อกำหนด
การตั้งค่าสภาพแวดล้อมแบบเรียนรู้ด้วยตนเอง
- ลงชื่อเข้าใช้ Google Cloud Console แล้วสร้างโปรเจ็กต์ใหม่หรือใช้โปรเจ็กต์ที่มีอยู่ซ้ำ หากยังไม่มีบัญชี Gmail หรือ Google Workspace คุณต้องสร้างบัญชี



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

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

เครื่องเสมือนนี้มาพร้อมเครื่องมือพัฒนาซอฟต์แวร์ทั้งหมดที่คุณต้องการ โดยมีไดเรกทอรีหลักแบบถาวรขนาด 5 GB และทำงานบน Google Cloud ซึ่งช่วยเพิ่มประสิทธิภาพเครือข่ายและการตรวจสอบสิทธิ์ได้อย่างมาก คุณสามารถทำงานทั้งหมดในห้องทดลองนี้ได้โดยใช้เพียงเบราว์เซอร์
ก่อนเริ่มต้น
ใน Cloud Shell ให้ตรวจสอบว่าได้ตั้งค่ารหัสโปรเจ็กต์แล้ว
PROJECT_ID=your-project-id gcloud config set project $PROJECT_ID
4. ทำให้บริการ Cloud Run ใช้งานได้
ทำให้บริการ Cloud Run ใช้งานได้เพื่อรับเหตุการณ์ คุณจะทำให้คอนเทนเนอร์ Hello ของ Cloud Run ใช้งานได้ ซึ่งจะบันทึกเนื้อหาของ CloudEvents
ก่อนอื่น ให้เปิดใช้บริการที่จำเป็นสำหรับ Cloud Run ดังนี้
gcloud services enable run.googleapis.com
ทำให้คอนเทนเนอร์ hello ใช้งานได้กับ Cloud Run โดยทำดังนี้
REGION=us-central1 SERVICE_NAME=hello gcloud run deploy $SERVICE_NAME \ --allow-unauthenticated \ --image=gcr.io/cloudrun/hello \ --region=$REGION
เมื่อสำเร็จ บรรทัดคำสั่งจะแสดง URL ของบริการ คุณสามารถเปิด URL ของบริการในหน้าต่างเบราว์เซอร์ใดก็ได้เพื่อตรวจสอบอีกครั้งว่าตอนนี้ได้ติดตั้งใช้งานบริการแล้ว
5. การค้นพบกิจกรรม
ก่อนสร้างทริกเกอร์ใน Eventarc คุณสามารถค้นหาแหล่งที่มาของเหตุการณ์ ประเภทของเหตุการณ์ที่แหล่งที่มาปล่อยออกมา และวิธีกำหนดค่าทริกเกอร์เพื่อใช้เหตุการณ์เหล่านั้น
วิธีดูรายการเหตุการณ์ประเภทต่างๆ
gcloud beta eventarc attributes types list NAME DESCRIPTION google.cloud.audit.log.v1.written Cloud Audit Log written google.cloud.pubsub.topic.v1.messagePublished Cloud Pub/Sub message published google.cloud.storage.object.v1.archived Cloud Storage: Sent when a live version of an (object versioned) object is archived or deleted. google.cloud.storage.object.v1.deleted Cloud Storage: Sent when an object has been permanently deleted. google.cloud.storage.object.v1.finalized Cloud Storage: Sent when a new object (or a new generation of an existing object). google.cloud.storage.object.v1.metadataUpdated Cloud Storage: Sent when the metadata of an existing object changes.
ดูข้อมูลเพิ่มเติมเกี่ยวกับเหตุการณ์แต่ละประเภทได้โดยทำดังนี้
gcloud beta eventarc attributes types describe google.cloud.audit.log.v1.written attributes: type,serviceName,methodName,resourceName description: 'Cloud Audit Log: Sent when a log is written.' name: google.cloud.audit.log.v1.written
วิธีดูรายการบริการที่ปล่อยเหตุการณ์ประเภทหนึ่งๆ
gcloud beta eventarc attributes service-names list --type=google.cloud.audit.log.v1.written SERVICE_NAME DISPLAY_NAME accessapproval.googleapis.com Access Approval accesscontextmanager.googleapis.com Access Context Manager admin.googleapis.com Google Workspace Admin aiplatform.googleapis.com AI Platform (under Vertex AI) apigee.googleapis.com Apigee apigeeconnect.googleapis.com Apigee Connect ... workflows.googleapis.com Workflows
วิธีดูรายการชื่อเมธอด (เหตุการณ์ย่อย) ที่แต่ละบริการสามารถปล่อยได้
gcloud beta eventarc attributes method-names list --type=google.cloud.audit.log.v1.written --service-name=workflows.googleapis.com METHOD_NAME google.cloud.workflows.v1.Workflows.CreateWorkflow google.cloud.workflows.v1.Workflows.DeleteWorkflow google.cloud.workflows.v1.Workflows.GetWorkflow google.cloud.workflows.v1.Workflows.ListWorkflows google.cloud.workflows.v1.Workflows.UpdateWorkflow google.cloud.workflows.v1beta.Workflows.CreateWorkflow google.cloud.workflows.v1beta.Workflows.DeleteWorkflow google.cloud.workflows.v1beta.Workflows.GetWorkflow google.cloud.workflows.v1beta.Workflows.ListWorkflows google.cloud.workflows.v1beta.Workflows.UpdateWorkflow
6. สร้างทริกเกอร์ Pub/Sub
วิธีหนึ่งในการรับเหตุการณ์คือผ่าน Cloud Pub/Sub แอปพลิเคชันใดก็ได้สามารถเผยแพร่ข้อความไปยัง Pub/Sub และข้อความเหล่านี้จะส่งไปยัง Cloud Run ผ่าน Eventarc ได้
ตั้งค่า
ก่อนสร้างทริกเกอร์ ให้เปิดใช้บริการที่จำเป็นสำหรับ Eventarc ดังนี้
gcloud services enable eventarc.googleapis.com
นอกจากนี้ คุณยังต้องมีบัญชีบริการที่ทริกเกอร์ใช้ด้วย สร้างบัญชีบริการ
SERVICE_ACCOUNT=eventarc-trigger-sa gcloud iam service-accounts create $SERVICE_ACCOUNT
สร้าง
สร้างทริกเกอร์เพื่อกรองเหตุการณ์ที่เผยแพร่ไปยังหัวข้อ Pub/Sub ไปยังบริการ Cloud Run ที่เราติดตั้งใช้งาน
TRIGGER_NAME=trigger-pubsub gcloud eventarc triggers create $TRIGGER_NAME \ --destination-run-service=$SERVICE_NAME \ --destination-run-region=$REGION \ --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \ --location=$REGION \ --service-account=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com
ทดสอบ
ทริกเกอร์ Pub/Sub จะสร้างหัวข้อเบื้องหลัง มาดูกันว่าเราจะค้นหาและกำหนดค่าให้กับตัวแปรได้อย่างไร
TOPIC_ID=$(gcloud eventarc triggers describe $TRIGGER_NAME --location $REGION --format='value(transport.pubsub.topic)')
ใช้ gcloud เพื่อเผยแพร่ข้อความไปยังหัวข้อ
gcloud pubsub topics publish $TOPIC_ID --message="Hello World"
บริการ Cloud Run จะบันทึกเนื้อหาของข้อความขาเข้า คุณดูข้อมูลนี้ได้ในส่วนบันทึกของอินสแตนซ์ Cloud Run

สร้างด้วยหัวข้อ Pub/Sub ที่มีอยู่
โดยค่าเริ่มต้น เมื่อคุณสร้างทริกเกอร์ Pub/Sub แล้ว Eventarc จะสร้างหัวข้อเบื้องหลังเพื่อให้คุณใช้เป็นหัวข้อการรับส่งระหว่างแอปพลิเคชันกับบริการ Cloud Run ซึ่งมีประโยชน์ในการสร้างทริกเกอร์ที่ใช้ Pub/Sub ได้อย่างง่ายดายและรวดเร็ว แต่บางครั้งคุณอาจต้องการใช้หัวข้อที่มีอยู่ Eventarc ช่วยให้คุณระบุหัวข้อ Pub/Sub ที่มีอยู่แล้วในโปรเจ็กต์เดียวกันได้ด้วยแฟล็ก --transport-topic gcloud
หากต้องการดูวิธีการทำงาน ให้สร้างหัวข้อ Pub/Sub เพื่อใช้เป็นหัวข้อการรับส่ง
TOPIC_ID=eventarc-topic gcloud pubsub topics create $TOPIC_ID
วิธีสร้างทริกเกอร์
TRIGGER_NAME=trigger-pubsub-existing gcloud eventarc triggers create $TRIGGER_NAME \ --destination-run-service=$SERVICE_NAME \ --destination-run-region=$REGION \ --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \ --location=$REGION \ --transport-topic=projects/$PROJECT_ID/topics/$TOPIC_ID \ --service-account=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com
คุณทดสอบทริกเกอร์ได้โดยส่งข้อความไปยังหัวข้อดังนี้
gcloud pubsub topics publish $TOPIC_ID --message="Hello again"
7. สร้างทริกเกอร์ Cloud Storage
ในขั้นตอนนี้ คุณจะสร้างทริกเกอร์เพื่อฟังเหตุการณ์จาก Cloud Storage
ตั้งค่า
ก่อนอื่น ให้สร้างที่เก็บข้อมูลเพื่อรับเหตุการณ์จาก
BUCKET_NAME=eventarc-gcs-$PROJECT_ID gsutil mb -l $REGION gs://$BUCKET_NAME
มอบบทบาท eventarc.eventReceiver เพื่อให้ใช้บัญชีบริการในทริกเกอร์ Cloud Storage ได้
gcloud projects add-iam-policy-binding $PROJECT_ID \ --role roles/eventarc.eventReceiver \ --member serviceAccount:$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com
นอกจากนี้ คุณยังต้องเพิ่มpubsub.publisherบทบาทให้กับบัญชีบริการ Cloud Storage สำหรับทริกเกอร์ Cloud Storage ด้วย
SERVICE_ACCOUNT_STORAGE=$(gsutil kms serviceaccount -p $PROJECT_ID)
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member serviceAccount:$SERVICE_ACCOUNT_STORAGE \
--role roles/pubsub.publisher
สร้าง
สร้างทริกเกอร์เพื่อกำหนดเส้นทางเหตุการณ์การสร้างไฟล์ใหม่จากที่เก็บข้อมูลไปยังบริการของคุณโดยทำดังนี้
TRIGGER_NAME=trigger-storage gcloud eventarc triggers create $TRIGGER_NAME \ --destination-run-service=$SERVICE_NAME \ --destination-run-region=$REGION \ --event-filters="type=google.cloud.storage.object.v1.finalized" \ --event-filters="bucket=$BUCKET_NAME" \ --location=$REGION \ --service-account=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com
ทดสอบ
แสดงทริกเกอร์ทั้งหมดเพื่อยืนยันว่าสร้างทริกเกอร์เรียบร้อยแล้ว
gcloud eventarc triggers list
อัปโหลดไฟล์ไปยัง Bucket ของ Cloud Storage
echo "Hello World" > random.txt gsutil cp random.txt gs://$BUCKET_NAME/random.txt
หากตรวจสอบบันทึกของบริการ Cloud Run ใน Cloud Console คุณควรเห็นเหตุการณ์ที่ได้รับ

8. สร้างทริกเกอร์บันทึกการตรวจสอบ Cloud
แม้ว่าทริกเกอร์ Cloud Storage จะเป็นวิธีที่ดีกว่าในการฟังเหตุการณ์ Cloud Storage แต่ในขั้นตอนนี้ คุณจะสร้างทริกเกอร์บันทึกการตรวจสอบ Cloud เพื่อทำสิ่งเดียวกัน
ตั้งค่า
หากต้องการรับเหตุการณ์จากบริการ คุณต้องเปิดใช้บันทึกการตรวจสอบ Cloud จาก Cloud Console ให้เลือก IAM & Admin และ Audit Logs จากเมนูด้านซ้ายบน ในรายการบริการ ให้ตรวจสอบ Google Cloud Storage ดังนี้

ทางด้านขวามือ ให้ตรวจสอบว่าได้เลือก Admin, Read และ Write แล้วคลิก Save

สร้าง
สร้างทริกเกอร์เพื่อกำหนดเส้นทางเหตุการณ์การสร้างไฟล์ใหม่จากที่เก็บข้อมูลไปยังบริการของคุณโดยทำดังนี้
TRIGGER_NAME=trigger-auditlog-storage gcloud eventarc triggers create $TRIGGER_NAME\ --destination-run-service=$SERVICE_NAME \ --destination-run-region=$REGION \ --event-filters="type=google.cloud.audit.log.v1.written" \ --event-filters="serviceName=storage.googleapis.com" \ --event-filters="methodName=storage.objects.create" \ --event-filters-path-pattern="resourceName=/projects/_/buckets/$BUCKET_NAME/objects/*" \ --location=$REGION \ --service-account=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com
ทดสอบ
ทริกเกอร์ของบันทึกการตรวจสอบจะใช้เวลาสักครู่ในการเริ่มต้น คุณตรวจสอบได้ว่ามีการสร้างทริกเกอร์โดยแสดงทริกเกอร์ทั้งหมดดังนี้
gcloud eventarc triggers list
คุณควรเห็นว่าACTIVEฟิลด์เป็น Yes ดังนี้
NAME TYPE DESTINATION ACTIVE trigger-auditlog-storage google.cloud.audit.log.v1.written Cloud Run service: hello Yes
อัปโหลดไฟล์เดียวกันไปยัง Bucket ของ Cloud Storage เหมือนกับที่ทำก่อนหน้านี้
gsutil cp random.txt gs://$BUCKET_NAME/random.txt
หากตรวจสอบบันทึกของบริการ Cloud Run ใน Cloud Console คุณควรเห็นเหตุการณ์ที่ได้รับ

9. สำรวจ UI ของ Eventarc
ในขั้นตอนนี้ คุณจะได้สำรวจ UI ของ Eventarc ใน Google Cloud Console ใน UI ของ Eventarc คุณจะดูภาพรวมของทริกเกอร์ทั้งหมด แก้ไขและลบทริกเกอร์ รวมถึงสร้างทริกเกอร์ใหม่จาก Google Cloud Console ได้
ไปที่ส่วน Eventarc ของ Google Cloud โดยทำดังนี้

คุณจะเห็นรายการทริกเกอร์ที่สร้างไว้ก่อนหน้านี้

หากคลิกทริกเกอร์ คุณจะดูรายละเอียดของทริกเกอร์ แก้ไข หรือลบทริกเกอร์ได้โดยทำดังนี้

นอกจากนี้ คุณยังสร้างทริกเกอร์ใหม่ได้โดยเลือก Create trigger แล้วกรอกรายละเอียดของทริกเกอร์ ดังนี้

10. ยินดีด้วย
ขอแสดงความยินดีที่ทำ Codelab เสร็จสมบูรณ์
สิ่งที่เราได้พูดถึงไปแล้ว
- วิสัยทัศน์ของ Eventarc
- ค้นพบเหตุการณ์ใน Eventarc
- สร้างซิงก์ Cloud Run
- สร้างทริกเกอร์สำหรับ Pub/Sub
- สร้างทริกเกอร์สำหรับ Cloud Storage
- สร้างทริกเกอร์สำหรับบันทึกการตรวจสอบ Cloud
- สำรวจ UI ของ Eventarc