Lớp học lập trình về Sự kiện cho Cloud Run for Anthos

1. Giới thiệu

6a5cf23c8e20491f.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.

Sự kiện cho Cloud Run for Anthos giúp bạn dễ dàng kết nối các dịch vụ Cloud Run 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ề Sự kiện cho Cloud Run for Anthos. Cụ thể hơn, bạn sẽ nghe về các sự kiện từ Cloud Pub/Sub, Nhật ký kiểm tra, Cloud Storage, Cloud Scheduler và cách tạo/sử dụng các sự kiện tuỳ chỉnh.

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

  • Tầm nhìn dài hạn về sự kiện cho Cloud Run for Anthos
  • Trạng thái hiện tại của sự kiện Cloud Run for Anthos
  • Tạo bồn lưu trữ dữ liệu Cloud Run
  • Tạo trình kích hoạt Sự kiện cho Cloud Pub/Sub
  • Tạo điều kiện kích hoạt Sự kiện cho Nhật ký kiểm tra
  • Tạo trình kích hoạt Sự kiện cho Cloud Storage
  • Tạo trình kích hoạt Sự kiện cho Trình lập lịch biểu đám mây
  • Tạo và sử dụng sự kiện tuỳ chỉnh

2. Tầm nhìn dài hạn

Khi chúng tôi áp dụng kiến trúc không máy chủ, sự kiện trở thành một phần không thể thiếu trong cách giao tiếp của các dịch vụ vi mô tách rời. Sự kiện cho Cloud Run for Anthos biến các sự kiện thành một ứng dụng hàng đầu của sản phẩm Cloud Run for Anthos, để có thể dễ dàng xây dựng các ứng dụng không máy chủ hướng sự kiện.

Sự kiện cho Cloud Run for Anthos cho phép người dùng gửi sự kiện không đồng bộ một cách đáng tin cậy, an toàn và có thể mở rộng từ các nguồn sự kiện được đóng gói hoặc do ứng dụng tạo đến người dùng trên cụm và ngoài cụm.

ce389bcafba6d669.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. Các nguồn đó có thể là Nguồn Knative do người dùng phát triển hoặc bất kỳ ứng dụng nào khác chạy trên cụm có thể tạo ra Sự kiện trên đám mây.

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

Các nguồn sự kiện không thuộc sở hữu của Google hoặc người dùng cuối. Trong đó bao gồm cả những nguồn sự kiện phổ biến như GitHub, SAP, Datadog, PagerTasks, v.v. thuộc quyền sở hữu và duy trì của các nhà cung cấp bên thứ ba, đối tác hoặc cộng đồng OSS.

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.

Sự kiện cho Cloud Run tuân thủ Knative Eventing và cho phép di chuyển các vùng chứa đến và đi từ những cách triển khai khác dựa trên Knative. Điều này mang đến một khung nhất quán, không phụ thuộc vào đám mây để kết nối tuyên bố giữa nhà sản xuất sự kiện với người sử dụng sự kiện.

3. Trạng thái hiện tại

Bản xem trước này là phiên bản đầu tiên cung cấp nhóm chức năng ban đầu về lâu dài.

b1dd0d8a73185b95.png

Để cho phép người dùng xây dựng các ứng dụng không máy chủ hướng sự kiện, trọng tâm ban đầu của chúng tôi là:

  1. Cung cấp một hệ sinh thái Nguồn Google Cloud rộng lớn cho phép các dịch vụ Cloud Run trên cụm Anthos phản ứng với các sự kiện từ các dịch vụ của Google Cloud.
  • Ban đầu, các sự kiện từ Nguồn Google Cloud được phân phối thông qua Nhật ký kiểm tra đám mây (CAL), cho phép nhiều nguồn sự kiện đa dạng. Độ trễ và khả năng cung cấp sự kiện từ các nguồn này gắn liền với dữ liệu của Nhật ký kiểm tra đám mây. Bất cứ khi nào một sự kiện từ nguồn Google Cloud được xuất bản, mục nhập Nhật ký kiểm tra đám mây tương ứng sẽ được tạo.
  • Ngoài Nhật ký kiểm tra Cloud, chúng tôi còn có dịch vụ hỗ trợ hàng đầu để sử dụng các sự kiện từ Cloud Storage, Cloud Pub/Sub và Cloud Scheduler. Chúng tôi sẽ tiếp tục mở rộng hệ sinh thái nguồn này bằng cách bổ sung thêm nhiều nguồn tốt nhất khi tìm hiểu thêm về hành trình và ý kiến phản hồi của người dùng.
  1. Cho phép các ứng dụng và dịch vụ của người dùng cuối phát đi các sự kiện tuỳ chỉnh bằng cách phát hành lên url của Broker cục bộ trong phạm vi không gian tên.

