Kích hoạt Cloud Run bằng các sự kiện Eventarc

1. Giới thiệu

894762ebb681671c.png.

Cloud Run cho phép bạn chạy các vùng chứa không có trạng thái trong môi trường được quản lý hoàn toàn. Giải pháp này được xây dựng dựa trên nguồn mở Knative, cho phép bạn chọn chạy các vùng chứa được quản lý hoàn toàn bằng Cloud Run, hoặc trong cụm Google Kubernetes Engine bằng Cloud Run for Anthos.

cb762f29e9183a3f.png

Eventarc giúp bạn dễ dàng kết nối nhiều dịch vụ (Cloud Run, Cloud Functions, Workfklows) với các sự kiện từ nhiều nguồn. API này cho phép bạn xây dựng các kiến trúc dựa trên sự kiện, trong đó các dịch vụ vi mô được kết nối và phân phối lỏng lẻo. Phiên bản này cũng đảm nhận việc nhập, phân phối, bảo mật, uỷ quyền và xử lý lỗi sự kiện cho bạn, từ đó cải thiện tính linh hoạt của nhà phát triển cũng như khả năng phục hồi của ứng dụng.

Trong lớp học lập trình này, bạn sẽ tìm hiểu về Eventarc. Cụ thể hơn, bạn sẽ nghe các sự kiện từ Pub/Sub, Cloud Storage và Nhật ký kiểm tra đám mây bằng Eventarc, đồng thời chuyển các sự kiện đó sang một dịch vụ Cloud Run.

Kiến thức bạn sẽ học được

  • Tầm nhìn của Eventarc
  • Khám phá các sự kiện trong Eventarc
  • Tạo bồn lưu trữ dữ liệu Cloud Run
  • Tạo điều kiện kích hoạt cho Pub/Sub
  • Tạo một điều kiện kích hoạt cho Cloud Storage
  • Tạo điều kiện kích hoạt cho Nhật ký kiểm tra đám mây
  • Khám phá giao diện người dùng Eventarc

2. Tầm nhìn của Eventarc

Mục tiêu của Eventarc là cung cấp các sự kiện từ nhiều nguồn sự kiện của Google, Google Cloud và bên thứ ba tới các điểm đến của sự kiện trên Google Cloud.

59b147dc030b2b0b.png.

Nguồn Google Cloud

Nguồn sự kiện là sản phẩm do Google Cloud sở hữu

Các nguồn trên Google

Nguồn sự kiện là các sản phẩm của Google, chẳng hạn như Gmail, Hangouts, Quản lý Android và nhiều sản phẩm khác

Nguồn tuỳ chỉnh

Nguồn sự kiện không phải là sản phẩm của Google và do người dùng cuối tự tạo

Nguồn của bên thứ ba

Những nguồn sự kiện không phải do Google sở hữu hoặc do khách hàng sản xuất. Trong đó bao gồm các nguồn sự kiện phổ biến như Check Point CloudGuard, Datadog, ForgeRock, Lacework, v.v. do các nhà cung cấp và đối tác bên thứ ba sở hữu và duy trì.

Các sự kiện được chuẩn hoá thành định dạng CloudEvents v1.0 để có khả năng tương tác trên nhiều dịch vụ. CloudEvents là một thông số kỹ thuật mở trung lập với nhà cung cấp, mô tả dữ liệu sự kiện ở các định dạng phổ biến, cho phép khả năng tương tác trên các dịch vụ, nền tảng và hệ thống.

3. Thiết lập và yêu cầu

