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

1. บทนำ

894762ebb681671c.png

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

cb762f29e9183a3f.png

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

59b147dc030b2b0b.png

แหล่งข้อมูลของ Google Cloud

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

แหล่งข้อมูลของ Google

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

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

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

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

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

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

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 ของ Cloud การทำตาม Codelab นี้ไม่ควรมีค่าใช้จ่ายมากนัก หรืออาจไม่มีเลย หากต้องการปิดแหล่งข้อมูลเพื่อไม่ให้มีการเรียกเก็บเงินนอกเหนือจากบทแนะนำนี้ ให้ทำตามวิธีการ "ล้างข้อมูล" ที่ตอนท้ายของ Codelab ผู้ใช้ Google Cloud รายใหม่มีสิทธิ์เข้าร่วมโปรแกรมช่วงทดลองใช้ฟรีมูลค่า$300 USD

เริ่มต้น Cloud Shell

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

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

55efc1aaa7a4d3ad.png

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

7ffe5cbb04455448.png

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

69e0177e04a0d1af.png

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

904cfc93bb8e8df1.png

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

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

ตั้งค่า

หากต้องการรับเหตุการณ์จากบริการ คุณต้องเปิดใช้บันทึกการตรวจสอบ Cloud จาก Cloud Console ให้เลือก IAM & Admin และ Audit Logs จากเมนูด้านซ้ายบน ในรายการบริการ ให้ตรวจสอบ 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

อัปโหลดไฟล์เดียวกันไปยัง Bucket ของ 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
  • สร้างทริกเกอร์สำหรับบันทึกการตรวจสอบ Cloud
  • สำรวจ UI ของ Eventarc