1. Tổng quan
Trong bài thực hành này, bạn sẽ tạo một điều kiện kích hoạt Eventarc kết nối một chủ đề Pub/Sub với dịch vụ Workflows. Eventarc cho phép bạn tách rời giao tiếp giữa các dịch vụ, giúp giải pháp của bạn có khả năng mở rộng và hướng sự kiện hơn. Bạn sẽ tạo một quy trình làm việc bao gồm nhiều bước để thực thi một quy trình kinh doanh nhằm tính điểm phần thưởng cho khách hàng khi đặt hàng tại Cymbal Eats. Workflow sẽ gửi nhiều yêu cầu đến một ứng dụng đang chạy trên GKE Autopilot và xuất bản một thông báo đến chủ đề Pub/Sub để thông báo cho ứng dụng Order Service về điểm phần thưởng đã tính.

GKE Autopilot là gì?
GKE Autopilot là một chế độ hoạt động trong GKE, trong đó Google quản lý cấu hình cụm của bạn, bao gồm cả các nút, khả năng mở rộng, tính bảo mật và các chế độ cài đặt được định cấu hình sẵn khác. Các cụm Autopilot được tối ưu hoá để chạy hầu hết các khối lượng công việc phát hành công khai và cung cấp tài nguyên điện toán dựa trên tệp kê khai Kubernetes của bạn. Cấu hình tinh giản tuân theo các phương pháp hay nhất và đề xuất của GKE về việc thiết lập cụm và khối lượng công việc, khả năng mở rộng và tính bảo mật. Để xem danh sách các chế độ cài đặt tích hợp, hãy tham khảo bảng So sánh giữa chế độ Lái xe bán tự động và chế độ Chuẩn.
Với GKE Standard, người dùng chịu trách nhiệm quản lý các nút tính toán và cấu hình bộ nút, trong khi những phần còn lại do GKE đảm nhiệm.
Trách nhiệm của khách hàng so với trách nhiệm của Google khi chạy ở chế độ GKE Standard

Với GKE Autopilot, Google chịu trách nhiệm về việc quản lý và định cấu hình bộ nút. Điều này cho phép bạn tập trung vào các ứng dụng và dịch vụ chạy trên cụm.
Eventarc là gì?
Eventarc cho phép bạn tạo các kiến trúc hướng sự kiện mà không cần triển khai, tuỳ chỉnh hoặc duy trì cơ sở hạ tầng cơ bản. Eventarc cung cấp một giải pháp chuẩn hoá để quản lý luồng thay đổi trạng thái (gọi là sự kiện) giữa các vi dịch vụ tách rời. Khi được kích hoạt, Eventarc sẽ định tuyến các sự kiện này thông qua các gói thuê bao Pub/Sub đến nhiều đích đến (ví dụ: Workflows, Cloud Run) trong khi quản lý việc phân phối, bảo mật, uỷ quyền, khả năng quan sát và xử lý lỗi cho bạn.
Nhà cung cấp sự kiện của Google
- Hơn 90 nhà cung cấp Google Cloud. Các nhà cung cấp này gửi sự kiện trực tiếp từ nguồn (ví dụ: Cloud Storage) hoặc thông qua các mục trong Nhật ký kiểm tra đám mây.
- Nhà cung cấp Pub/Sub. Các nhà cung cấp này gửi sự kiện đến Eventarc bằng cách sử dụng thông báo Pub/Sub.
Nhà cung cấp bên thứ ba
Nhà cung cấp bên thứ ba là những pháp nhân không thuộc Google, cung cấp một nguồn Eventarc.
Điều kiện kích hoạt Eventarc
- Sự kiện Cloud Pub/Sub. Eventarc có thể được kích hoạt bằng các thông báo được xuất bản cho các chủ đề Pub/Sub.
- Sự kiện trong Nhật ký kiểm tra trên Cloud (CAL). Nhật ký kiểm tra của Cloud cung cấp nhật ký kiểm tra Hoạt động của Quản trị viên và nhật ký kiểm tra Quyền truy cập dữ liệu cho từng dự án trên đám mây, thư mục và tổ chức.
- Sự kiện trực tiếp. Eventarc có thể được kích hoạt bởi nhiều sự kiện trực tiếp, chẳng hạn như nội dung cập nhật cho một bộ chứa Cloud Storage hoặc nội dung cập nhật cho một mẫu Cấu hình từ xa Firebase.
Đích đến của sự kiện
- Quy trình công việc
- Cloud Run
- GKE
- Cloud Functions( thế hệ thứ 2)