Thiết lập môi trường theo tiến độ riêng

  1. Đăng nhập vào Google Cloud Console rồi tạo dự án mới hoặc sử dụng lại dự án hiện có. Nếu chưa có tài khoản Gmail hoặc Google Workspace, bạn phải tạo một tài khoản.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • Tên dự án là tên hiển thị của những người tham gia dự án này. Đây là một chuỗi ký tự không được API của Google sử dụng và bạn có thể cập nhật chuỗi này bất cứ lúc nào.
  • Mã dự án phải là duy nhất trong tất cả các dự án Google Cloud và không thể thay đổi (không thể thay đổi sau khi đã đặt). Cloud Console sẽ tự động tạo một chuỗi duy nhất; thường bạn không quan tâm đến sản phẩm đó là gì. Trong hầu hết các lớp học lập trình, bạn sẽ cần tham chiếu đến Mã dự án (và mã này thường được xác định là PROJECT_ID). Vì vậy, nếu không thích, bạn có thể tạo một mã ngẫu nhiên khác hoặc bạn có thể thử mã của riêng mình để xem có mã này chưa. Sau đó, video sẽ được "đóng băng" sau khi tạo dự án.
  • Có giá trị thứ ba là Project Number (Số dự án) mà một số API sử dụng. Tìm hiểu thêm về cả ba giá trị này trong tài liệu này.
  1. Tiếp theo, bạn sẽ cần bật tính năng thanh toán trong Cloud Console để sử dụng tài nguyên/API trên Cloud. Việc chạy qua lớp học lập trình này sẽ không tốn nhiều chi phí. Để tắt các tài nguyên để bạn không phải chịu thanh toán ngoài hướng dẫn này, hãy làm theo mọi thao tác "dọn dẹp" hướng dẫn ở cuối lớp học lập trình. Người dùng mới của Google Cloud đủ điều kiện tham gia chương trình Dùng thử miễn phí 300 USD.

Khởi động Cloud Shell

Mặc dù bạn có thể vận hành Google Cloud từ xa trên máy tính xách tay, nhưng trong lớp học lập trình này, bạn sẽ sử dụng Google Cloud Shell, một môi trường dòng lệnh chạy trong Đám mây.

Trong Bảng điều khiển GCP, hãy nhấp vào biểu tượng Cloud Shell ở thanh công cụ trên cùng bên phải:

55efc1aaa7a4d3ad.pngS

Sẽ chỉ mất một chút thời gian để cấp phép và kết nối với môi trường. Sau khi hoàn tất, bạn sẽ thấy như sau:

7ffe5cbb04455448.pngS

Máy ảo này chứa tất cả các công cụ phát triển mà bạn cần. Phiên bản này cung cấp thư mục gốc có dung lượng ổn định 5 GB và chạy trên Google Cloud, giúp nâng cao đáng kể hiệu suất và khả năng xác thực của mạng. Bạn có thể thực hiện tất cả công việc trong phòng thí nghiệm này chỉ bằng một trình duyệt.

Trước khi bắt đầu

Bên trong Cloud Shell, hãy đảm bảo bạn đã thiết lập mã dự án:

PROJECT_ID=your-project-id
gcloud config set project $PROJECT_ID

4. Triển khai dịch vụ Cloud Run

Triển khai dịch vụ Cloud Run để nhận các sự kiện. Bạn sẽ triển khai vùng chứa Hello của Cloud Run để ghi lại nội dung của CloudEvents.

Trước tiên, hãy bật các dịch vụ bắt buộc cho Cloud Run:

gcloud services enable run.googleapis.com

Triển khai vùng chứa Hello vào Cloud Run:

REGION=us-central1
SERVICE_NAME=hello

gcloud run deploy $SERVICE_NAME \
  --allow-unauthenticated \
  --image=gcr.io/cloudrun/hello \
  --region=$REGION

Khi thành công, dòng lệnh sẽ hiển thị URL dịch vụ. Bạn có thể mở URL dịch vụ trong bất kỳ cửa sổ trình duyệt nào để kiểm tra kỹ xem dịch vụ hiện đã được triển khai hay chưa.

5. Khám phá sự kiện

Trước khi tạo điều kiện kích hoạt trong Eventarc, bạn có thể tìm hiểu nguồn sự kiện là gì, loại sự kiện mà chúng có thể phát và cách định cấu hình điều kiện kích hoạt để sử dụng chúng.

Cách xem danh sách các loại sự kiện:

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.

Cách biết thêm thông tin về từng loại sự kiện:

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

Cách xem danh sách các dịch vụ phát ra một loại sự kiện nhất định:

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

