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 trạng thái trong một môi trường được quản lý hoàn toàn. Dịch vụ này được xây dựng dựa trên Knative nguồn mở, 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.

Events for 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. Nền tảng này cho phép bạn xây dựng các cấu trúc hướng sự kiện, trong đó các vi dịch vụ được liên kết lỏng lẻo và phân tán. Nền tảng này cũng xử lý việc tiếp nhận, phân phối, bảo mật, uỷ quyền và xử lý lỗi cho bạn, giúp cải thiện tính linh hoạt của nhà phát triển và 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 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 Events for Cloud Run for Anthos
  • Tạo một đích nhận Cloud Run
  • Tạo một Trình kích hoạt sự kiện cho Cloud Pub/Sub
  • Tạo một điều kiện kích hoạt Sự kiện cho Nhật ký kiểm tra
  • Tạo một Trình kích hoạt sự kiện cho Cloud Storage
  • Tạo một trình kích hoạt Sự kiện cho Cloud Scheduler
  • Tạo và sử dụng sự kiện tuỳ chỉnh

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

Khi chúng ta áp dụng cấu trúc phi máy chủ, các sự kiện trở thành một phần không thể thiếu trong cách các vi dịch vụ tách rời giao tiếp. Events for Cloud Run for Anthos giúp sự kiện trở thành một đối tượng hạng nhất trong dịch vụ Cloud Run for Anthos, nhờ đó, bạn có thể dễ dàng tạo các ứng dụng phi máy chủ dựa trên sự kiện.

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

ce389bcafba6d669.png

Các nguồn của Google Cloud

Các nguồn sự kiện là sản phẩm thuộc sở hữu của Google Cloud

Nguồn của Google

Các nguồn sự kiện là những sản phẩm thuộc sở hữu của Google, chẳng hạn như Gmail, Hangouts, Android Management 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 chính người dùng cuối tạo. Đây 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 đang chạy trên cụm có thể tạo ra một Cloud Event.

Nguồn bên thứ ba

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

Các sự kiện được chuẩn hoá theo định dạng CloudEvents v1.0 để có khả năng tương tác giữa các dịch vụ. CloudEvents là một quy cách mở, không phụ thuộc vào 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 giữa các dịch vụ, nền tảng và hệ thống.

Events for Cloud Run tuân thủ Knative Eventing và cho phép khả năng có thể di chuyển các vùng chứa đến và đi từ các triển khai khác dựa trên Knative. Điều này cung cấp một khung nhất quán, độc lập với đám mây để kết nối một cách khai báo các nhà sản xuất sự kiện với người tiêu dùng sự kiện.

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

Bản dùng thử này là phiên bản đầu tiên cung cấp một bộ chức năng ban đầu trong dài hạn.

b1dd0d8a73185b95.png

Để cho phép người dùng tạo các ứng dụng không máy chủ dựa trên sự kiện, chúng tôi tập trung vào 2 khía cạnh ban đầu:

  1. Cung cấp một hệ sinh thái rộng lớn gồm các Nguồn của Google Cloud, 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 trên đám mây (CAL), cho phép nhiều nguồn sự kiện. Độ trễ và tính sẵn có của việc gửi sự kiện từ những nguồn này sẽ phụ thuộc vào độ trễ và tính sẵn có của Nhật ký kiểm tra trên đá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ột mục nhập Nhật ký kiểm tra trên đám mây tương ứng sẽ được tạo.
  • Cùng với Nhật ký kiểm tra của Cloud, có dịch vụ hỗ trợ hạng nhất để 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 các nguồn chất lượng cao 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 ra các sự kiện tuỳ chỉnh bằng cách xuất bản vào URL Broker cục bộ theo cụm trong 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 Cloud Pub/Sub xuất hiện trong các dự án của khách hàng. Do đó, tính năng này đảm bảo việc phân phối giống như Cloud Pub/Sub.