Workflows là gì?
Workflows là một dịch vụ được quản lý toàn diện, cho phép bạn tích hợp các dịch vụ vi mô, tác vụ và API. Workflows là dịch vụ không máy chủ và sẽ mở rộng quy mô để đáp ứng nhu cầu của bạn.
Các trường hợp sử dụng quy trình làm việc:
- Quy trình công việc dựa trên sự kiện thực thi trên các điều kiện kích hoạt đã xác định. Ví dụ: khi một đơn đặt hàng mới được gửi và bạn muốn tính điểm khách hàng thân thiết. Hoặc khi một đơn đặt hàng bị huỷ, sự kiện có thể được xuất bản và tất cả các dịch vụ quan tâm sẽ xử lý sự kiện đó.
- Quy trình công việc của các công việc hàng loạt chạy các công việc thường xuyên bằng Cloud Scheduler. Ví dụ: một công việc hằng đêm để kiểm tra các mục trong trình đơn có trạng thái không thành công và xoá các mục đó.
Workflows rất phù hợp với những quy trình công việc điều phối các dịch vụ. Bạn có thể tự động hoá các quy trình bao gồm cả việc chờ và thử lại trong tối đa một năm.
Lợi ích của quy trình làm việc:
- Cấu hình qua mã: Giảm nợ kỹ thuật bằng cách chuyển logic sang cấu hình thay vì viết mã.
- Đơn giản hoá cấu trúc của bạn. Workflows có trạng thái cho phép bạn trực quan hoá và giám sát các hoạt động tích hợp dịch vụ phức tạp mà không cần thêm các phần phụ thuộc.
- Kết hợp độ tin cậy và khả năng chịu lỗi. Kiểm soát các lỗi bằng logic thử lại và xử lý lỗi mặc định hoặc tuỳ chỉnh ngay cả khi các hệ thống khác gặp lỗi – kiểm tra từng bước đến Cloud Spanner để giúp bạn theo dõi tiến trình.
- Không cần bảo trì. Mở rộng quy mô khi cần: Bạn không cần vá lỗi hoặc bảo trì. Bạn chỉ trả phí khi quy trình làm việc của bạn chạy, không mất phí khi chờ hoặc không hoạt động.
Trong lớp học này, bạn sẽ định cấu hình một quy trình dựa trên sự kiện.
Kiến thức bạn sẽ học được
Trong phòng thí nghiệm này, bạn sẽ tìm hiểu cách thực hiện những việc sau:
- Định cấu hình chủ đề Pub/Sub và Eventarc để kích hoạt Workflows
- Định cấu hình quy trình công việc để thực hiện các lệnh gọi API đến ứng dụng đang chạy trên GKE Autopilot
- Định cấu hình quy trình công việc để xuất bản thông báo lên Pub/Sub
- Cách truy vấn nhật ký có cấu trúc của Workflows trong Cloud Logging và cách sử dụng Google Cloud CLI
Điều kiện tiên quyết
- Phòng thí nghiệm này giả định rằng bạn đã quen thuộc với môi trường Cloud Console và Cloud Shell.
- Kinh nghiệm sử dụng GKE và Cloud Pub/Sub là hữu ích nhưng không bắt buộc.
2. Thiết lập và yêu cầu
Thiết lập dự án trên đám mây
- Đăng nhập vào Google 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.



- 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ự mà các API của Google không sử dụng. Bạn có thể cập nhật thông tin này bất cứ lúc nào.
- Mã dự án là mã 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 mã này sau khi đã đặt). Cloud Console 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). Nếu không thích mã nhận dạng được tạo, bạn có thể tạo một mã nhận dạng ngẫu nhiên khác. Hoặc bạn có thể thử tên người dùng của riêng mình để xem tên đó có dùng được hay không. Bạn không thể thay đổi thông tin này sau bước này và thông tin này sẽ giữ nguyên trong suốt thời gian diễn ra dự án. - Để bạn biết, có một giá trị thứ ba là Số dự án mà một số API sử dụng. Tìm hiểu thêm về cả 3 giá trị này trong tài liệu.
- 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/API trên 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ó. Để tắt các tài nguyên nhằm tránh phát sinh phí thanh toán ngoài hướng dẫn này, bạn có thể xoá các tài nguyên đã tạo hoặc xoá toàn bộ dự án. 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.
Thiết lập môi trường
Kích hoạt Cloud Shell bằng cách nhấp vào biểu tượng ở bên phải thanh tìm kiếm.