Cơ chế phân phối cơ bản sử dụng các chủ đề và gói thuê bao trên Cloud Pub/Sub mà người dùng có thể nhìn thấy dự án. Do đó, tính năng này cung cấp các đảm bảo phân phối tương tự như Cloud Pub/Sub.

Trình kích hoạt sự kiện cung cấp cách đăng ký các sự kiện để các sự kiện khớp với bộ lọc của trình kích hoạt được phân phối đến đích (hoặc bồn lưu trữ dữ liệu) mà Trình kích hoạt trỏ đến.

Tất cả các sự kiện đều được phân phối ở định dạng Sự kiện trên đám mây v1.0 để có khả năng tương tác trên nhiều dịch vụ.

Chúng tôi sẽ tiếp tục mang lại nhiều giá trị hơn bằng cách lặp đi lặp lại cho đến GA và những nơi khác.

4. 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 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.

96a9c957bc475304.pngS

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

  • Tên dự án là tên hiển thị cho dự án này. Miễn là tuân theo quy ước đặt tên, bạn có thể sử dụng bất kỳ thứ gì bạn muốn và có thể cập nhật thông tin đó 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). Bảng điều khiển Cloud 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.
  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 của Google 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í. Hãy nhớ làm theo mọi hướng dẫn trong phần "Dọn dẹp" sẽ tư vấn cho bạn cách tắt tài nguyên để bạn không phải chịu thanh toán ngoài hướng dẫn này. 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:

bce75f34b2c53987.png

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:

f6ef2b5f13479f3a.png

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.

5. Bật API, đặt vùng và nền tảng

Thiết lập mã dự án và cài đặt các thành phần alpha

Trong Cloud Shell, GOOGLE_CLOUD_PROJECT phải được đặt thành mã dự án. Nếu không, hãy đảm bảo bạn đã đặt mã này và định cấu hình gcloud của mình bằng mã dự án đó:

export GOOGLE_CLOUD_PROJECT=your-project-id
gcloud config set project ${GOOGLE_CLOUD_PROJECT}

Đảm bảo thành phần gcloud cho giai đoạn alpha đã cài đặt:

gcloud components install alpha

Bật API

Bật tất cả dịch vụ cần thiết:

gcloud services enable cloudapis.googleapis.com 
gcloud services enable container.googleapis.com 
gcloud services enable containerregistry.googleapis.com
gcloud services enable cloudbuild.googleapis.com

Thiết lập vùng và nền tảng

Trước khi tạo một cụm GKE bằng sự kiện Cloud Run, hãy đặt tên cụm, khu vực và nền tảng. Ở ví dụ, ở đây chúng ta đặt tên và vùng thành events-clustereurope-west1-b, còn nền tảng là gke,

Trong Cloud Shell:

export CLUSTER_NAME=events-cluster
export CLUSTER_ZONE=europe-west1-b

gcloud config set run/cluster ${CLUSTER_NAME}
gcloud config set run/cluster_location ${CLUSTER_ZONE}
gcloud config set run/platform gke

Bạn có thể kiểm tra để đảm bảo cấu hình đã được thiết lập:

gcloud config list

...
[run]
cluster = events-cluster
cluster_location = europe-west1-b
platform = gke

6. Tạo một cụm GKE bằng sự kiện Cloud Run

Tạo một cụm GKE chạy Kubernetes >= 1.15.9-gke.26, với các tiện ích bổ sung sau đã bật: CloudRun, HttpLoadBalancing, HorizontalPodAutoscaling:

