1. Tổng quan
Trong phòng thí nghiệm này, bạn sẽ tạo một điều kiện kích hoạt Eventarc kết nối chủ đề Pub/Sub với dịch vụ Workflows. Eventarc cho phép bạn tách dịch vụ thành dịch vụ giao tiếp, làm cho giải pháp của bạn dễ mở rộng hơn 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 hiện một quy trình kinh doanh nhằm tính điểm thưởng của khách hàng khi khách hàng đặt món tại Cymbal Eats. Quy trình công việc sẽ gửi nhiều yêu cầu đến một ứng dụng chạy trên GKE Autopilot và đăng thông báo lê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, điều chỉnh tỷ lệ, 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 tự động triển khai được tối ưu hoá để chạy hầu hết các tải công việc trong môi trường thực tế và cung cấp tài nguyên điện toán dựa trên tệp kê khai của Kubernetes. Cấu hình được tinh giản tuân theo các đề xuất và phương pháp hay nhất của GKE để thiết lập cụm và tải công việc, cũng như khả năng mở rộng và bảo mật. Để biết danh sách các chế độ cài đặt tích hợp sẵn, hãy tham khảo bảng So sánh tiêu chuẩn và Tự động triển khai.
Với GKE Standard, người dùng có trách nhiệm quản lý các nút worker và cấu hình nhóm nút, còn GKE sẽ xử lý những phần còn lại.
Trách nhiệm của Khách hàng và của Google khi chạy ở chế độ GKE Tiêu chuẩn
Với GKE Autopilot, việc quản lý và định cấu hình nhóm nút là trách nhiệm của Google. Đ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 đồng hồ.
Eventarc là gì?
Eventarc cho phép bạn xây dựng các kiến trúc hướng sự kiện mà không cần phải 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, được gọi là sự kiện, giữa các dịch vụ vi mô được tách riêng. Khi được kích hoạt, Eventarc sẽ định tuyến những sự kiện này thông qua gói thuê bao Pub/Sub đến nhiều điểm đến khác nhau (ví dụ: quy trình công việc, Cloud Run) đồng thời giúp bạn quản lý hoạt động phân phối, bảo mật, uỷ quyền, khả năng ghi nhận và xử lý lỗi.
Nhà cung cấp dịch vụ sự kiện trên Google
- Hơn 90 nhà cung cấp dịch vụ 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 của Cloud.
- Nhà cung cấp dịch vụ Pub/Sub. Những nhà cung cấp này gửi sự kiện đến Eventarc bằng thông báo Pub/Sub.
Nhà cung cấp bên thứ ba
Nhà cung cấp bên thứ ba là các pháp nhân không phải của Google có cung cấp 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ởi các tin nhắn được xuất bản lên chủ đề Pub/Sub.
- Sự kiện trong Nhật ký kiểm tra của Cloud (CAL). Nhật ký kiểm tra đám mây cung cấp nhật ký kiểm tra Hoạt động của quản trị viên và Quyền truy cập dữ liệu cho từng dự án, thư mục và tổ chức trên đám mây.
- Sự kiện trực tiếp. Eventarc có thể được kích hoạt bằng nhiều sự kiện trực tiếp, chẳng hạn như cập nhật bộ chứa Cloud Storage hoặc cập nhậ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
- Hàm đám mây( thế hệ thứ 2)
Workflows là gì?
Quy trình công việc 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. Quy trình công việc 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 công việc:
- Quy trình làm 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 đơn đặt hàng bị huỷ, sự kiện có thể được xuất bản và tất cả dịch vụ quan tâm sẽ xử lý sự kiện.
- Quy trình công việc theo lô chạy các công việc thường xuyên bằng Trình lập lịch biểu đám mây. Ví dụ: một công việc hằng đêm để kiểm tra các món trong thực đơn ở trạng thái không thành công và xoá các món đó.
Quy trình công việc lý tưởng cho những quy trình làm việc có chức năng sắp xếp các dịch vụ. Bạn có thể tự động hoá các quy trình, bao gồm cả chờ và thử lại trong tối đa 1 năm.
Lợi ích của quy trình công việc:
- Cấu hình thay vì viết 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á kiến trúc của bạn. Stateful Workflows 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 phần phụ thuộc.
- Kết hợp giữa độ tin cậy và khả năng chống lỗi. Kiểm soát lỗi bằng logic thử lại mặc định hoặc tuỳ chỉnh và xử lý lỗi ngay cả khi các hệ thống khác gặp lỗi. Chúng tôi sẽ 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: Không có gì cần vá lỗi hoặc duy trì. Chỉ trả tiền khi quy trình công việc của bạn chạy, không mất phí trong khi chờ hoặc không hoạt động.
Trong phòng thí nghiệm này, bạn sẽ định cấu hình quy trình làm việc 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 Quy trình công việc
- Định cấu hình Quy trình công việc để thực hiện lệnh gọi API đến ứng dụng 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 Workflows trong Cloud Logging và sử dụng gcloud 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.
- Trải nghiệm trước đây về GKE và Cloud Pub/Sub tuy 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 Cloud
- Đă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.
- 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. Bạn có thể cập nhật thông tin này bất cứ lúc nào.
- Mã dự án 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 (mã này thường được xác định là
PROJECT_ID
). Nếu không thích mã đã tạo, bạn có thể tạo một mã nhận dạng ngẫu nhiên khác. Ngoài ra, bạn có thể thử phương pháp của riêng mình và xem có được cung cấp hay không. Bạn không thể thay đổi thông tin này sau bước này và thông báo đó sẽ vẫn tồn tại trong thời gian của dự án. - Đối với thông tin của bạn, có giá trị thứ ba, 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.
- Tiếp theo, bạn sẽ phải bật tính năng thanh toán trong Cloud Console để sử dụng API/tài nguyên trên đám mây. 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 nhằm tránh bị tính phí ngoài hướng dẫn này, bạn có thể xoá các tài nguyên bạ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í 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ữ rồi di 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à bản sao AlloyDB
- Cụm tự động triển khai GKE
./gke-lab-setup.sh
Nếu được nhắc cho phép, 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.
Hãy chờ cho đến khi tập lệnh hoàn tất và bạn sẽ thấy kết quả 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 tự động triển khai GKE
Xem xét cụm Tự động triển khai GKE
Đặ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 ứng dụng Dịch vụ khách hàng. Đây là một dịch vụ vi mô 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ư 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 của Kubernetes nhằm lưu trữ thông tin đăng nhập của 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 triển khai.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 một lúc để chuyển sang trạng thái CHẠY.
Xem lại tệp thông số kỹ thuật triển khai:
deployment.yaml.tmpl
Dưới đây là phần cấu hình chỉ định 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 bên ngoài sẽ được dùng trong quy trình công 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 tài nguyên đã tạo:
kubectl get all
Kết quả mẫu:
4. Xem xét quy trình công việc
Các khái niệm chính của quy trình công việc
Một quy trình công 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 tạo, quy trình công việc sẽ được triển khai để sẵn sàng thực thi quy trình.
Thực thi là một lần chạy logic có trong định nghĩa của một 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 khoản phí nào. Tất cả các quá trình thực thi quy trình công việc đều độc lập và việc mở rộng quy mô nhanh chóng của sản phẩm cho phép thực thi đồng thời nhiều lần.
Các chế độ kiểm soát các lệnh thực thi
- Các bước – Để tạo quy trình công việc, bạn xác định
steps
và thứ tự thực hiện mong muốn bằng cú pháp Quy trình công việc. Mỗi quy trình làm việc phải có ít nhất một bước. - Điều kiện – Bạn có thể sử dụng khối
switch
làm cơ chế lựa chọn cho phép giá trị của biểu thức kiểm soát luồng thực thi quy trình công việc. - Lặp lại – Bạn có thể sử dụng vòng lặp
for
để 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ư một danh sách hoặc bản đồ. - Luồng công việc phụ – Quy trình công việc 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 công việc của bạn sẽ lặp lại nhiều lần.
Kích hoạt lượt thực thi
- Thủ công – Bạn có thể quản lý quy trình công việc từ bảng điều khiển Google Cloud hoặc từ dòng lệnh bằng Google Cloud CLI.
- Có lập trình – Bạn có thể dùng Thư viện ứng dụng đám mây cho API Quy trình công việc hoặc API REST để quản lý quy trình công việc.
- Đã lên lịch – Bạn có thể sử dụng Trình lập lịch biểu đám mây để chạy quy trình công 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 (được đặt trong khối chính). Khối chính chấp nhận một đối số là bất kỳ kiểu dữ liệu JSON hợp lệ nào. Trường thông số đặt tên cho biến mà quy trình công việc sử 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ách hàng không tồn tại, thì trước tiên, quy trình công việc sẽ thực hiện lệnh gọi API để tạo khách hàng, sau đó cập nhật điểm phần 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ố để tính điểm phần thưởng cho khách hàng. Hãy xem mẫu 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 bên ngoài của 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ừ dữ liệu đầu ra trước đó.
CUSTOMER_SERVICE_URL=http://$(kubectl get svc customer-service -o=jsonpath='{.status.loadBalancer.ingress[0].ip}')
Thay thế URL đăng ký 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 dịch vụ Workflows và biến môi trường 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ông việc với các quyền sau:
- API ghi nhật ký cuộc gọi
- Xuất bản 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 này đượ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 lại nguồn quy trình công việc và các thông tin chi tiết khác(thẻ Trình kích hoạt). Hiện tại không có điều kiện kích hoạt nào được định cấu hình để thực thi quy trình làm việc này. Bạn sẽ thiết lập tính năng 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 hai chủ đề Pub/Sub và định cấu hình một điều kiện kích hoạt Eventarc.
Ứng dụng Order Service sẽ đăng thông báo lên order-topic
kèm theo thông tin về các đơn đặt hàng mới.
Quy trình công việc sẽ đăng thông báo lên order-points-topic
kèm theo thông tin về điểm thưởng cho đơn đặt hàng và tổng số tiền. Dịch vụ đặt hàng(không được triển khai cho phần phòng thí nghiệm này) hiển thị điểm cuối mà gói thuê bao Đẩy dùng 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à điều kiện kích hoạt Eventarc sẽ 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 vào 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 trình kích hoạt Eventarc để theo dõi thông báo Pub/Sub và gửi chúng đế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 xét điều kiện kích hoạt Eventarc đã tạo.
Xem lại gói thuê bao đã tạo cho điều kiện kích hoạt.
Xem xét các thay đổi ở phía quy trình công việc. Đã thêm một trình kích hoạt mới.
7. Kiểm thử quy trình công việc
Để mô phỏng dịch vụ đặt hàng, bạn sẽ gửi thông báo tới 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 chi tiết thực thi quy trình công việc và nhật ký.
8. Ghi nhật ký có cấu trúc quy trình công việc
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à dưới tên nhật ký projects/${PROJECT_ID}/logs/Workflows
.
Xem lại 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ở Logs Explorer (Trình khám phá nhật ký) trong Cloud Console rồi chạy 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 Mỹ.
Để hiển thị trường truy vấn tìm kiếm, hãy nhấp vào "Hiển thị truy vấn".
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)"
Kết quả mẫu bằng cách sử dụng định dạng table
:
Chạy lệnh dưới đây để 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
Kết quả mẫu bằng cách sử dụng định dạng json
:
9. Kiểm tra hồ sơ của 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 một đơn đặt hàng mới nhiều lần và xác minh điểm thưởng của khách hàng bằng lệnh curl.
Xuất bản thông báo cho đơ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 thưởng của khách hàng:
curl $CUSTOMER_SERVICE_URL/customer | jq
Chạy lệnh dưới đây để 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 thành lớp học lập trình!
Nội dung chúng ta đã đề 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 lệnh gọi API đến ứng dụng chạy trên GKE Autopilot
- Cách đị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 Workflows trong Cloud Logging và sử dụng gcloud CLI
Bước tiếp theo:
Khám phá các lớp học lập trình khác về Cymbal Eats:
- Kích hoạt quy trình công việc trên đám mây 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ư qua Cloud Run
- Kết nối với các cơ sở dữ liệu được quản lý toàn diện qua Cloud Run
- Ứng dụng không máy chủ bảo mật bằng proxy nhận biết danh tính (IAP)
- Kích hoạt công việc trong Cloud Run bằng Cloud Scheduler
- Triển khai an toàn cho Cloud Run
- Bảo mật lưu lượng truy cập vào Cloud Run
Dọn dẹp
Để tránh làm phát sinh chi phí cho các tài nguyên được sử dụng trong hướng dẫn này trong tài khoản Google Cloud của bạn, hãy xoá dự án chứa các tài nguyên đó, hoặc giữ lại dự án và xoá từng tài nguyên riêng lẻ.
Xoá dự án
Cách dễ nhất để loại bỏ việc thanh toán là xoá dự án bạn đã tạo cho phần hướng dẫn.