Sao chép kho lưu trữ và chuyển đến thư mục, sao chép và dán lệnh bên dưới vào cửa sổ dòng lệnh rồi nhấn Enter:
git clone https://github.com/GoogleCloudPlatform/cymbal-eats.git && cd cymbal-eats/customer-service
Triển khai các phần phụ thuộc bắt buộc bằng cách chạy gke-lab-setup.sh
Các tài nguyên sau đây sẽ được tạo:
- Cụm và phiên bản AlloyDB
- Cụm GKE Autopilot
./gke-lab-setup.sh
Nếu được nhắc uỷ quyền, hãy nhấp vào "Uỷ quyền" để tiếp tục.

Quá trình thiết lập sẽ mất khoảng 10 phút.
Chờ cho đến khi tập lệnh hoàn tất và bạn thấy đầu ra bên dưới trước khi chạy các bước khác.
NAME: client-instance ZONE: us-central1-c MACHINE_TYPE: e2-medium PREEMPTIBLE: INTERNAL_IP: 10.128.0.9 EXTERNAL_IP: 35.232.109.233 STATUS: RUNNING
3. Cụm GKE Autopilot
Xem xét cụm GKE Autopilot
Đặt các biến môi trường của Dự án:
export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')
export PROJECT_NAME=$(gcloud projects describe $PROJECT_ID --format='value(name)')
Trong quá trình thiết lập ban đầu, cụm được tạo bằng lệnh bên dưới (Bạn không cần chạy lệnh này):
gcloud container clusters create-auto $CLUSTER_NAME --region $REGION
Chạy lệnh để xem cụm GKE Autopilot đã tạo:
gcloud container clusters list
Kết quả mẫu:

Chạy lệnh để lưu trữ thông tin đăng nhập cho cụm:
CLUSTER_NAME=rewards-cluster
REGION=us-central1
gcloud container clusters get-credentials $CLUSTER_NAME --region=$REGION
Triển khai ứng dụng
Tiếp theo, bạn sẽ triển khai một ứng dụng Dịch vụ khách hàng. Đây là một vi dịch vụ dựa trên Java sử dụng khung Quarkus.
Chuyển đến thư mục cymbal-eats/customer-service rồi chạy các lệnh bên dưới để tạo và tải hình ảnh vùng chứa lên:
./mvnw clean package -DskipTests
export CUSTOMER_SERVICE_IMAGE=gcr.io/$PROJECT_ID/customer-service:1.0.0
gcloud builds submit --tag $CUSTOMER_SERVICE_IMAGE .
Đặt địa chỉ IP riêng tư cho AlloyDB:
export DB_HOST=$(gcloud beta alloydb instances describe customer-instance \
--cluster=customer-cluster \
--region=$REGION \
--format=json | jq \
--raw-output ".ipAddress")
echo $DB_HOST
Chạy các lệnh bên dưới để tạo đối tượng bí mật Kubernetes nhằm lưu trữ thông tin đăng nhập cơ sở dữ liệu mà ứng dụng Dịch vụ khách hàng sẽ dùng để kết nối với cơ sở dữ liệu:
DB_NAME=customers
DB_USER=postgres
DB_PASSWORD=password123
kubectl create secret generic gke-alloydb-secrets \
--from-literal=database=$DB_NAME \
--from-literal=username=$DB_USER \
--from-literal=password=$DB_PASSWORD \
--from-literal=db_host=$DB_HOST
Chạy lệnh để thay thế CUSTOMER_SERVICE_IMAGE trong tệp deployment.yaml:
sed "s@CUSTOMER_SERVICE_IMAGE@$CUSTOMER_SERVICE_IMAGE@g" deployment.yaml.tmpl > customer-service-deployment.yaml
Chạy lệnh để triển khai ứng dụng:
kubectl apply -f customer-service-deployment.yaml
Ứng dụng sẽ mất vài phút để chuyển sang trạng thái RUNNING (ĐANG CHẠY).
Xem xét tệp quy cách triển khai:
deployment.yaml.tmpl
Sau đây là phần cấu hình chỉ định các tài nguyên cần thiết để chạy ứng dụng này.
spec:
containers:
- name: customer-service
image: CUSTOMER_SERVICE_IMAGE
resources:
requests:
cpu: 250m
memory: 512Mi
ephemeral-storage: 512Mi
limits:
cpu: 500m
memory: 1024Mi
ephemeral-storage: 1Gi
Chạy lệnh để tạo IP ngoài sẽ được dùng trong quy trình làm việc:
SERVICE_NAME=customer-service
kubectl expose deployment $SERVICE_NAME \
--type LoadBalancer --port 80 --target-port 8080
Chạy lệnh để xác minh các tài nguyên đã tạo:
kubectl get all
Kết quả mẫu:

4. Quy trình đánh giá
Các khái niệm cốt lõi về quy trình làm việc
Quy trình làm việc bao gồm một loạt các bước được mô tả bằng cú pháp Workflows( YAML hoặc JSON).
Sau khi được tạo, quy trình công việc sẽ được triển khai, nhờ đó quy trình công việc sẵn sàng thực thi.
Thực thi là một lần chạy duy nhất của logic có trong định nghĩa của quy trình công việc. Quy trình công việc chưa được thực thi sẽ không phát sinh phí. Tất cả các lần thực thi quy trình làm việc đều độc lập và khả năng mở rộng nhanh chóng của sản phẩm cho phép thực hiện đồng thời một số lượng lớn các lần thực thi.
Các chế độ kiểm soát việc thực thi
- Các bước – Để tạo một quy trình công việc, bạn xác định
stepsvà thứ tự thực thi mong muốn bằng cách sử dụng cú pháp Workflows. Mỗi quy trình công việc phải có ít nhất một bước. - Điều kiện – Bạn có thể dùng khối
switchlàm cơ chế lựa chọn cho phép giá trị của một biểu thức kiểm soát luồng thực thi của quy trình công việc. - Vòng lặp – Bạn có thể dùng
forvòng lặp để lặp lại một chuỗi số hoặc thông qua một tập hợp dữ liệu, chẳng hạn như danh sách hoặc bản đồ. - Quy trình phụ – Quy trình phụ hoạt động tương tự như một quy trình hoặc hàm trong ngôn ngữ lập trình, cho phép bạn đóng gói một bước hoặc một nhóm bước mà quy trình sẽ lặp lại nhiều lần.
Kích hoạt việc thực thi
- Thủ công – Bạn có thể quản lý quy trình làm việc trên bảng điều khiển Cloud hoặc từ dòng lệnh bằng Google Cloud CLI.
- Có thể lập trình – Bạn có thể dùng Thư viện ứng dụng đám mây cho Workflows API hoặc API REST để quản lý quy trình công việc.
- Được lên lịch – Bạn có thể sử dụng Cloud Scheduler để chạy một quy trình làm việc theo một lịch biểu cụ thể.
Đối số thời gian chạy
Bạn có thể truy cập vào dữ liệu được truyền trong thời gian chạy bằng cách thêm trường params vào quy trình làm việc chính (đặt trong một khối chính). Khối chính chấp nhận một đối số duy nhất là bất kỳ kiểu dữ liệu JSON hợp lệ nào. Trường params đặt tên cho biến mà quy trình làm việc dùng để lưu trữ dữ liệu bạn truyền vào.
Logic quy trình công việc
Nếu không có khách hàng, quy trình công việc sẽ gọi API để tạo khách hàng trước, sau đó cập nhật điểm thưởng. Dựa trên tổng số tiền của đơn đặt hàng, quy trình làm việc sẽ chọn một hệ số nhân để tính điểm phần thưởng cho khách hàng. Hãy xem ví dụ bên dưới để biết thông tin chi tiết.
- calculate_multiplier:
switch:
- condition: ${totalAmount < 10}
steps:
- set_multiplier1:
assign:
- multiplier: 2
- condition: ${totalAmount >= 10 and totalAmount < 25}
steps:
- set_multiplier2:
assign:
- multiplier: 3
- condition: ${totalAmount >= 25}
steps:
- set_multiplier3:
assign:
- multiplier: 5
- calculate_rewards:
assign:
- rewardPoints: ${customerRecord.rewardPoints + multiplier}

5. Định cấu hình và triển khai quy trình công việc
Chạy lệnh để xem địa chỉ IP ngoài cho dịch vụ:
kubectl get svc
Kết quả mẫu:

Đặt biến môi trường bên dưới bằng cách sử dụng giá trị của IP ngoài từ đầu ra trước đó.
CUSTOMER_SERVICE_URL=http://$(kubectl get svc customer-service -o=jsonpath='{.status.loadBalancer.ingress[0].ip}')
Thay thế URL ứng dụng Dịch vụ khách hàng trong mẫu quy trình làm việc:
sed "s@CUSTOMER_SERVICE_URL@$CUSTOMER_SERVICE_URL@g" gkeRewardsWorkflow.yaml.tmpl > gkeRewardsWorkflow.yaml
Đặt vị trí cho các biến môi trường của dịch vụ Workflows và dự án:
gcloud config set workflows/location ${REGION}
export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')
export PROJECT_NAME=$(gcloud projects describe $PROJECT_ID --format='value(name)')
Tạo một tài khoản dịch vụ tuỳ chỉnh cho quy trình có các quyền sau:
- Call Logging APIs
- Đăng thông báo lên chủ đề PubSub
export WORKFLOW_SERVICE_ACCOUNT=workflows-sa
gcloud iam service-accounts create ${WORKFLOW_SERVICE_ACCOUNT}
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member "serviceAccount:${WORKFLOW_SERVICE_ACCOUNT}@$PROJECT_ID.iam.gserviceaccount.com" \
--role "roles/logging.logWriter"
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member "serviceAccount:${WORKFLOW_SERVICE_ACCOUNT}@$PROJECT_ID.iam.gserviceaccount.com" \
--role "roles/pubsub.publisher"
Triển khai quy trình công việc. Quy trình làm việc được định cấu hình để sử dụng tài khoản dịch vụ đã tạo ở bước trước:
export WORKFLOW_NAME=rewardsWorkflow
gcloud workflows deploy ${WORKFLOW_NAME} \
--source=gkeRewardsWorkflow.yaml \
--service-account=${WORKFLOW_SERVICE_ACCOUNT}@$PROJECT_ID.iam.gserviceaccount.com
Xem nguồn quy trình làm việc và các thông tin chi tiết khác(thẻ Triggers). Hiện không có trình kích hoạt nào được định cấu hình để thực thi quy trình này. Bạn sẽ thiết lập chế độ này trong bước tiếp theo.

6. Định cấu hình chủ đề Pub/Sub và điều kiện kích hoạt Eventarc
Tiếp theo, bạn sẽ tạo 2 chủ đề Pub/Sub và định cấu hình một trình kích hoạt Eventarc.
Ứng dụng Order Service sẽ xuất bản thông báo đến order-topic kèm theo thông tin về đơn đặt hàng mới.
Quy trình công việc sẽ xuất bản thông báo đến order-points-topic kèm theo thông tin về điểm phần thưởng của đơn đặt hàng và tổng số tiền. Order Service(không phải là phần được triển khai của phòng thí nghiệm này) cung cấp một điểm cuối được dùng bởi Push subscription cho order-points-topic, để cập nhật điểm phần thưởng và tổng số tiền cho mỗi đơn đặt hàng.
Tạo chủ đề Pub/Sub mới:
export TOPIC_ID=order-topic
export ORDER_POINTS_TOPIC_ID=order-points-topic
gcloud pubsub topics create $TOPIC_ID --project=$PROJECT_ID
gcloud pubsub topics create $ORDER_POINTS_TOPIC_ID --project=$PROJECT_ID
Đặt vị trí cho dịch vụ Eventarc:
gcloud config set eventarc/location ${REGION}
Tạo một tài khoản dịch vụ tuỳ chỉnh mà trình kích hoạt Eventarc sẽ dùng để thực thi quy trình công việc.
export TRIGGER_SERVICE_ACCOUNT=eventarc-workflow-sa
gcloud iam service-accounts create ${TRIGGER_SERVICE_ACCOUNT}
Cấp quyền truy cập cho tài khoản dịch vụ để thực thi quy trình công việc.
gcloud projects add-iam-policy-binding ${PROJECT_ID} \
--member="serviceAccount:${TRIGGER_SERVICE_ACCOUNT}@${PROJECT_ID}.iam.gserviceaccount.com" \
--role="roles/workflows.invoker"
Tạo một điều kiện kích hoạt Eventarc để theo dõi các thông báo Pub/Sub và gửi các thông báo đó đến Workflows.
gcloud eventarc triggers create new-orders-trigger \
--destination-workflow=${WORKFLOW_NAME} \
--destination-workflow-location=${REGION} \
--event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \
--service-account="${TRIGGER_SERVICE_ACCOUNT}@${PROJECT_ID}.iam.gserviceaccount.com" \
--transport-topic=$TOPIC_ID
Kết quả mẫu:
Creating trigger [new-orders-trigger] in project [qwiklabs-gcp-01-1a990bfcadb3], location [us-east1]...done. Publish to Pub/Sub topic [projects/qwiklabs-gcp-01-1a990bfcadb3/topics/order-topic] to receive events in Workflow [rewardsWorkflow]. WARNING: It may take up to 2 minutes for the new trigger to become active.
Xem lại điều kiện kích hoạt Eventarc đã tạo.