gcloud beta container clusters create ${CLUSTER_NAME} \
  --addons=HttpLoadBalancing,HorizontalPodAutoscaling,CloudRun \
  --machine-type=n1-standard-4 \
  --enable-autoscaling --min-nodes=3 --max-nodes=10 \
  --no-issue-client-certificate --num-nodes=3 --image-type=cos \
  --enable-stackdriver-kubernetes \
  --scopes=cloud-platform,logging-write,monitoring-write,pubsub \
  --zone ${CLUSTER_ZONE} \
  --release-channel=rapid

7. Thiết lập sự kiện Cloud Run (Mặt phẳng điều khiển)

Các sự kiện Cloud Run có Tầng điều khiển và Tầng dữ liệu cần được thiết lập riêng. Cách thiết lập Tầng điều khiển:

Trong Cloud Shell:

gcloud beta events init 

Thao tác này sẽ khởi tạo sự kiện và cũng tạo một số tài khoản dịch vụ cần thiết. Hãy đảm bảo bạn chọn "Có" khi được nhắc tạo tài khoản dịch vụ.

Tại thời điểm này, mặt phẳng điều khiển phải được khởi động đúng cách. Bạn sẽ thấy 4 nhóm có

Trạng thái Running, 2 (controller-xxx-xxxwebhook-xxx-xxx) trong không gian tên cloud-run-events và 2 (eventing-controller-xxx-xxxeventing-webhook-xxx-xxx) trong không gian tên knative-eventing. Bạn có thể kiểm tra bằng cách thực thi các lệnh sau:

kubectl get pods -n cloud-run-events

NAME                         READY   STATUS    RESTARTS   AGE
controller-9cc679b67-2952n   1/1     Running   0          22s
webhook-8576c4cfcb-dhz82     1/1     Running   0          16m
kubectl get pods -n knative-eventing

NAME                                   READY   STATUS    RESTARTS   AGE
eventing-controller-77f46f6cf8-kj9ck   1/1     Running   0          17m
eventing-webhook-5bc787965f-hcmwg      1/1     Running   0          17m

8. Thiết lập sự kiện Cloud Run (Gói dữ liệu)

Tiếp theo là thiết lập vùng dữ liệu trong không gian tên người dùng. Việc này sẽ tạo ra một Nhà môi giới có quyền thích hợp để đọc/ghi từ/vào Pub/Sub.

Bên trong Cloud Shell, hãy đặt một biến môi trường NAMESPACE cho không gian tên mà bạn muốn sử dụng cho các đối tượng của mình. Bạn có thể thiết lập thành default nếu muốn sử dụng không gian tên mặc định như sau:

export NAMESPACE=default

Lưu ý rằng nếu không gian tên được chỉ định không tồn tại (tức là không gian tên không phải là mặc định), bạn cần tạo không gian tên đó:

kubectl create namespace ${NAMESPACE}

Khởi động không gian tên bằng mã bí mật mặc định:

gcloud beta events namespaces init ${NAMESPACE} --copy-default-secret 

Tạo một trình môi giới mặc định trong vùng chứa tên:

gcloud beta events brokers create default --namespace ${NAMESPACE}

Kiểm tra để đảm bảo rằng nhà môi giới đã được tạo. Lưu ý rằng có thể mất vài giây cho đến khi nhà môi giới sẵn sàng:

kubectl get broker -n ${NAMESPACE}

NAME      READY   REASON   URL
default   True             http://default-brokercell-ingress.cloud-run-events.svc.cluster.local/default/default

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

Bạn có thể khám phá các nguồn đã đăng ký là gì, các 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 events types list

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

gcloud beta events types describe google.cloud.pubsub.topic.v1.messagePublished

10. Tạo Cloud Run Sink

Dưới dạng bồn lưu trữ sự kiện, hãy triển khai dịch vụ Cloud Run ghi lại nội dung của CloudEvent mà dịch vụ nhận được.

Bạn có thể sử dụng event_display đã được biên dịch của Knative và tạo hình ảnh vùng chứa của Knative trong bản phát hành Knative. Bạn có thể xem thông tin chi tiết về hình ảnh vùng chứa trong event-display.yaml:

...
containers:
  - image: gcr.io/knative-releases/knative.dev/eventing-contrib/cmd/event_display@sha256:8da2440b62a5c077d9882ed50397730e84d07037b1c8a3e40ff6b89c37332b27

Triển khai lên Cloud Run

