1. บทนำ
Cloud Run ช่วยให้คุณเรียกใช้คอนเทนเนอร์แบบไม่เก็บสถานะในสภาพแวดล้อมที่มีการจัดการครบวงจรได้ โดยสร้างขึ้นจาก Knative แบบโอเพนซอร์ส ซึ่งให้คุณเลือกที่จะเรียกใช้คอนเทนเนอร์ที่มีการจัดการครบวงจรด้วย Cloud Run หรือในคลัสเตอร์ Google Kubernetes Engine ด้วย Cloud Run สำหรับ Anthos ได้
Eventarc ช่วยให้เชื่อมต่อบริการต่างๆ (Cloud Run, Cloud Functions, Workfklows) กับเหตุการณ์จากแหล่งที่มาต่างๆ ได้อย่างง่ายดาย ซึ่งช่วยให้คุณสร้างสถาปัตยกรรมที่ขับเคลื่อนด้วยเหตุการณ์ซึ่งมีการเชื่อมต่อและกระจาย Microservice แบบหลวมๆ นอกจากนี้ยังดูแลการส่งผ่านข้อมูลของเหตุการณ์ การนำส่ง การรักษาความปลอดภัย การให้สิทธิ์ และการจัดการข้อผิดพลาดให้คุณด้วย ซึ่งจะช่วยเพิ่มความคล่องตัวให้กับนักพัฒนาซอฟต์แวร์และความยืดหยุ่นของแอปพลิเคชัน
ใน Codelab นี้ คุณจะได้เรียนรู้เกี่ยวกับ Eventarc กล่าวอย่างเจาะจงก็คือ คุณจะฟังเหตุการณ์จาก Pub/Sub, Cloud Storage และบันทึก Cloud Audit กับ Eventarc และส่งไปยังบริการ Cloud Run ได้
สิ่งที่คุณจะได้เรียนรู้
- วิสัยทัศน์ของ Eventarc
- สำรวจกิจกรรมใน Eventarc
- สร้างซิงก์ Cloud Run
- สร้างทริกเกอร์สำหรับ Pub/Sub
- สร้างทริกเกอร์สำหรับ Cloud Storage
- สร้างทริกเกอร์สำหรับบันทึกการตรวจสอบระบบคลาวด์
- สำรวจ UI ของ Eventarc
2. วิสัยทัศน์ของ Eventarc
Eventarc มีเป้าหมายที่จะนำส่งเหตุการณ์จากต้นทางต่างๆ ของ Google, Google Cloud และแหล่งที่มาของเหตุการณ์ของบุคคลที่สามไปยังปลายทางเหตุการณ์ของ Google Cloud
แหล่งที่มาของ Google Cloud | แหล่งที่มาของเหตุการณ์ซึ่งเป็นผลิตภัณฑ์ที่ Google Cloud เป็นเจ้าของ |
แหล่งที่มาของ Google | แหล่งที่มาของกิจกรรมที่เป็นผลิตภัณฑ์ของ Google เช่น Gmail, Hangouts, การจัดการ Android และอื่นๆ |
แหล่งที่มาที่กำหนดเอง | แหล่งที่มาของเหตุการณ์ที่ไม่ใช่ผลิตภัณฑ์ที่ Google เป็นเจ้าของและสร้างโดยผู้ใช้ปลายทางเอง |
แหล่งที่มาของบุคคลที่สาม | แหล่งที่มาของเหตุการณ์ที่ Google ไม่ได้เป็นเจ้าของและไม่ได้สร้างขึ้นโดยลูกค้า ซึ่งรวมถึงแหล่งที่มาของเหตุการณ์ยอดนิยม เช่น Check Point CloudGuard, Datadog, ForgeRock, Lacework ฯลฯ ที่ผู้ให้บริการและพาร์ทเนอร์บุคคลที่สามเป็นเจ้าของและดูแล |
ระบบจะแปลงเหตุการณ์เป็นรูปแบบ CloudEvents v1.0 เพื่อความสามารถในการทำงานร่วมกันข้ามบริการ CloudEvent เป็นข้อกำหนดแบบเปิดของผู้ให้บริการแต่ละราย ซึ่งอธิบายข้อมูลเหตุการณ์ในรูปแบบทั่วไป ทำให้สามารถทำงานร่วมกันในบริการ แพลตฟอร์ม และระบบต่างๆ ได้
3. การตั้งค่าและข้อกำหนด
การตั้งค่าสภาพแวดล้อมตามเวลาที่สะดวก
- ลงชื่อเข้าใช้ Google Cloud Console และสร้างโปรเจ็กต์ใหม่หรือใช้โปรเจ็กต์ที่มีอยู่ซ้ำ หากยังไม่มีบัญชี Gmail หรือ Google Workspace คุณต้องสร้างบัญชี
- ชื่อโครงการคือชื่อที่แสดงของผู้เข้าร่วมโปรเจ็กต์นี้ เป็นสตริงอักขระที่ Google APIs ไม่ได้ใช้และคุณอัปเดตได้ทุกเมื่อ
- รหัสโปรเจ็กต์ต้องไม่ซ้ำกันในโปรเจ็กต์ Google Cloud ทั้งหมดและจะเปลี่ยนแปลงไม่ได้ (เปลี่ยนแปลงไม่ได้หลังจากตั้งค่าแล้ว) Cloud Console จะสร้างสตริงที่ไม่ซ้ำกันโดยอัตโนมัติ ปกติแล้วคุณไม่สนว่าอะไรเป็นอะไร ใน Codelab ส่วนใหญ่ คุณจะต้องอ้างอิงรหัสโปรเจ็กต์ (ซึ่งปกติระบุไว้ว่าเป็น
PROJECT_ID
) ดังนั้นหากไม่ชอบ ให้สร้างรหัสแบบสุ่มขึ้นมาอีกรหัสหนึ่ง หรือคุณจะลองใช้รหัสโปรเจ็กต์ของคุณเองแล้วดูว่ารหัสโปรเจ็กต์พร้อมใช้งานหรือไม่ แล้วก็ "แช่แข็ง" หลังจากสร้างโปรเจ็กต์แล้ว - มีค่าที่ 3 คือหมายเลขโปรเจ็กต์ที่ API บางตัวใช้ ดูข้อมูลเพิ่มเติมเกี่ยวกับค่าทั้ง 3 ค่าเหล่านี้ในเอกสารประกอบ
- ถัดไป คุณจะต้องเปิดใช้การเรียกเก็บเงินใน Cloud Console เพื่อใช้ทรัพยากร/API ของระบบคลาวด์ การใช้งาน Codelab นี้น่าจะไม่มีค่าใช้จ่ายใดๆ หากมี หากต้องการปิดทรัพยากรเพื่อไม่ให้มีการเรียกเก็บเงินนอกเหนือจากบทแนะนำนี้ ให้ทำตาม "การล้าง" ดูได้ที่ตอนท้ายของ Codelab ผู้ใช้ใหม่ของ Google Cloud จะมีสิทธิ์เข้าร่วมโปรแกรมทดลองใช้ฟรี$300 USD
เริ่มต้น Cloud Shell
แม้ว่าคุณจะดำเนินการ Google Cloud จากระยะไกลได้จากแล็ปท็อป แต่คุณจะใช้ Google Cloud Shell ซึ่งเป็นสภาพแวดล้อมแบบบรรทัดคำสั่งที่ทำงานในระบบคลาวด์ใน Codelab นี้
จากคอนโซล GCP ให้คลิกไอคอน Cloud Shell บนแถบเครื่องมือด้านขวาบนดังนี้
การจัดสรรและเชื่อมต่อกับสภาพแวดล้อมนี้ควรใช้เวลาเพียงครู่เดียว เมื่อเสร็จแล้ว คุณจะเห็นข้อมูลต่อไปนี้
เครื่องเสมือนนี้เต็มไปด้วยเครื่องมือการพัฒนาทั้งหมดที่คุณต้องการ โดยมีไดเรกทอรีหลักขนาด 5 GB ที่ใช้งานได้ต่อเนื่องและทำงานบน Google Cloud ซึ่งช่วยเพิ่มประสิทธิภาพของเครือข่ายและการตรวจสอบสิทธิ์ได้อย่างมาก งานทั้งหมดใน Lab นี้สามารถทำได้โดยใช้เบราว์เซอร์
ก่อนเริ่มต้น
ตรวจสอบใน 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 ที่มีอยู่ในโปรเจ็กต์เดียวกันด้วยแฟล็ก gcloud ของ --transport-topic
หากต้องการดูวิธีการทำงาน ให้สร้างหัวข้อ 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
อัปโหลดไฟล์ไปยังที่เก็บข้อมูล Cloud Storage:
echo "Hello World" > random.txt gsutil cp random.txt gs://$BUCKET_NAME/random.txt
หากคุณตรวจสอบบันทึกของบริการ Cloud Run ใน Cloud Console คุณควรเห็นเหตุการณ์ที่ได้รับดังนี้
8. สร้างทริกเกอร์บันทึกการตรวจสอบระบบคลาวด์
แม้ว่าทริกเกอร์ Cloud Storage จะเป็นวิธีที่ดีกว่าในการเฝ้าติดตามเหตุการณ์ Cloud Storage แต่ในขั้นตอนนี้คุณจะต้องสร้างทริกเกอร์ของบันทึก Cloud Audit เพื่อทำเช่นนั้น
ตั้งค่า
หากต้องการรับเหตุการณ์จากบริการ คุณต้องเปิดใช้บันทึก Cloud Audit เลือก IAM & Admin
และ Audit Logs
จากเมนูด้านซ้ายบนจาก Cloud Console ในรายการบริการ ให้ตรวจสอบ 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
อัปโหลดไฟล์เดียวกันไปยังที่เก็บข้อมูล 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
- สร้างทริกเกอร์สำหรับบันทึกการตรวจสอบระบบคลาวด์
- สำรวจ UI ของ Eventarc