Xem xét sự kiện đăng ký đã tạo cho điều kiện kích hoạt.

Xem xét các thay đổi ở phía quy trình làm việc. Đã thêm một điều kiện kích hoạt mới.

7. Quy trình kiểm thử

Để mô phỏng Dịch vụ đặt hàng, bạn sẽ gửi thông báo đến chủ đề Pub/Sub từ Cloud Shell và xác minh nhật ký Dịch vụ khách hàng trong bảng điều khiển Cloud.
export TOPIC_ID=order-topic
gcloud pubsub topics publish $TOPIC_ID --message '{"userId":"id1","orderNumber":123456,"name":"Angela Jensen","email":"ajensen9090+eats@gmail.com","address":"1845 Denise St","city":"Mountain View","state":"CA","zip":"94043","orderItems":[{"id":7,"createDateTime":"2022-03-17T21:51:44.968584","itemImageURL":"https://images.unsplash.com/photo-1618449840665-9ed506d73a34?ixlib=rb-1.2.1&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=687&q=80","itemName":"Curry Plate","itemPrice":12.5,"itemThumbnailURL":"https://images.unsplash.com/photo-1618449840665-9ed506d73a34?ixlib=rb-1.2.1&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=687&q=80","spiceLevel":0,"status":"Ready","tagLine":"Spicy touch for your taste buds","updateDateTime":"2022-03-18T01:30:29.340584","inventory":8,"quantity":1}]}'
Kết quả mẫu:
messageIds: - '5063709859203105'
Xem xét thông tin chi tiết về quá trình thực thi quy trình và nhật ký.


8. Ghi nhật ký có cấu trúc trong Workflows
Quy trình công việc được định cấu hình để ghi nhật ký có cấu trúc ở định dạng JSON. Nhật ký được ghi bằng Cloud Logging API, tài nguyên workflows.googleapis.com/Workflow và theo tên nhật ký projects/${PROJECT_ID}/logs/Workflows.
Xem cấu hình ghi nhật ký bên dưới.
- log_totalAmount:
call: sys.log
args:
json:
orderNumber: ${order.orderNumber}
totalAmount: ${totalAmount}
multiplier: ${multiplier}
totalRewardPoints: ${rewardPoints}
orderRewardPoints: ${orderRewardPoints}
severity: INFO
Mở Trình khám phá nhật ký trong Cloud Console rồi chạy một truy vấn để tìm các đơn đặt hàng đã xử lý có tổng số tiền lớn hơn 2 đô la.
Để hiện trường cụm từ tìm kiếm, hãy nhấp vào "Hiện cụm từ tìm kiếm".

resource.type="workflows.googleapis.com/Workflow" AND
jsonPayload.totalAmount > 2 AND
timestamp >= "2023-01-01T00:00:00Z" AND
timestamp <= "2024-12-31T23:59:59Z"
Kết quả mẫu:

Mở Cloud Shell và sử dụng gcloud CLI để đọc nhật ký bằng các lệnh bên dưới.
gcloud logging read 'resource.type="workflows.googleapis.com/Workflow" AND jsonPayload.totalAmount > 2 AND timestamp >= "2023-01-01T00:00:00Z" AND timestamp <= "2023-12-31T23:59:59Z"' --limit 10 --format="table(jsonPayload.orderNumber,jsonPayload.totalAmount,jsonPayload.orderRewardPoints,jsonPayload.totalRewardPoints,jsonPayload.multiplier)"
Đầu ra mẫu bằng định dạng table:

Chạy lệnh bên dưới để trả về nhật ký ở định dạng JSON:
gcloud logging read 'resource.type="workflows.googleapis.com/Workflow" AND jsonPayload.totalAmount > 2 AND timestamp >= "2023-01-01T00:00:00Z" AND timestamp <= "2023-12-31T23:59:59Z"' --limit 10 --format=json | jq
Đầu ra mẫu bằng định dạng json:

9. Xem xét hồ sơ khách hàng
(Các bước không bắt buộc)
Chạy các lệnh bên dưới để đặt biến môi trường URL dịch vụ khách hàng.
CUSTOMER_SERVICE_URL=http://$(kubectl get svc customer-service -o=jsonpath='{.status.loadBalancer.ingress[0].ip}')
curl $CUSTOMER_SERVICE_URL/customer | jq
Kết quả mẫu:
[
{
"address": "1845 Denise St",
"city": "Mountain View",
"createDateTime": "2023-01-31T17:22:08.853644",
"email": "ajensen9090+eats@gmail.com",
"id": "id1",
"name": "Angela Jensen",
"rewardPoints": 4,
"state": "CA",
"updateDateTime": "2023-01-31T17:22:09.652117",
"zip": "94043"
}
]
Chạy lệnh để xuất bản đơn đặt hàng mới nhiều lần và xác minh điểm phần thưởng của khách hàng bằng lệnh curl.
Xuất bản thông báo về đơn đặt hàng mới:
export TOPIC_ID=order-topic
gcloud pubsub topics publish $TOPIC_ID --message '{"userId":"id1","orderNumber":123456,"name":"Angela Jensen","email":"ajensen9090+eats@gmail.com","address":"1845 Denise St","city":"Mountain View","state":"CA","zip":"94043","orderItems":[{"id":7,"createDateTime":"2022-03-17T21:51:44.968584","itemImageURL":"https://images.unsplash.com/photo-1618449840665-9ed506d73a34?ixlib=rb-1.2.1&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=687&q=80","itemName":"Curry Plate","itemPrice":12.5,"itemThumbnailURL":"https://images.unsplash.com/photo-1618449840665-9ed506d73a34?ixlib=rb-1.2.1&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=687&q=80","spiceLevel":0,"status":"Ready","tagLine":"Spicy touch for your taste buds","updateDateTime":"2022-03-18T01:30:29.340584","inventory":8,"quantity":1}]}'
Xác minh điểm phần thưởng của khách hàng:
curl $CUSTOMER_SERVICE_URL/customer | jq
Chạy lệnh bên dưới để kiểm tra nhật ký mới nhất:
gcloud logging read 'resource.type="workflows.googleapis.com/Workflow" AND jsonPayload.totalAmount > 2 AND timestamp >= "2023-01-01T00:00:00Z" AND timestamp <= "2023-12-31T23:59:59Z"' --limit 10 --format="table(jsonPayload.orderNumber,jsonPayload.totalAmount,jsonPayload.orderRewardPoints,jsonPayload.totalRewardPoints,jsonPayload.multiplier)"
10. Xin chúc mừng!
Xin chúc mừng, bạn đã hoàn tất lớp học lập trình này!
Nội dung đã đề cập:
- Cách định cấu hình chủ đề Pub/Sub và Eventarc để kích hoạt Workflows
- Cách định cấu hình Workflow để thực hiện các lệnh gọi API đến ứng dụng chạy trên GKE Autopilot
- Cách định cấu hình Workflows để xuất bản thông báo lên Pub/Sub
- Cách truy vấn nhật ký có cấu trúc của Workflows trong Cloud Logging và cách sử dụng Google Cloud CLI
Bước tiếp theo:
Khám phá các lớp học lập trình khác của Cymbal Eats:
- Kích hoạt Workflows bằng Eventarc
- Kích hoạt quá trình xử lý sự kiện từ Cloud Storage
- Kết nối với CloudSQL riêng tư từ Cloud Run
- Kết nối với cơ sở dữ liệu được quản lý toàn bộ từ Cloud Run
- Bảo mật ứng dụng không máy chủ bằng Identity Aware Proxy (IAP)
- Kích hoạt các công việc của Cloud Run bằng Cloud Scheduler
- Triển khai bảo mật trên Cloud Run
- Bảo mật lưu lượng truy cập vào Cloud Run
Dọn dẹp
Để tránh bị tính phí vào tài khoản Google Cloud của bạn cho các tài nguyên được dùng trong hướng dẫn này, hãy xoá dự án chứa các tài nguyên đó hoặc giữ lại dự án rồi xoá từng tài nguyên.
Xoá dự án
Cách dễ nhất để loại bỏ phí thanh toán là xoá dự án mà bạn đã tạo cho hướng dẫn này.