Triển khai ứng dụng trong vùng chứa của bạn trên Cloud Run:

export SERVICE_NAME=event-display
gcloud run deploy ${SERVICE_NAME} \
  --namespace=${NAMESPACE} \
  --image gcr.io/knative-releases/knative.dev/eventing-contrib/cmd/event_display@sha256:8da2440b62a5c077d9882ed50397730e84d07037b1c8a3e40ff6b89c37332b27

Khi thành công, dòng lệnh sẽ hiển thị URL dịch vụ. Giờ đây, bạn có thể truy cập vào vùng chứa đã triển khai bằng cách mở URL dịch vụ trong bất kỳ cửa sổ trình duyệt nào.

11. Tạo trình kích hoạt Sự kiện cho Cloud Pub/Sub

Một cách để nhận thông tin sự kiện là thông qua Cloud Pub/Sub. Các ứng dụng tuỳ chỉnh có thể phát hành thông báo lên Cloud Pub/Sub và các tin nhắn này có thể được gửi đến các bồn lưu trữ dữ liệu của Google Cloud Run thông qua phần Sự kiện cho Cloud Run.

Tạo một chủ đề

Trước tiên, hãy tạo một chủ đề trên Cloud Pub/Sub. Bạn có thể thay thế TOPIC_ID bằng một tên chủ đề duy nhất mà mình muốn:

export TOPIC_ID=cr-gke-topic
gcloud pubsub topics create ${TOPIC_ID}

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

Trước khi tạo điều kiện kích hoạt, hãy tìm hiểu thêm thông tin chi tiết về các thông số mà bạn cần để tạo điều kiện kích hoạt cho sự kiện từ Cloud Pub/Sub:

gcloud beta events types describe google.cloud.pubsub.topic.v1.messagePublished

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ủ đề Cloud Pub/Sub sang dịch vụ Cloud Run mà chúng tôi đã triển khai:

gcloud beta events triggers create trigger-pubsub \
  --namespace ${NAMESPACE} \
  --target-service ${SERVICE_NAME} \
  --type google.cloud.pubsub.topic.v1.messagePublished \
  --parameters topic=${TOPIC_ID}

Kiểm thử điều kiện kích hoạt

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 beta events triggers list

Bạn có thể cần phải đợi tối đa 10 phút để tạo điều kiện kích hoạt và bắt đầu lọc sự kiện.

Để mô phỏng một ứng dụng tuỳ chỉnh gửi thông báo, bạn có thể sử dụng gcloud để kích hoạt sự kiện:

gcloud pubsub topics publish ${TOPIC_ID} --message="Hello there"

Bồn lưu trữ Cloud Run mà chúng tôi đã tạo ghi lại phần 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:

9526909a06c6d4f4.pngS

Lưu ý rằng "Xin chào" sẽ được mã hoá base64 như khi được Pub/Sub gửi và bạn sẽ phải giải mã nếu muốn xem thư gốc được gửi đi.

Xoá điều kiện kích hoạt

Nếu muốn, bạn có thể xoá trình kích hoạt sau khi kiểm thử xong.

gcloud beta events triggers delete trigger-pubsub --namespace ${NAMESPACE}

12. Tạo điều kiện kích hoạt Sự kiện cho Nhật ký kiểm tra

Bạn sẽ thiết lập một điều kiện kích hoạt để theo dõi các sự kiện trong Nhật ký kiểm tra. Cụ thể hơn, bạn sẽ tìm các sự kiện tạo chủ đề Pub/Sub trong Nhật ký kiểm tra.

Bật nhật ký kiểm tra

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

97bd4b57c6a05fcc.pngS

Ở phía bên phải, hãy nhớ chọn mục Quản trị, Đọc và Viết. Nhấp vào lưu:

bec31b4f35fbcea.png

Nhật ký kiểm tra kiểm thử

Để tìm hiểu cách xác định các thông số mà bạn cần để thiết lập điều kiện kích hoạt thực tế, hãy thực hiện thao tác thực tế.

Ví dụ: tạo một chủ đề Pub/Sub:

gcloud pubsub topics create cre-gke-topic1

Bây giờ, hãy cùng xem bản cập nhật này đã tạo loại nhật ký kiểm tra nào. Trong Cloud Console, hãy chọn Logging > Logs Viewer trong trình đơn phía trên bên trái.

