เกี่ยวกับ Codelab นี้
1 บทนำ
Eventarc ช่วยให้เชื่อมต่อบริการต่างๆ (Cloud Run, Kubernetes, Workflows) กับเหตุการณ์จากแหล่งที่มาต่างๆ ได้ง่าย ซึ่งช่วยให้คุณสร้างสถาปัตยกรรมที่ทำงานตามเหตุการณ์ซึ่งมีการเชื่อมโยงและกระจาย Microservice แบบหลวมๆ ได้ นอกจากนี้ ยังจัดการการส่งผ่าน การนำส่ง ความปลอดภัย การให้สิทธิ์ และการจัดการข้อผิดพลาดให้คุณด้วย ซึ่งจะช่วยเพิ่มความยืดหยุ่นของนักพัฒนาแอปและความยืดหยุ่นของแอปพลิเคชัน ดูเรียกใช้ Cloud Run ด้วยเหตุการณ์จาก Eventarc Codelab เพื่อดูข้อมูลเบื้องต้นเกี่ยวกับ Eventarc
ในโค้ดแล็บนี้ คุณจะใช้ Eventarc เพื่ออ่านเหตุการณ์จาก Pub/Sub, Cloud Storage และบันทึกการตรวจสอบระบบคลาวด์ แล้วส่งไปยังบริการ Kubernetes ที่ทำงานบน Google Kubernetes Engine (GKE)
สิ่งที่คุณจะได้เรียนรู้
- สร้างคลัสเตอร์ GKE
- สร้างบริการ GKE เป็นแหล่งเก็บข้อมูลเหตุการณ์
- สร้างทริกเกอร์ Pub/Sub
- สร้างทริกเกอร์ Cloud Storage
- สร้างทริกเกอร์บันทึกการตรวจสอบระบบคลาวด์
2 การตั้งค่าและข้อกําหนด
การตั้งค่าสภาพแวดล้อมด้วยตนเอง
- ลงชื่อเข้าใช้ Google Cloud Console แล้วสร้างโปรเจ็กต์ใหม่หรือใช้โปรเจ็กต์ที่มีอยู่ซ้ำ หากยังไม่มีบัญชี Gmail หรือ Google Workspace คุณต้องสร้างบัญชี
- ชื่อโปรเจ็กต์คือชื่อที่แสดงสำหรับผู้เข้าร่วมโปรเจ็กต์นี้ ซึ่งเป็นสตริงอักขระที่ Google APIs ไม่ได้ใช้ โดยคุณจะอัปเดตได้ทุกเมื่อ
- รหัสโปรเจ็กต์จะต้องไม่ซ้ำกันสำหรับโปรเจ็กต์ Google Cloud ทั้งหมดและจะเปลี่ยนแปลงไม่ได้ (เปลี่ยนแปลงไม่ได้หลังจากตั้งค่าแล้ว) คอนโซล Cloud จะสร้างสตริงที่ไม่ซ้ำกันโดยอัตโนมัติ ซึ่งปกติแล้วคุณไม่จำเป็นต้องสนใจว่าสตริงนั้นจะเป็นอะไร ในโค้ดแล็บส่วนใหญ่ คุณจะต้องอ้างอิงรหัสโปรเจ็กต์ (โดยปกติจะระบุเป็น
PROJECT_ID
) หากไม่ชอบรหัสที่สร้างขึ้น คุณสามารถสุ่มรหัสอื่นได้ หรือจะลองใช้อุปกรณ์ของคุณเองเพื่อดูว่าฟีเจอร์นี้พร้อมใช้งานหรือไม่ก็ได้ คุณจะเปลี่ยนแปลงชื่อหลังจากขั้นตอนนี้ไม่ได้ และชื่อจะยังคงอยู่ตลอดระยะเวลาของโปรเจ็กต์ - โปรดทราบว่ามีค่าที่ 3 ซึ่งเป็นหมายเลขโปรเจ็กต์ที่ API บางรายการใช้ ดูข้อมูลเพิ่มเติมเกี่ยวกับค่าทั้ง 3 รายการนี้ได้ในเอกสารประกอบ
- ถัดไป คุณจะต้องเปิดใช้การเรียกเก็บเงินใน Cloud Console เพื่อใช้ทรัพยากร/API ของ Cloud การทำตามโค้ดแล็บนี้ไม่น่าจะเสียค่าใช้จ่ายมากนัก หากต้องการปิดใช้ทรัพยากรเพื่อไม่ให้มีการเรียกเก็บเงินหลังจากบทแนะนำนี้ คุณก็ลบทรัพยากรที่สร้างไว้หรือลบทั้งโปรเจ็กต์ได้ ผู้ใช้ Google Cloud รายใหม่มีสิทธิ์เข้าร่วมโปรแกรมช่วงทดลองใช้ฟรีมูลค่า$300 USD
เริ่ม Cloud Shell
แม้ว่า Google Cloud จะทำงานจากระยะไกลจากแล็ปท็อปได้ แต่ในโค้ดแล็บนี้ คุณจะใช้ Google Cloud Shell ซึ่งเป็นสภาพแวดล้อมบรรทัดคำสั่งที่ทำงานในระบบคลาวด์
จากคอนโซล Google Cloud ให้คลิกไอคอน Cloud Shell ในแถบเครื่องมือด้านขวาบน
การจัดสรรและเชื่อมต่อกับสภาพแวดล้อมจะใช้เวลาเพียงไม่กี่นาที เมื่อดำเนินการเสร็จแล้ว คุณควรเห็นข้อมูลดังต่อไปนี้
เครื่องเสมือนนี้โหลดเครื่องมือการพัฒนาทั้งหมดที่คุณต้องการ ซึ่งจะมีไดเรกทอรีหลักขนาด 5 GB ถาวรและทำงานบน Google Cloud ซึ่งจะช่วยเพิ่มประสิทธิภาพเครือข่ายและการรับรองได้อย่างมีประสิทธิภาพ คุณทํางานทั้งหมดในโค้ดแล็บนี้ได้ภายในเบราว์เซอร์ คุณไม่จำเป็นต้องติดตั้งอะไรเลย
ก่อนเริ่มต้น
ใน Cloud Shell ให้ตรวจสอบว่าได้ตั้งค่ารหัสโปรเจ็กต์แล้ว โดยทำดังนี้
PROJECT_ID=your-project-id gcloud config set project $PROJECT_ID
3 สร้างคลัสเตอร์ GKE
ก่อนอื่น ให้เปิดใช้บริการที่จําเป็นสําหรับ GKE
gcloud services enable container.googleapis.com
สร้างคลัสเตอร์ GKE Autopilot
CLUSTER_NAME=eventarc-cluster REGION=us-central1 gcloud container clusters create-auto $CLUSTER_NAME --region $REGION
ตรวจสอบว่าการสร้างคลัสเตอร์เสร็จสมบูรณ์แล้วก่อนที่จะไปยังขั้นตอนถัดไป
4 ทำให้บริการ GKE ใช้งานได้
ก่อนทำให้บริการใช้งานได้ ให้รับข้อมูลเข้าสู่ระบบการตรวจสอบสิทธิ์เพื่อโต้ตอบกับคลัสเตอร์ด้วย kubectl
โดยทำดังนี้
gcloud container clusters get-credentials $CLUSTER_NAME \ --region $REGION
จากนั้น ติดตั้งใช้งาน hello container ของ Cloud Run เป็นการติดตั้งใช้งาน Kubernetes ใน GKE บริการนี้จะบันทึกคําขอ HTTP และ CloudEvents ที่ได้รับ
SERVICE_NAME=hello-gke kubectl create deployment $SERVICE_NAME \ --image=gcr.io/cloudrun/hello
แสดงการทำให้ใช้งานได้เป็นบริการ Kubernetes ภายใน ซึ่งจะสร้างบริการที่มี IP ที่เสถียรซึ่งเข้าถึงได้ภายในคลัสเตอร์
kubectl expose deployment $SERVICE_NAME \ --type ClusterIP --port 80 --target-port 8080
โปรดตรวจสอบว่าพ็อดทํางานอยู่ก่อนไปยังขั้นตอนถัดไป
kubectl get pods NAME READY STATUS hello-gke-df6469d4b-5vv22 1/1 Running
นอกจากนี้ คุณยังดูบริการดังกล่าวได้ด้วย
kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP hello-gke LoadBalancer 10.51.1.26 <none>
5 ตั้งค่า Eventarc
ในขั้นตอนนี้ คุณจะทำตามขั้นตอนเพื่อตั้งค่า Eventarc และเริ่มต้นปลายทาง GKE ของ Eventarc
ก่อนอื่น ให้เปิดใช้บริการที่จําเป็นสําหรับปลายทาง Eventarc และ Eventarc GKE ดังนี้
gcloud services enable eventarc.googleapis.com \ cloudresourcemanager.googleapis.com
ถัดไป ให้เปิดใช้ Eventarc เพื่อจัดการคลัสเตอร์ GKE โดยทำดังนี้
gcloud eventarc gke-destinations init
Eventarc จะสร้างพ็อดตัวส่งต่อเหตุการณ์แยกต่างหากสำหรับทริกเกอร์แต่ละรายการที่กำหนดเป้าหมายไปยังบริการ GKE และต้องได้รับสิทธิ์ที่ชัดเจนจึงจะทำการเปลี่ยนแปลงในคลัสเตอร์ได้ ซึ่งทำได้โดยการให้สิทธิ์แก่บัญชีบริการพิเศษเพื่อจัดการทรัพยากรในคลัสเตอร์ โดยจำเป็นต้องดำเนินการอย่างน้อย 1 ครั้งต่อโปรเจ็กต์ Google Cloud
6 การค้นพบเหตุการณ์
ก่อนสร้างทริกเกอร์ คุณสามารถดูว่าแหล่งที่มาของเหตุการณ์คืออะไร ประเภทของเหตุการณ์ที่แหล่งที่มาสามารถส่งออก และวิธีกําหนดค่าทริกเกอร์เพื่อใช้งาน
คุณสามารถดูหน้าเอกสารประกอบเกี่ยวกับเหตุการณ์ที่ Eventarc รองรับ หรือจะสำรวจเหตุการณ์โดยใช้ gcloud
ก็ได้
วิธีดูรายการเหตุการณ์ประเภทต่างๆ
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
7 สร้างทริกเกอร์ Pub/Sub
วิธีหนึ่งในการรับเหตุการณ์คือผ่าน Pub/Sub แอปพลิเคชันใดก็ได้สามารถเผยแพร่ข้อความไปยัง Pub/Sub และระบบจะส่งข้อความเหล่านี้ไปยังบริการผ่าน Eventarc ได้
ตั้งค่า
ก่อนสร้างทริกเกอร์ คุณต้องมีบัญชีบริการที่จะให้ทริกเกอร์ใช้
วิธีสร้างบัญชีบริการ
SERVICE_ACCOUNT=eventarc-gke-trigger-sa gcloud iam service-accounts create $SERVICE_ACCOUNT
บัญชีบริการต้องได้รับบทบาทต่อไปนี้สำหรับทริกเกอร์ที่มีปลายทาง GKE
roles/pubsub.subscriber
roles/monitoring.metricWriter
roles/eventarc.eventReceiver
(สําหรับทริกเกอร์ AuditLog เท่านั้น ซึ่งจะเพิ่มในขั้นตอนถัดไป)
ให้บทบาทต่อไปนี้
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com \ --role roles/pubsub.subscriber gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com \ --role roles/monitoring.metricWriter
สร้าง
สร้างทริกเกอร์เพื่อกำหนดเส้นทางข้อความ Pub/Sub ไปยังบริการของคุณ
TRIGGER_NAME=trigger-pubsub-gke gcloud eventarc triggers create $TRIGGER_NAME \ --destination-gke-cluster=$CLUSTER_NAME \ --destination-gke-location=$REGION \ --destination-gke-namespace=default \ --destination-gke-service=$SERVICE_NAME \ --destination-gke-path=/ \ --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \ --location=$REGION \ --service-account=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com
ทดสอบ
คุณสามารถตรวจสอบว่าสร้างทริกเกอร์แล้วโดยดูรายการทริกเกอร์ทั้งหมด ดังนี้
gcloud eventarc triggers list
ทริกเกอร์ Pub/Sub จะสร้างหัวข้อ 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"
หากต้องการตรวจสอบว่าได้รับเหตุการณ์หรือไม่ ให้ค้นหาชื่อพ็อดก่อน โดยทำดังนี้
kubectl get pods NAME READY STATUS hello-gke-df6469d4b-5vv22 1/1 Running
และจัดเก็บไว้ในตัวแปร
POD_NAME=hello-gke-df6469d4b-5vv22
ตรวจสอบบันทึกของพ็อดเพื่อยืนยันเหตุการณ์ที่ได้รับ
kubectl logs $POD_NAME { "severity": "INFO", "eventType": "google.cloud.pubsub.topic.v1.messagePublished", "message": "Received event of type google.cloud.pubsub.topic.v1.messagePublished. Event data: Hello World", "event": { "data": { "subscription": "projects/atamel-eventarc-gke/subscriptions/eventarc-us-central1-trigger-pubsub-gke-sub-270", "message": { "data": "SGVsbG8gV29ybGQ=", "messageId": "6031025573654834", "publishTime": "2022-10-19T14:13:07.990Z" } }, "datacontenttype": "application/json", "id": "6031025573654834", "source": "//pubsub.googleapis.com/projects/atamel-eventarc-gke/topics/eventarc-us-central1-trigger-pubsub-gke-729", "specversion": "1.0", "time": "2022-10-19T14:13:07.99Z", "type": "google.cloud.pubsub.topic.v1.messagePublished" } }
8 สร้างทริกเกอร์ Cloud Storage
อีกวิธีในการรับเหตุการณ์คือผ่าน Cloud Storage เช่น แอปพลิเคชันสามารถอัปโหลดไฟล์ไปยังที่เก็บข้อมูลและส่งเหตุการณ์นั้นไปยังบริการผ่าน Eventarc ได้
ตั้งค่า
ก่อนสร้างทริกเกอร์ Cloud Storage ให้สร้างที่เก็บข้อมูลเพื่อรับเหตุการณ์จากแหล่งที่มาต่อไปนี้
BUCKET_NAME=eventarc-gcs-$PROJECT_ID gcloud storage buckets update gs://$BUCKET_NAME --location=$REGION
นอกจากนี้ คุณยังต้องเพิ่มบทบาท pubsub.publisher
ลงในบัญชีบริการ Cloud Storage สำหรับทริกเกอร์ Cloud Storage ด้วย
SERVICE_ACCOUNT_STORAGE=$(gcloud storage service-agent --project=$PROJECT_ID) gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$SERVICE_ACCOUNT_STORAGE \ --role roles/pubsub.publisher
สร้าง
สร้างทริกเกอร์เพื่อกำหนดเส้นทางเหตุการณ์การสร้างไฟล์ใหม่จากที่เก็บข้อมูลไปยังบริการของคุณ โดยทำดังนี้
TRIGGER_NAME=trigger-storage-gke gcloud eventarc triggers create $TRIGGER_NAME \ --destination-gke-cluster=$CLUSTER_NAME \ --destination-gke-location=$REGION \ --destination-gke-namespace=default \ --destination-gke-service=$SERVICE_NAME \ --destination-gke-path=/ \ --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
สร้างไฟล์และใช้ gcloud storage
เพื่ออัปโหลดไฟล์ไปยังที่เก็บข้อมูล
echo "Hello World" > random.txt gcloud storage cp random.txt gs://$BUCKET_NAME/random.txt
ตรวจสอบบันทึกของพ็อดเพื่อยืนยันเหตุการณ์ที่ได้รับ
kubectl logs $POD_NAME { "severity": "INFO", "eventType": "google.cloud.storage.object.v1.finalized", "message": "Received event of type google.cloud.storage.object.v1.finalized. Event data: {\n \"kind\": \"storage#object\",\n \"id\": \"eventarc-gcs-atamel-eventarc-gke/random.txt/1666190425669022\",\n \"selfLink\": \"https://www.googleapis.com/storage/v1/b/eventarc-gcs-atamel-eventarc-gke/o/random.txt\",\n \"name\": \"random.txt\",\n \"bucket\": \"eventarc-gcs-atamel-eventarc-gke\",\n \"generation\": \"1666190425669022\",\n \"metageneration\": \"1\",\n \"contentType\": \"text/plain\",\n \"timeCreated\": \"2022-10-19T14:40:25.678Z\",\n \"updated\": \"2022-10-19T14:40:25.678Z\",\n \"storageClass\": \"STANDARD\",\n \"timeStorageClassUpdated\": \"2022-10-19T14:40:25.678Z\",\n \"size\": \"12\",\n \"md5Hash\": \"5Z/5eUEET4XfUpfhwwLSYA==\",\n \"mediaLink\": \"https://storage.googleapis.com/download/storage/v1/b/eventarc-gcs-atamel-eventarc-gke/o/random.txt?generation=1666190425669022\u0026alt=media\",\n \"contentLanguage\": \"en\",\n \"crc32c\": \"R1jUOQ==\",\n \"etag\": \"CJ77zIPD7PoCEAE=\"\n}\n", "event": { "bucket": "eventarc-gcs-atamel-eventarc-gke", "data": { "kind": "storage#object", "id": "eventarc-gcs-atamel-eventarc-gke/random.txt/1666190425669022", "selfLink": "https://www.googleapis.com/storage/v1/b/eventarc-gcs-atamel-eventarc-gke/o/random.txt", "name": "random.txt", "bucket": "eventarc-gcs-atamel-eventarc-gke", "generation": "1666190425669022", "metageneration": "1", "contentType": "text/plain", "timeCreated": "2022-10-19T14:40:25.678Z", "updated": "2022-10-19T14:40:25.678Z", "storageClass": "STANDARD", "timeStorageClassUpdated": "2022-10-19T14:40:25.678Z", "size": "12", "md5Hash": "5Z/5eUEET4XfUpfhwwLSYA==", "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/eventarc-gcs-atamel-eventarc-gke/o/random.txt?generation=1666190425669022\u0026alt=media", "contentLanguage": "en", "crc32c": "R1jUOQ==", "etag": "CJ77zIPD7PoCEAE=" }, "datacontenttype": "application/json", "id": "6031255652220627", "source": "//storage.googleapis.com/projects/_/buckets/eventarc-gcs-atamel-eventarc-gke", "specversion": "1.0", "subject": "objects/random.txt", "time": "2022-10-19T14:40:25.678152Z", "type": "google.cloud.storage.object.v1.finalized" } }
9 สร้างทริกเกอร์บันทึกการตรวจสอบระบบคลาวด์
แม้ว่าทริกเกอร์ Cloud Storage จะเป็นวิธีที่ดีกว่าในการรับฟังเหตุการณ์ Cloud Storage แต่ในขั้นตอนนี้ คุณจะต้องสร้างทริกเกอร์บันทึกการตรวจสอบ Cloud เพื่อดำเนินการเดียวกัน
ตั้งค่า
หากต้องการรับเหตุการณ์จากบริการ คุณต้องเปิดใช้บันทึกการตรวจสอบ จาก Google Cloud Console ให้เลือก IAM & Admin
และ Audit Logs
จากเมนูด้านซ้ายบน ในรายการบริการ ให้เลือก Google Cloud Storage
ทางด้านขวามือ ให้เลือก Admin
, Read
และ Write
แล้วคลิก Save
นอกจากนี้ คุณยังต้องเพิ่มบทบาท eventarc.eventReceiver
ลงในบัญชีบริการทริกเกอร์สําหรับทริกเกอร์บันทึกการตรวจสอบ Cloud ด้วย
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com \ --role roles/eventarc.eventReceiver
สร้าง
สร้างทริกเกอร์เพื่อกำหนดเส้นทางเหตุการณ์การสร้างไฟล์ใหม่จากที่เก็บข้อมูลไปยังบริการของคุณ โดยทำดังนี้
TRIGGER_NAME=trigger-auditlog-storage-gke gcloud eventarc triggers create $TRIGGER_NAME \ --destination-gke-cluster=$CLUSTER_NAME \ --destination-gke-location=$REGION \ --destination-gke-namespace=default \ --destination-gke-service=$SERVICE_NAME \ --destination-gke-path=/ \ --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-gke google.cloud.audit.log.v1.written GKE: hello-gke Yes
สร้างไฟล์และใช้ gcloud storage
เพื่ออัปโหลดไฟล์ไปยังที่เก็บข้อมูล
echo "Hello World" > random.txt gcloud storage cp random.txt gs://$BUCKET_NAME/random.txt
ตรวจสอบบันทึกของพ็อดเพื่อยืนยันเหตุการณ์ที่ได้รับ
kubectl logs $POD_NAME { "severity": "INFO", "eventType": "google.cloud.audit.log.v1.written", "message": "Received event of type google.cloud.audit.log.v1.written. Event data: {\"protoPayload\":{\"status\":{},\"authenticationInfo\":{\"principalEmail\":\"atameldev@gmail.com\"},\"requestMetadata\":{\"callerIp\":\"149.71.143.227\",\"callerSuppliedUserAgent\":\"apitools Python/3.10.4 gsutil/5.14 (darwin) analytics/disabled interactive/True command/cp google-cloud-sdk/405.0.1,gzip(gfe)\",\"requestAttributes\":{\"time\":\"2022-10-19T15:05:54.144615670Z\",\"auth\":{}},\"destinationAttributes\":{}},\"serviceName\":\"storage.googleapis.com\",\"methodName\":\"storage.objects.create\",\"authorizationInfo\":[{\"resource\":\"projects/_/buckets/eventarc-gcs-atamel-eventarc-gke/objects/random.txt\",\"permission\":\"storage.objects.delete\",\"granted\":true,\"resourceAttributes\":{}},{\"resource\":\"projects/_/buckets/eventarc-gcs-atamel-eventarc-gke/objects/random.txt\",\"permission\":\"storage.objects.create\",\"granted\":true,\"resourceAttributes\":{}}],\"resourceName\":\"projects/_/buckets/eventarc-gcs-atamel-eventarc-gke/objects/random.txt\",\"serviceData\":{\"@type\":\"type.googleapis.com/google.iam.v1.logging.AuditData\",\"policyDelta\":{\"bindingDeltas\":[{\"action\":\"ADD\",\"role\":\"roles/storage.legacyObjectOwner\",\"member\":\"projectOwner:atamel-eventarc-gke\"},{\"action\":\"ADD\",\"role\":\"roles/storage.legacyObjectOwner\",\"member\":\"projectEditor:atamel-eventarc-gke\"},{\"action\":\"ADD\",\"role\":\"roles/storage.legacyObjectOwner\",\"member\":\"user:atameldev@gmail.com\"},{\"action\":\"ADD\",\"role\":\"roles/storage.legacyObjectReader\",\"member\":\"projectViewer:atamel-eventarc-gke\"}]}},\"resourceLocation\":{\"currentLocations\":[\"us-central1\"]}},\"insertId\":\"-8vmrbve7pol2\",\"resource\":{\"type\":\"gcs_bucket\",\"labels\":{\"project_id\":\"atamel-eventarc-gke\",\"bucket_name\":\"eventarc-gcs-atamel-eventarc-gke\",\"location\":\"us-central1\"}},\"timestamp\":\"2022-10-19T15:05:54.138732321Z\",\"severity\":\"INFO\",\"logName\":\"projects/atamel-eventarc-gke/logs/cloudaudit.googleapis.com%2Fdata_access\",\"receiveTimestamp\":\"2022-10-19T15:05:54.839604461Z\"}", "event": { "data": { "protoPayload": { "status": { }, "authenticationInfo": { "principalEmail": "atameldev@gmail.com" }, "requestMetadata": { "callerIp": "149.71.143.227", "callerSuppliedUserAgent": "apitools Python/3.10.4 gsutil/5.14 (darwin) analytics/disabled interactive/True command/cp google-cloud-sdk/405.0.1,gzip(gfe)", "requestAttributes": { "time": "2022-10-19T15:05:54.144615670Z", "auth": { } }, "destinationAttributes": { } }, "serviceName": "storage.googleapis.com", "methodName": "storage.objects.create", "authorizationInfo": [ { "resource": "projects/_/buckets/eventarc-gcs-atamel-eventarc-gke/objects/random.txt", "permission": "storage.objects.delete", "granted": true, "resourceAttributes": { } }, { "resource": "projects/_/buckets/eventarc-gcs-atamel-eventarc-gke/objects/random.txt", "permission": "storage.objects.create", "granted": true, "resourceAttributes": { } } ], "resourceName": "projects/_/buckets/eventarc-gcs-atamel-eventarc-gke/objects/random.txt", "serviceData": { "@type": "type.googleapis.com/google.iam.v1.logging.AuditData", "policyDelta": { "bindingDeltas": [ { "action": "ADD", "role": "roles/storage.legacyObjectOwner", "member": "projectOwner:atamel-eventarc-gke" }, { "action": "ADD", "role": "roles/storage.legacyObjectOwner", "member": "projectEditor:atamel-eventarc-gke" }, { "action": "ADD", "role": "roles/storage.legacyObjectOwner", "member": "user:atameldev@gmail.com" }, { "action": "ADD", "role": "roles/storage.legacyObjectReader", "member": "projectViewer:atamel-eventarc-gke" } ] } }, "resourceLocation": { "currentLocations": [ "us-central1" ] } }, "insertId": "-8vmrbve7pol2", "resource": { "type": "gcs_bucket", "labels": { "project_id": "atamel-eventarc-gke", "bucket_name": "eventarc-gcs-atamel-eventarc-gke", "location": "us-central1" } }, "timestamp": "2022-10-19T15:05:54.138732321Z", "severity": "INFO", "logName": "projects/atamel-eventarc-gke/logs/cloudaudit.googleapis.com%2Fdata_access", "receiveTimestamp": "2022-10-19T15:05:54.839604461Z" }, "datacontenttype": "application/json; charset=utf-8", "dataschema": "https://googleapis.github.io/google-cloudevents/jsonschema/google/events/cloud/audit/v1/LogEntryData.json", "id": "projects/atamel-eventarc-gke/logs/cloudaudit.googleapis.com%2Fdata_access-8vmrbve7pol21666191954138732", "methodname": "storage.objects.create", "recordedtime": "2022-10-19T15:05:54.138732321Z", "resourcename": "projects/_/buckets/eventarc-gcs-atamel-eventarc-gke/objects/random.txt", "servicename": "storage.googleapis.com", "source": "//cloudaudit.googleapis.com/projects/atamel-eventarc-gke/logs/data_access", "specversion": "1.0", "subject": "storage.googleapis.com/projects/_/buckets/eventarc-gcs-atamel-eventarc-gke/objects/random.txt", "time": "2022-10-19T15:05:54.839604461Z", "type": "google.cloud.audit.log.v1.written" } }
10 ยินดีด้วย
ยินดีด้วยที่ทํา Codelab จนเสร็จสมบูรณ์
สิ่งที่เราได้พูดถึงไปแล้ว
- สร้างคลัสเตอร์ GKE
- สร้างบริการ GKE เป็นแหล่งเก็บข้อมูลเหตุการณ์
- สร้างทริกเกอร์ Pub/Sub
- สร้างทริกเกอร์ Cloud Storage
- สร้างทริกเกอร์บันทึกการตรวจสอบระบบคลาวด์