Cách xem danh sách tên phương thức (sự kiện phụ) mà mỗi dịch vụ có thể phát đi:

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. Tạo điều kiện kích hoạt Pub/Sub

Một cách để nhận thông tin sự kiện là thông qua Cloud Pub/Sub. Mọi ứng dụng đều có thể xuất bản thông báo lên Pub/Sub và các thông báo này có thể được gửi đến Cloud Run thông qua Eventarc.

Thiết lập

Trước khi tạo bất kỳ trình kích hoạt nào, hãy bật các dịch vụ bắt buộc cho Eventarc:

gcloud services enable eventarc.googleapis.com

Bạn cũng cần có một tài khoản dịch vụ để điều kiện kích hoạt sử dụng. Tạo tài khoản dịch vụ:

SERVICE_ACCOUNT=eventarc-trigger-sa

gcloud iam service-accounts create $SERVICE_ACCOUNT

Tạo

Tạo một điều kiện kích hoạt để lọc các sự kiện được xuất bản theo chủ đề Pub/Sub thành dịch vụ Cloud Run mà chúng tôi đã triển khai:

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

Thử nghiệm

Trình kích hoạt Pub/Sub tạo một chủ đề theo bìa sách. Hãy cùng tìm hiểu và gán cho một biến:

TOPIC_ID=$(gcloud eventarc triggers describe $TRIGGER_NAME --location $REGION --format='value(transport.pubsub.topic)')

Sử dụng gcloud để đăng một thông báo về chủ đề:

gcloud pubsub topics publish $TOPIC_ID --message="Hello World"

Dịch vụ Cloud Run ghi lại nội dung của thư đến. Bạn có thể xem thông tin này trong phần Nhật ký của phiên bản Cloud Run:

69e0177e04a0d1af.png.

Tạo bằng một chủ đề Pub/Sub hiện có

Theo mặc định, khi bạn tạo một điều kiện kích hoạt Pub/Sub, Eventarc sẽ tạo một chủ đề trong bìa sách để bạn dùng làm chủ đề truyền tải giữa ứng dụng và dịch vụ Cloud Run. Điều này rất hữu ích để dễ dàng và nhanh chóng tạo trình kích hoạt được Pub/Sub hỗ trợ nhưng đôi khi bạn có thể muốn sử dụng chủ đề hiện có. Eventarc cho phép bạn chỉ định một chủ đề Pub/Sub hiện có trong cùng một dự án bằng cờ gcloud --transport-topic.

Để xem cách hoạt động của quy trình này, hãy tạo một chủ đề Pub/Sub để dùng làm chủ đề về phương tiện giao thông:

TOPIC_ID=eventarc-topic

gcloud pubsub topics create $TOPIC_ID

Tạo một điều kiện kích hoạt:

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

Bạn có thể kiểm tra điều kiện kích hoạt bằng cách gửi một tin nhắn đến chủ đề:

gcloud pubsub topics publish $TOPIC_ID --message="Hello again"

7. Tạo điều kiện kích hoạt Cloud Storage

Ở bước này, bạn sẽ tạo một điều kiện kích hoạt để theo dõi các sự kiện từ Cloud Storage.

Thiết lập

Trước tiên, hãy tạo một bộ chứa để nhận sự kiện từ:

BUCKET_NAME=eventarc-gcs-$PROJECT_ID

gsutil mb -l $REGION gs://$BUCKET_NAME

Cấp vai trò eventarc.eventReceiver để bạn có thể sử dụng tài khoản dịch vụ trong trình kích hoạt Cloud Storage:

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --role roles/eventarc.eventReceiver \
  --member serviceAccount:$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com

Bạn cũng cần thêm vai trò pubsub.publisher vào tài khoản dịch vụ Cloud Storage cho các điều kiện kích hoạt trong 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

Tạo

Tạo một điều kiện kích hoạt để định tuyến sự kiện tạo tệp mới từ bộ chứa đến dịch vụ của bạn:

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

Thử nghiệm

Liệt kê tất cả điều kiện kích hoạt để xác nhận đã tạo điều kiện kích hoạt thành công:

gcloud eventarc triggers list

Tải tệp lên bộ chứa Cloud Storage:

echo "Hello World" > random.txt
gsutil cp random.txt gs://$BUCKET_NAME/random.txt

Nếu kiểm tra nhật ký của dịch vụ Cloud Run trong Cloud Console, bạn sẽ thấy sự kiện đã nhận:

904cfc93bb8e8df1.png.

8. Tạo điều kiện kích hoạt Nhật ký kiểm tra đám mây

Mặc dù điều kiện kích hoạt Cloud Storage là cách tốt hơn để theo dõi các sự kiện Cloud Storage, nhưng trong bước này, bạn sẽ tạo một điều kiện kích hoạt Nhật ký kiểm tra Cloud để thực hiện tương tự.

Thiết lập

Để nhận sự kiện từ một dịch vụ, bạn cần bật Nhật ký kiểm tra đám mây. Trong Cloud Console, hãy chọn IAM & AdminAudit Logs trong trình đơn phía trên bên trái. Trong danh sách dịch vụ, hãy đánh dấu Google Cloud Storage:

3c654597faed237c.png.

Ở phía bên phải, hãy nhớ chọn Admin, ReadWrite rồi nhấp vào Save:

1deb3ad78f11dd5f.png.

Tạo

Tạo một điều kiện kích hoạt để định tuyến sự kiện tạo tệp mới từ bộ chứa đến dịch vụ của bạn:

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

Thử nghiệm

Quá trình khởi chạy trình kích hoạt Nhật ký kiểm tra cần một chút thời gian. Bạn có thể kiểm tra xem trình kích hoạt có được tạo hay không bằng cách liệt kê tất cả các trình kích hoạt:

gcloud eventarc triggers list

Bạn sẽ thấy trường ACTIVEYes:

NAME                          TYPE                                       DESTINATION               ACTIVE
trigger-auditlog-storage  google.cloud.audit.log.v1.written              Cloud Run service: hello  Yes

Tải cùng một tệp lên bộ chứa Cloud Storage như bạn đã làm trước đó:

gsutil cp random.txt gs://$BUCKET_NAME/random.txt

Nếu kiểm tra nhật ký của dịch vụ Cloud Run trong Cloud Console, bạn sẽ thấy sự kiện đã nhận:

7be7859bcc8976f8.png.

9. Khám phá giao diện người dùng Eventarc

Trong bước này, bạn sẽ khám phá giao diện người dùng Eventarc trong Google Cloud Console. Trong giao diện người dùng Eventarc, bạn có thể xem thông tin tổng quan về tất cả các điều kiện kích hoạt, chỉnh sửa và xoá các điều kiện kích hoạt đó, cũng như tạo các điều kiện kích hoạt mới trong Google Cloud Console.

Chuyển đến phần Eventarc của Google Cloud:

81e139f17e0d29bf.pngS

Bạn sẽ thấy danh sách các trình kích hoạt mà bạn đã tạo trước đó:

3240c7c830398718.pngS

Nếu nhấp vào một điều kiện kích hoạt, bạn có thể xem thông tin chi tiết, chỉnh sửa hoặc xoá điều kiện kích hoạt đó:

b4d8bbc6601a8b9e.png

Bạn cũng có thể tạo một điều kiện kích hoạt mới bằng cách chọn Create trigger rồi điền thông tin chi tiết về điều kiện kích hoạt đó:

3ee290ec72f130d5.pngS

10. Xin chúc mừng!

Chúc mừng bạn đã hoàn thành lớp học lập trình.

Nội dung đã đề cập

  • Tầm nhìn của Eventarc
  • Khám phá các sự kiện trong Eventarc
  • Tạo bồn lưu trữ dữ liệu Cloud Run
  • Tạo điều kiện kích hoạt cho Pub/Sub
  • Tạo một điều kiện kích hoạt cho Cloud Storage
  • Tạo điều kiện kích hoạt cho Nhật ký kiểm tra đám mây
  • Khám phá giao diện người dùng Eventarc