Trong phần Query Builder,, hãy chọn Cloud Pub/Sub Topic rồi nhấp vào Add:

f5c634057e935bc6.png

Sau khi chạy truy vấn, bạn sẽ thấy nhật ký cho các chủ đề Pub/Sub và một trong các chủ đề đó sẽ là google.pubsub.v1.Publisher.CreateTopic:

b083cce219773d24.png

Hãy lưu ý serviceName, methodNameresourceName. Chúng ta sẽ sử dụng các thông tin này để tạo điều kiện kích hoạt.

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

Bây giờ, bạn đã sẵn sàng tạo một điều kiện kích hoạt sự kiện cho Nhật ký kiểm tra.

Bạn có thể xem thêm thông tin chi tiết về các thông số cần thiết để tạo điều kiện kích hoạt cho sự kiện từ các nguồn Google Cloud bằng cách chạy lệnh sau:

gcloud beta events types describe google.cloud.audit.log.v1.written

Tạo trình kích hoạt bằng bộ lọc phù hợp:

gcloud beta events triggers create trigger-auditlog \
  --namespace ${NAMESPACE} \
  --target-service ${SERVICE_NAME} \
  --type=google.cloud.audit.log.v1.written \
  --parameters serviceName=pubsub.googleapis.com \
  --parameters methodName=google.pubsub.v1.Publisher.CreateTopic

Kiểm thử điều kiện kích hoạt

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 beta events triggers list

Chờ tối đa 10 phút để phổ biến quy trình tạo điều kiện kích hoạt và chờ tối đa 10 phút để bắt đầu lọc sự kiện. Khi đã sẵn sàng, tính năng này sẽ lọc các sự kiện tạo và gửi các sự kiện đó đến dịch vụ. Giờ bạn đã sẵn sàng kích hoạt một sự kiện.

Tạo một chủ đề Pub/Sub khác, như bạn đã làm trước đó:

gcloud pubsub topics create cre-gke-topic2

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:

aff3b2e7ad05c75d.png

Xoá điều kiện kích hoạt và chủ đề

Nếu muốn, bạn có thể xoá trình kích hoạt sau khi kiểm thử xong:

gcloud beta events triggers delete trigger-auditlog

Đồng thời xoá các chủ đề:

gcloud pubsub topics delete cre-gke-topic1 cre-gke-topic2

13. Tạo trình kích hoạt Sự kiện cho Cloud Storage

Bạn sẽ thiết lập một điều kiện kích hoạt để theo dõi các sự kiện từ Cloud Storage.

Tạo bộ chứa

Trước tiên, hãy tạo một bộ chứa Cloud Storage trong cùng khu vực với dịch vụ Cloud Run mà bạn đã triển khai. Bạn có thể thay thế BUCKET_NAME bằng một tên duy nhất mà mình muốn:

export BUCKET_NAME=[new bucket name]
export REGION=europe-west1

gsutil mb -p $(gcloud config get-value project) \
  -l $REGION \
  gs://$BUCKET_NAME/

Thiết lập quyền trên Cloud Storage

Trước khi tạo điều kiện kích hoạt, bạn cần cấp cho tài khoản dịch vụ mặc định của Cloud Storage quyền xuất bản lên Pub/Sub.

Trước tiên, bạn cần tìm Tài khoản dịch vụ mà Cloud Storage dùng để phát hành lên Pub/Sub. Bạn có thể làm theo các bước trong bài viết Tải tài khoản dịch vụ Cloud Storage để lấy tài khoản dịch vụ hoặc dùng lệnh sau:

curl -X GET -H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://storage.googleapis.com/storage/v1/projects/$(gcloud config get-value project)/serviceAccount"

Tài khoản dịch vụ sẽ được liệt kê trong email_address.

Giả sử tài khoản dịch vụ mà bạn tìm thấy ở trên là service-XYZ@gs-project-accounts.iam.gserviceaccount.com, đặt giá trị này thành một biến môi trường:

export GCS_SERVICE_ACCOUNT=service-XYZ@gs-project-accounts.iam.gserviceaccount.com

Sau đó, cấp quyền cho Tài khoản dịch vụ đó để xuất bản lên Pub/Sub:

gcloud projects add-iam-policy-binding ${GOOGLE_CLOUD_PROJECT} \
  --member=serviceAccount:${GCS_SERVICE_ACCOUNT} \
  --role roles/pubsub.publisher

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

Bây giờ, bạn đã sẵn sàng tạo trình kích hoạt sự kiện cho các sự kiện trên Cloud Storage.

Bạn có thể xem thêm thông tin chi tiết về các tham số cần thiết để tạo trình kích hoạt:

gcloud beta events types describe google.cloud.storage.object.v1.finalized

Tạo trình kích hoạt bằng bộ lọc phù hợp:

gcloud beta events triggers create trigger-storage \
  --namespace ${NAMESPACE} \
  --target-service ${SERVICE_NAME} \
  --type=google.cloud.storage.object.v1.finalized \
  --parameters bucket=${BUCKET_NAME}

Kiểm thử điều kiện kích hoạt

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 beta events triggers list

Chờ tối đa 10 phút để phổ biến quy trình tạo điều kiện kích hoạt và chờ tối đa 10 phút để bắt đầu lọc sự kiện. Khi đã sẵn sàng, tính năng này sẽ lọc các sự kiện tạo và gửi các sự kiện đó đến dịch vụ.

Giờ bạn đã sẵn sàng kích hoạt một sự kiện.

Tải một tệp ngẫu nhiên 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:

aff3b2e7ad05c75d.png

Xoá điều kiện kích hoạt

Nếu muốn, bạn có thể xoá trình kích hoạt sau khi kiểm thử xong:

gcloud beta events triggers delete trigger-storage

14. Tạo trình kích hoạt Sự kiện cho Trình lập lịch biểu đám mây

Bạn sẽ thiết lập một điều kiện kích hoạt để theo dõi các sự kiện từ Cloud Scheduler.

Tạo một ứng dụng App Engine

Cloud Scheduler hiện cần người dùng tạo một ứng dụng App Engine. Chọn App Engine Location và tạo ứng dụng:

export APP_ENGINE_LOCATION=europe-west
gcloud app create --region=${APP_ENGINE_LOCATION}

Tạo trình kích hoạt

Bạn có thể xem thêm thông tin chi tiết về các thông số cần thiết để tạo điều kiện kích hoạt cho sự kiện từ các nguồn Google Cloud bằng cách chạy lệnh sau:

gcloud beta events types describe google.cloud.scheduler.job.v1.executed

Chọn một vị trí Trình lập lịch biểu trên đám mây để tạo trình lập lịch biểu:

export SCHEDULER_LOCATION=europe-west1

Tạo một Trình kích hoạt sẽ tạo công việc được thực thi mỗi phút trong Trình lập lịch biểu của Google Cloud và gọi dịch vụ mục tiêu:

gcloud beta events triggers create trigger-scheduler \
  --namespace ${NAMESPACE} \
  --target-service=${SERVICE_NAME} \
  --type=google.cloud.scheduler.job.v1.executed \
  --parameters location=${SCHEDULER_LOCATION} \
  --parameters schedule="* * * * *" \
  --parameters data="trigger-scheduler-data"

Kiểm thử điều kiện kích hoạt

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 beta events triggers list

Chờ tối đa 10 phút để phổ biến quy trình tạo điều kiện kích hoạt và chờ tối đa 10 phút để bắt đầu lọc sự kiện. Khi đã sẵn sàng, tính năng này sẽ lọc các sự kiện tạo và gửi các sự kiện đó đến dịch vụ.

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.

Xoá điều kiện kích hoạt

Nếu muốn, bạn có thể xoá trình kích hoạt sau khi kiểm thử xong:

gcloud beta events triggers delete trigger-scheduler

15. Sự kiện tuỳ chỉnh (Điểm cuối của người môi giới)

Trong phần này của lớp học lập trình, bạn sẽ tạo và sử dụng các sự kiện tuỳ chỉnh bằng Trình môi giới.

Tạo nhóm Curl để tạo sự kiện

Sự kiện thường được tạo theo phương thức lập trình. Tuy nhiên, trong bước này, bạn sẽ sử dụng curl để gửi từng sự kiện riêng lẻ theo cách thủ công và xem cách người tiêu dùng phù hợp tiếp nhận những sự kiện này.