Điều kiện kích hoạt sự kiện cung cấp một cách để đăng ký các sự kiện sao cho các sự kiện khớp với bộ lọc điều kiện kích hoạt được gửi đến đích đến (hoặc bồn lưu trữ dữ liệu) mà Điều kiện kích hoạt trỏ đến.

Tất cả sự kiện đều được phân phối ở định dạng Cloud Events v1.0 để có khả năng tương tác giữa các dịch vụ.

Chúng tôi sẽ tiếp tục mang đến nhiều giá trị hơn theo cách lặp đi lặp lại cho đến khi đạt được trạng thái ổn định và sau đó.

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

Thiết lập môi trường theo tốc độ của riêng bạn

  1. Đăng nhập vào Cloud Console rồi tạo một dự án mới hoặc sử dụng lại một 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.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

  • Tên dự án là tên hiển thị của bạn cho dự án này. Miễn là tuân thủ quy ước đặt tên, bạn có thể sử dụng bất kỳ tên nào bạn muốn và có thể cập nhật tên đó bất cứ lúc nào.
  • Mã dự án phải là duy nhất trên tất cả các dự án trên Google Cloud và không thể thay đổi (bạn 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 thì bạn không cần quan tâm đến chuỗi này. 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 (thường được xác định là PROJECT_ID). Vì vậy, nếu không thích mã này, bạn có thể tạo một mã ngẫu nhiên khác hoặc thử mã của riêng mình để xem mã đó có dùng được hay không. Sau đó, tên này sẽ "được cố định" sau khi dự án được tạo.
  1. Tiếp theo, bạn cần bật tính năng thanh toán trong Cloud Console để sử dụng các tài nguyên của Google Cloud.

Việc thực hiện lớp học lập trình này sẽ không tốn nhiều chi phí, nếu có. Hãy nhớ làm theo mọi hướng dẫn trong phần "Dọn dẹp" để biết cách tắt các tài nguyên nhằm tránh bị tính phí ngoài phạm vi 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í trị giá 300 USD.

Khởi động Cloud Shell

Mặc dù 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 trên Cloud.

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

bce75f34b2c53987.png

Quá trình này chỉ mất vài phút để cung cấp và kết nối với môi trường. Khi quá trình này kết thúc, bạn sẽ thấy như sau:

f6ef2b5f13479f3a.png

Máy ảo này được trang bị tất cả các công cụ phát triển mà bạn cần. Nó cung cấp một thư mục chính có dung lượng 5 GB và chạy trên Google Cloud, giúp tăng cường đáng kể hiệu suất mạng và hoạt động xác thực. Bạn chỉ cần một trình duyệt là có thể thực hiện mọi thao tác trong phòng thí nghiệm này.

5. Bật API, đặt múi giờ 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 của bạn. Nếu không, hãy đảm bảo bạn đã đặt mã dự án và gcloud được định cấu hình bằng mã dự án đó:

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

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

gcloud components install alpha

Bật API

Bật tất cả cá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 khu vực và nền tảng

Trước khi tạo một cụm GKE bằng Cloud Run Events, hãy đặt tên cụm, vùng 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 rằng 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 Cloud Run Events

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 đây được 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)

Cloud Run Events có một Lớp điều khiển và một Lớp dữ liệu cần được thiết lập riêng biệt. Cách thiết lập Lớp kiểm soát:

Trong Cloud Shell:

gcloud beta events init 

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

Lúc này, mặt phẳng điều khiển sẽ được khởi chạy đú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 (Lớp dữ liệu)

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

Trong Cloud Shell, hãy đặ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. Bạn có thể đặt thành default nếu muốn sử dụng không gian tên mặc định như minh hoạ dưới đây:

export NAMESPACE=default

Xin lưu ý rằng nếu không gian tên bạn 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 chạy không gian tên bằng khoá bí mật mặc định:

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

Tạo một môi giới mặc định trong không gian tên:

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

