ทริกเกอร์ Cloud Run ด้วยเหตุการณ์ Eventarc

1. บทนำ

894762ebb681671c.png

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

cb762f29e9183a3f.png

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

59b147dc030b2b0b.png

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

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

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

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

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

แหล่งที่มาของเหตุการณ์ที่ไม่ใช่ผลิตภัณฑ์ที่ Google เป็นเจ้าของและสร้างโดยผู้ใช้ปลายทางเอง

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

แหล่งที่มาของเหตุการณ์ที่ Google ไม่ได้เป็นเจ้าของและไม่ได้สร้างขึ้นโดยลูกค้า ซึ่งรวมถึงแหล่งที่มาของเหตุการณ์ยอดนิยม เช่น Check Point CloudGuard, Datadog, ForgeRock, Lacework ฯลฯ ที่ผู้ให้บริการและพาร์ทเนอร์บุคคลที่สามเป็นเจ้าของและดูแล

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

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

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

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

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

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

เริ่มต้น Cloud Shell

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

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

55efc1aaa7a4d3ad.png

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

7ffe5cbb04455448.png

เครื่องเสมือนนี้เต็มไปด้วยเครื่องมือการพัฒนาทั้งหมดที่คุณต้องการ โดยมีไดเรกทอรีหลักขนาด 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 ดังนี้

69e0177e04a0d1af.png

สร้างด้วยหัวข้อ 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 คุณควรเห็นเหตุการณ์ที่ได้รับดังนี้

904cfc93bb8e8df1.png

8. สร้างทริกเกอร์บันทึกการตรวจสอบระบบคลาวด์

แม้ว่าทริกเกอร์ Cloud Storage จะเป็นวิธีที่ดีกว่าในการเฝ้าติดตามเหตุการณ์ Cloud Storage แต่ในขั้นตอนนี้คุณจะต้องสร้างทริกเกอร์ของบันทึก Cloud Audit เพื่อทำเช่นนั้น

ตั้งค่า

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

3c654597faed237c.png

ที่ด้านขวามือ ตรวจดูว่าได้เลือก Admin, Read และ Write แล้ว จากนั้นคลิก Save

1deb3ad78f11dd5f.png

สร้าง

สร้างทริกเกอร์เพื่อกำหนดเส้นทางเหตุการณ์การสร้างไฟล์ใหม่จากที่เก็บข้อมูลไปยังบริการของคุณดังนี้

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 คุณควรเห็นเหตุการณ์ที่ได้รับดังนี้

7be7859bcc8976f8.png

9. สำรวจ UI ของ Eventarc

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

ไปที่ส่วน Eventarc ของ Google Cloud แล้วทำดังนี้

81e139f17e0d29bf.png

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

3240c7c830398718.png

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

b4d8bbc6601a8b9e.png

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

3ee290ec72f130d5.png

10. ยินดีด้วย

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

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

  • วิสัยทัศน์ของ Eventarc
  • สำรวจกิจกรรมใน Eventarc
  • สร้างซิงก์ Cloud Run
  • สร้างทริกเกอร์สำหรับ Pub/Sub
  • สร้างทริกเกอร์สำหรับ Cloud Storage
  • สร้างทริกเกอร์สำหรับบันทึกการตรวจสอบระบบคลาวด์
  • สำรวจ UI ของ Eventarc