Để tạo một Nhóm đóng vai trò là trình tạo sự kiện, hãy chạy lệnh sau:

cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Pod
metadata:
  labels:
    run: curl
  name: curl
  namespace: $NAMESPACE
spec:
  containers:
  - image: radial/busyboxplus:curl
    imagePullPolicy: IfNotPresent
    name: curl
    resources: {}
    stdin: true
    terminationMessagePath: /dev/termination-log
    terminationMessagePolicy: File
    tty: true
EOF

Xác minh rằng Pod curl đang hoạt động đúng cách. Bạn sẽ thấy một nhóm có tên curl với Status=Running:

kubectl get pod curl -n ${NAMESPACE}

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

Bạn sẽ tạo một Trình kích hoạt có bộ lọc theo loại CloudEvents cụ thể (trong trường hợp này là alpha-type) mà bạn sẽ phát. Xin lưu ý rằng tính năng lọc kiểu khớp chính xác trên số lượng thuộc tính CloudEvents cũng như phần mở rộng đều được hỗ trợ. Nếu bộ lọc của bạn đặt nhiều thuộc tính, thì một sự kiện phải có tất cả các thuộc tính thì Trình kích hoạt mới có thể lọc sự kiện đó. Ngược lại, nếu bạn không chỉ định bộ lọc, tất cả sự kiện sẽ được nhận trong Dịch vụ của bạn.

Tạo trình kích hoạt:

gcloud beta events triggers create trigger-custom \
  --namespace ${NAMESPACE} \
  --target-service ${SERVICE_NAME} \
  --type=alpha-type \
  --custom-type

Kiểm thử điều kiện kích hoạt

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 beta events triggers list

Tạo sự kiện bằng cách gửi yêu cầu HTTP đến Trình môi giới. Tự nhắc chính mình về URL của người môi giới bằng cách chạy như sau:

kubectl get brokers -n ${NAMESPACE}

NAME      READY   REASON   URL
default   True             http://default-broker.<NAMESPACE>.svc.cluster.local

SSH vào nhóm curl mà bạn đã tạo trước đó:

kubectl --namespace ${NAMESPACE} attach curl -it

Bạn đã tạo SSH vào nhóm và hiện có thể tạo yêu cầu HTTP. Lời nhắc tương tự như lời nhắc bên dưới sẽ xuất hiện:

Defaulting container name to curl.
Use 'kubectl describe pod/curl -n default' to see all of the containers in this pod.
If you don't see a command prompt, try pressing enter.
[ root@curl:/ ]$

Tạo sự kiện:

curl -v "<BROKER-URL>" \
-X POST \
-H "Ce-Id: my-id" \
-H "Ce-Specversion: 1.0" \
-H "Ce-Type: alpha-type" \
-H "Ce-Source: my-source" \
-H "Content-Type: application/json" \
-d '{"msg":"send-cloudevents-to-broker"}'

Nếu sự kiện đã được nhận, bạn sẽ nhận được phản hồi HTTP 202 Accepted. Thoát phiên SSH với Ctrl + D

Xác minh rằng sự kiện đã đăng được gửi bằng cách xem nhật ký của Dịch vụ Cloud Run:

kubectl logs --selector serving.knative.dev/service=$SERVICE_NAME \
 -c user-container -n $NAMESPACE --tail=100

Xoá điều kiện kích hoạt

Nếu muốn, bạn có thể xoá trình kích hoạt sau khi kiểm thử xong:

gcloud beta events triggers delete trigger-custom

16. 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 dài hạn về sự kiện cho Cloud Run for Anthos
  • Trạng thái hiện tại của sự kiện Cloud Run for Anthos
  • Tạo bồn lưu trữ dữ liệu Cloud Run
  • Tạo trình kích hoạt Sự kiện cho Cloud Pub/Sub
  • Tạo điều kiện kích hoạt Sự kiện cho Nhật ký kiểm tra
  • Tạo trình kích hoạt Sự kiện cho Cloud Storage
  • Tạo trình kích hoạt Sự kiện cho Trình lập lịch biểu đám mây
  • Tạo và sử dụng sự kiện tuỳ chỉnh