Kiểm tra để đảm bảo rằng bạn đã tạo được môi giới. Xin lưu ý rằng có thể mất vài giây cho đến khi 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á những nguồn đã đăng ký, các loại sự kiện mà những nguồn đó có thể phát ra và cách định cấu hình điều kiện kích hoạt để sử dụng các sự kiện đó.

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

gcloud beta events types list

Để 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 đích nhận Cloud Run

Là một đích nhận sự kiện, hãy triển khai một dịch vụ Cloud Run ghi nhật ký nội dung của CloudEvent mà dịch vụ đó nhận được.

Bạn có thể dùng event_display của Knative đã được biên dịch và hình ảnh vùng chứa của nó được tạo 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 lê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 của 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 một Trình kích hoạt sự kiện cho Cloud Pub/Sub

Một cách để nhận sự kiện là thông qua Cloud Pub/Sub. Các ứng dụng tuỳ chỉnh có thể xuất bản thông báo lên Cloud Pub/Sub và những thông báo này có thể được gửi đến các đích đến Google Cloud Run thông qua Events for Cloud Run.

Tạo một chủ đề

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

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

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

Trước khi tạo trình kích hoạt, hãy xem thêm thông tin về các tham số bạn cần để tạo trình kích hoạt cho các 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 cho chủ đề Cloud Pub/Sub đến dịch vụ Cloud Run đã triển khai của chúng tôi:

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 điều kiện kích hoạt đã được tạo hay chưa bằng cách liệt kê tất cả điều kiện kích hoạt:

gcloud beta events triggers list

Bạn có thể phải đợi tối đa 10 phút để quy trình tạo điều kiện kích hoạt được truyền tải và bắt đầu lọc cá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ể dùng gcloud để kích hoạt một sự kiện:

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

Nguồn nhận Cloud Run mà chúng ta đã tạo sẽ ghi nhật ký nội dung của tin nhắn đế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.png

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

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

Bạn có thể xoá điều kiện kích hoạt sau khi kiểm thử xong (không bắt buộc).

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

12. Tạo một đ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. Trên Cloud Console, hãy chọn biểu tượng IAM & Admin > Audit Logs trong trình đơn trên cùng bên trái. Trong danh sách dịch vụ, hãy kiểm tra Google Cloud Pub/Sub:

97bd4b57c6a05fcc.png

Ở bên phải, hãy nhớ chọn Quản trị, Đọc và Ghi. Nhấp vào Lưu:

bec31b4f35fbcea.png

Nhật ký kiểm tra hoạt động kiểm thử

Để tìm hiểu cách xác định các thông số bạn cần thiết lập một điều kiện kích hoạt thực tế, hãy thực hiện một 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 xem bản cập nhật này đã tạo ra loại nhật ký kiểm tra nào. Trên Cloud Console, hãy chọn biểu tượng Logging > Logs Viewer trong trình đơn trên cùng 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 số đó sẽ là google.pubsub.v1.Publisher.CreateTopic:

b083cce219773d24.png

Lưu ý serviceName, methodNameresourceName. Chúng ta sẽ sử dụng các thông tin này để tạo trình kích hoạt.

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

Giờ đây, 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 một điều kiện kích hoạt cho các sự kiện từ 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 điều kiện kích hoạt bằng các 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ả các điều kiện kích hoạt để xác nhận rằng điều kiện kích hoạt đã được tạo thành công:

gcloud beta events triggers list

Chờ tối đa 10 phút để điều kiện kích hoạt được tạo và bắt đầu lọc các sự kiện. Sau khi sẵn sàng, nó sẽ lọc các sự kiện tạo và gửi chúng đến dịch vụ. Giờ thì 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ủ đề

Bạn có thể xoá điều kiện kích hoạt sau khi hoàn tất kiểm thử (không bắt buộc):

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 một Trình kích hoạt sự kiện cho Cloud Storage

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

Tạo một vùng lưu trữ

Trước tiên, hãy tạo một bộ chứa Cloud Storage ở cùng khu vực với dịch vụ Cloud Run đã triển khai. Bạn có thể thay thế BUCKET_NAME bằng một tên duy nhất mà bạn 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 Cloud Storage

Trước khi tạo một đ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 để xuất bản lên Pub/Sub. Bạn có thể sử dụng các bước được nêu trong phần Lấy tài khoản dịch vụ Cloud Storage để lấy tài khoản dịch vụ hoặc sử 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ẽ xuất hiện trong phần 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, hãy đặt tài khoản 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 đ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 các sự kiện Cloud Storage.

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:

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

Tạo điều kiện kích hoạt bằng các 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ả các điều kiện kích hoạt để xác nhận rằng điều kiện kích hoạt đã được tạo thành công:

gcloud beta events triggers list

Chờ tối đa 10 phút để điều kiện kích hoạt được tạo và bắt đầu lọc các sự kiện. Sau khi sẵn sàng, nó sẽ lọc các sự kiện tạo và gửi chúng đến dịch vụ.

Giờ thì 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

Bạn có thể xoá điều kiện kích hoạt sau khi hoàn tất kiểm thử (không bắt buộc):

gcloud beta events triggers delete trigger-storage

14. Tạo một trình kích hoạt Sự kiện cho Cloud Scheduler

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

Hiện tại, Cloud Scheduler yêu cầu người dùng tạo một ứng dụng App Engine. Chọn một Vị trí App Engine rồi 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 một điều kiện kích hoạt cho các sự kiện từ 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í Cloud Scheduler để tạo bộ lập lịch:

export SCHEDULER_LOCATION=europe-west1

Tạo một Trình kích hoạt sẽ tạo một công việc được thực thi mỗi phút trong Google Cloud Scheduler và gọi dịch vụ đích:

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ả các điều kiện kích hoạt để xác nhận rằng điều kiện kích hoạt đã được tạo thành công:

gcloud beta events triggers list

Chờ tối đa 10 phút để điều kiện kích hoạt được tạo và bắt đầu lọc các sự kiện. Sau khi sẵn sàng, nó sẽ lọc các sự kiện tạo và gửi chúng đế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

Bạn có thể xoá điều kiện kích hoạt sau khi hoàn tất kiểm thử (không bắt buộc):

gcloud beta events triggers delete trigger-scheduler

15. Sự kiện tuỳ chỉnh (Điểm cuối của Broker)

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

Tạo Curl Pod để tạo sự kiện

Các 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 theo cách thủ công và xem cách người dùng phù hợp nhận được những sự kiện này.

Để tạo một Pod đóng vai trò là nhà sản xuất 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 curl Pod đang hoạt động chính xác. Bạn sẽ thấy một nhóm có tên là curl với Status=Running:

kubectl get pod curl -n ${NAMESPACE}

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

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

Tạo điều kiện 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ả các điều kiện kích hoạt để xác nhận rằng điều kiện kích hoạt đã được tạo thành công:

gcloud beta events triggers list

Tạo một sự kiện bằng cách gửi yêu cầu HTTP đến Broker. Hãy tự nhắc nhở mình về URL của Broker bằng cách chạy lệ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 đã SSH vào nhóm và hiện có thể gửi yêu cầu HTTP. Một 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 đã nhận được sự kiện, bạn sẽ nhận được phản hồi HTTP 202 Accepted. Thoát phiên SSH bằng Ctrl + D

Xác minh rằng sự kiện đã xuất bản đượ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

Bạn có thể xoá điều kiện kích hoạt sau khi hoàn tất kiểm thử (không bắt buộc):

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ày.

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 Events for Cloud Run for Anthos
  • Tạo một đích nhận Cloud Run
  • Tạo một Trình kích hoạt sự kiện cho Cloud Pub/Sub
  • Tạo một điều kiện kích hoạt Sự kiện cho Nhật ký kiểm tra
  • Tạo một Trình kích hoạt sự kiện cho Cloud Storage
  • Tạo một trình kích hoạt Sự kiện cho Cloud Scheduler
  • Tạo và sử dụng sự kiện tuỳ chỉnh