1. Tổng quan
Trong lớp học lập trình này, bạn sẽ tạo một công việc trên Cloud Run và thiết lập một công việc trên Cloud Scheduler. Bạn sẽ triển khai Dịch vụ trình đơn Cymbal Eats bằng tập lệnh thiết lập. Bạn sẽ tạo một công việc Cloud Run để thực hiện lệnh gọi API đến Dịch vụ trình đơn Cymbal Eats. Bạn sẽ thực thi công việc bằng Google Cloud CLI và thiết lập lịch biểu cho công việc đó. Bạn sẽ xác minh quá trình thực thi bằng cách xem lại nhật ký và thực hiện lệnh gọi API đến Dịch vụ trình đơn để xác nhận rằng các mục trong trình đơn đã bị xoá.
Công việc trên Cloud Run là gì?
Công việc trên Cloud Run chạy một vùng chứa không phân phát yêu cầu web mà thực thi các tác vụ vận hành hoặc xử lý dữ liệu. Vùng chứa sẽ chạy tác vụ và thoát khi hoàn tất.
Công việc dọn dẹp dịch vụ
Công việc dịch vụ dọn dẹp sẽ truy xuất các mục trong trình đơn ở trạng thái Không thành công và xoá các mục đó. Khi bạn tạo các mục mới trong trình đơn, hình ảnh sẽ được phân tích bằng API Vision để xác định xem đó có phải là món ăn hay không. Đối với những hình ảnh không xác thực được, trạng thái của các mục trong trình đơn sẽ được cập nhật thành Không thành công và sau đó bị công việc dọn dẹp xoá bỏ.
Kiến thức bạn sẽ học được
Trong lớp học này, bạn sẽ tìm hiểu cách thực hiện những việc sau:
- Tạo công việc trên Cloud Run
- Thực thi công việc trên Cloud Run
- Tạo công việc trên Cloud Scheduler
- Xác minh quá trình thực thi công việc
Điều kiện tiên quyết
- Lớp học này giả định rằng bạn đã quen thuộc với Cloud Console và môi trường shell.
- Bạn nên có kinh nghiệm sử dụng Cloud Run và Cloud Scheduler nhưng không bắt buộc.
2. Cách thiết lập và các 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 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ị cho 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 trên 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 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ã được tạo, bạn có thể tạo một mã ngẫu nhiên khác. Ngoài ra, bạn có thể thử dùng tên của riêng mình để xem tên đó có được chấp nhận 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ẽ được giữ nguyên trong suốt thời gian diễn ra dự án. - Xin lưu ý rằng có một giá trị thứ ba là Mã 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.
- 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 tham gia lớp học lập trình này sẽ không tốn kém nhiều chi phí, nếu có. Để tắt các tài nguyên để không bị tính phí sau khi hoàn tất 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í 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.
Trên Cloud Shell, hãy chạy lệnh sau để nhân bản mã ứng dụng từ kho lưu trữ này và chuyển đến thư mục chứa dịch vụ trình đơn:
git clone https://github.com/GoogleCloudPlatform/cymbal-eats.git && cd cymbal-eats/menu-service
Triển khai dịch vụ Trình đơn bằng tập lệnh thiết lập cho Cloud Run. Dịch vụ Trình đơn là một dịch vụ vi mô dựa trên Java được xây dựng bằng khung Quarkus sử dụng cơ sở dữ liệu Cloud SQL Postgres cho phần phụ trợ. Dịch vụ Trình đơn là phần phụ thuộc thời gian chạy cho công việc Cloud Run mà bạn sẽ tạo trong các bước sau.
./setup.sh
Quá trình triển khai sẽ mất khoảng 10 phút để tạo tất cả thành phần bắt buộc.
Tiếp tục thực hiện các bước tiếp theo sau khi thực thi lệnh trên.
3. Khám phá mã Công việc trên Cloud Run
Mở một thẻ mới trong Cloud Shell bằng cách nhấp vào biểu tượng dấu cộng.
Chuyển đến thư mục chứa dịch vụ dọn dẹp và xem lại các tệp tạo nên công việc:
cd ~/cymbal-eats/cleanup-service
Dịch vụ dọn dẹp trong thư mục này chứa Dockerfile
xác định hình ảnh vùng chứa cho công việc của dịch vụ dọn dẹp với các phần phụ thuộc bắt buộc(httpie, jq).
Dockerfile
FROM ubuntu:latest
RUN apt-get update && apt-get install -y httpie jq && apt-get clean
COPY script.sh /
RUN chmod +x /script.sh
CMD ["/script.sh"]
ENTRYPOINT ["/bin/bash"]
Tập lệnh dọn dẹp thực tế, được liệt kê bên dưới, chứa các lệnh để lấy danh sách các mục trong trình đơn ở trạng thái không thành công và xoá các mục đó bằng cách thực hiện lệnh gọi API đến dịch vụ Trình đơn.
script.sh
echo "FAILED_ITEM_AGE=$FAILED_ITEM_AGE"
echo "MENU_SERVICE_URL=$MENU_SERVICE_URL"
# Failed items older than FAILED_ITEM_AGE in minutes
for id in $(http GET $MENU_SERVICE_URL/menu/failed | jq '[.[] | select(.updateDateTime < ((now - 60 * (env.FAILED_ITEM_AGE | tonumber) )| strftime("%Y-%m-%dT%H:%M:%S.%f")))]'| jq '.[].id'); do
echo "Deleting Menu Item : $MENU_SERVICE_URL/menu/$id"
http GET $MENU_SERVICE_URL/menu/$id
http DELETE $MENU_SERVICE_URL/menu/$id
done
# Processing items older than FAILED_ITEM_AGE in minutes
for id in $(http GET $MENU_SERVICE_URL/menu/processing | jq '[.[] | select(.updateDateTime < ((now - 60 * (env.FAILED_ITEM_AGE | tonumber))| strftime("%Y-%m-%dT%H:%M:%S.%f")))]'| jq '.[].id'); do
echo "Deleting Menu Item : $MENU_SERVICE_URL/menu/$id"
http GET $MENU_SERVICE_URL/menu/$id
http DELETE $MENU_SERVICE_URL/menu/$id
done
Hãy lưu ý những điều sau đây về tập lệnh:
- Biến môi trường
FAILED_ITEM_AGE
vàMENU_SERVICE_URL
sẽ được đặt trong quá trình triển khai và được công việc trên Cloud Run truyền. FAILED_ITEM_AGE
– Số phút trước khi mục Không thành công bị xoá.MENU_SERVICE_URL
– URL dịch vụ Thực đơn của Cymbal Eats.
4. Tạo công việc trên Cloud Run
Tiếp theo, bạn sẽ tạo một hình ảnh vùng chứa và phát hành hình ảnh đó lên Cấu phần phần mềm.
Hình ảnh vùng chứa này sẽ được dùng để tạo một công việc trên Cloud Run.
Bật API dịch vụ:
gcloud services enable \
run.googleapis.com \
artifactregistry.googleapis.com \
cloudscheduler.googleapis.com \
--quiet
Thiết lập biến môi trường:
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)')
export REGION=us-east1
export MENU_SERVICE_NAME=menu-service
Tạo một kho lưu trữ mới của Cấu phần phần mềm để lưu trữ hình ảnh docker cho công việc dọn dẹp:
gcloud artifacts repositories create cymbal-eats --repository-format=docker --location=$REGION
Tạo hình ảnh vùng chứa bằng Cloud Build và đẩy hình ảnh đó vào Cấu phần phần mềm bằng một lệnh:
gcloud builds submit -t $REGION-docker.pkg.dev/$PROJECT_NAME/cymbal-eats/cleanup-service:latest
Kết quả điểm dữ liệu:
DURATION: 35S SOURCE: gs://cymbal-eats-14906-569_cloudbuild/source/1657126400.933586-dc3e91ec85934a55bb6d2f7012611365.tgz IMAGES: us-east1-docker.pkg.dev/cymbal-eats-14906-569/cymbal-eats/cleanup-service (+1 more) STATUS: SUCCESS
Sau khi xuất bản, hãy chuyển đến Registry Artifact (Cơ sở đăng ký cấu phần phần mềm) và xem lại hình ảnh đã xuất bản:
Chuyển về thẻ Cloud Shell thứ hai. Chạy lệnh sau để mô tả dịch vụ Trình đơn và lưu URL vào biến môi trường. Biến môi trường này sẽ được dùng để định cấu hình công việc trên Cloud Run.
MENU_SERVICE_URL=$(gcloud run services describe $MENU_SERVICE_NAME \
--region=$REGION \
--format=json | jq \
--raw-output ".status.url")
Tạo một công việc trên Cloud Run để dọn dẹp các mục trong trình đơn không thành công đã cũ hơn 1 phút [do FAILED_ITEM_AGE
đặt].
gcloud beta run jobs create cleanup-service \
--image=$REGION-docker.pkg.dev/$PROJECT_NAME/cymbal-eats/cleanup-service:latest \
--set-env-vars MENU_SERVICE_URL=$MENU_SERVICE_URL \
--set-env-vars FAILED_ITEM_AGE=1 \
--region $REGION
Kết quả điểm dữ liệu:
Creating Cloud Run job [cleanup-service] in project [cymbal-eats] region [us-east1] OK Creating job... Done. Done. Job [cleanup-service] has successfully been created.
Chuyển đến phần JOBS (CÔNG VIỆC) của Cloud Run trong bảng điều khiển và xem lại công việc đã tạo.
Nhấp vào công việc và khám phá các thẻ có sẵn: HISTORY (NHẬT KÝ), LOGS (NHẬT KÝ), CONFIGURATION (CẤU HÌNH) và YAML.
Xác minh rằng bạn đã đặt biến môi trường bằng cách xem lại mục CONFIGURATION (CẤU HÌNH) của công việc trong bảng điều khiển:
(Không bắt buộc) Nếu muốn thay đổi biến Tuổi của mặt hàng không thành công hoặc URL của Dịch vụ trình đơn, sau khi tạo công việc trên Cloud Run, bạn có thể sử dụng lệnh cập nhật:
gcloud beta run jobs update cleanup-service \
--image=$REGION-docker.pkg.dev/$PROJECT_NAME/cymbal-eats/cleanup-service:latest \
--set-env-vars MENU_SERVICE_URL=$MENU_SERVICE_URL \
--set-env-vars FAILED_ITEM_AGE=1 \
--region $REGION
Để xác thực công việc, hãy thực thi công việc trên Cloud Run bằng cách chạy lệnh sau:
gcloud beta run jobs execute cleanup-service --region=$REGION
Kết quả điểm dữ liệu:
OK Creating execution... Done. OK Provisioning resources... Done. Execution [cleanup-service-rlxs4] has successfully started running. View details about this execution by running: gcloud beta run jobs executions describe cleanup-service-rlxs4
Chuyển sang thẻ NHẬT KÝ để xem kết quả của công việc. Bạn sẽ thấy URL của dịch vụ Tuổi của mặt hàng và Trình đơn không thành công trong nhật ký.
5. Thiết lập lịch biểu cho công việc trên Cloud Run
Trình lập lịch biểu trên đám mây là một trình lập lịch biểu công việc cron cấp doanh nghiệp được quản lý đầy đủ. Công cụ này cho phép bạn lên lịch cho hầu hết mọi công việc, bao gồm cả công việc hàng loạt, công việc dữ liệu lớn, hoạt động cơ sở hạ tầng đám mây, v.v.
Một phương pháp hay nhất về bảo mật khi làm việc với công việc của Trình lập lịch biểu trên đám mây là thực thi từng công việc bằng thông tin xác thực riêng biệt. Trong bước này, hãy tạo một Tài khoản dịch vụ để công việc lên lịch dọn dẹp sử dụng.
export SCHEDULER_SERVICE_ACCOUNT=cleanup-scheduler-job-sa
gcloud iam service-accounts create ${SCHEDULER_SERVICE_ACCOUNT}
Công việc của Cloud Scheduler sẽ cần có quyền gọi đến Công việc trên Cloud Run.
Cấp vai trò Cloud Run Invoker
cho tài khoản dịch vụ được dùng trong công việc của Cloud Scheduler:
gcloud projects add-iam-policy-binding ${PROJECT_ID} \
--member="serviceAccount:${SCHEDULER_SERVICE_ACCOUNT}@${PROJECT_ID}.iam.gserviceaccount.com" \
--role="roles/run.invoker"
Tiếp theo, bạn sẽ thiết lập lịch chạy công việc dịch vụ dọn dẹp.
Có nhiều loại mục tiêu được Trình lập lịch biểu trên đám mây hỗ trợ.
- HTTP
- Pub/Sub
- HTTP của App Engine
Bạn sẽ tạo một công việc của trình lập lịch biểu bằng loại mục tiêu HTTP.
Để minh hoạ, bạn sẽ lên lịch chạy chương trình này 5 phút một lần.
gcloud scheduler jobs create http cleanup-schedule \
--location $REGION \
--schedule="*/5 * * * *" \
--uri="https://$REGION-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/$PROJECT_ID/jobs/cleanup-service:run" \
--http-method POST \
--oauth-service-account-email ${SCHEDULER_SERVICE_ACCOUNT}@${PROJECT_ID}.iam.gserviceaccount.com
Xem lại tham số uri
dùng để gọi Công việc trên Cloud Run:
REGION
vàPROJECT_ID
– Khu vực Cloud Run và Mã dự án nơi triển khai công việc dịch vụ dọn dẹpcleanup-service
– tên của Công việc trên Cloud Run
Chuyển đến Cloud Scheduler (Trình lập lịch biểu trên đám mây) trong bảng điều khiển để xem lại công việc đã tạo của trình lập lịch biểu:
Xem các tuỳ chọn có sẵn trong trình đơn Thao tác.
6. Kiểm thử công việc trên Cloud Run
Sử dụng các điểm cuối của Dịch vụ trình đơn để xem xét các mục trong trình đơn hiện có và trạng thái của các mục đó:
curl ${MENU_SERVICE_URL}/menu | jq
Kết quả:
Bạn sẽ thấy 3 mục trong trình đơn ở trạng thái Ready
.
Thay đổi trạng thái của mục trong trình đơn #1 thành Failed
:
curl -X PUT "${MENU_SERVICE_URL}/menu/1" \
-H 'Content-Type: application/json' \
-d '{"status": "Failed"}' | jq
Đợi 1 phút. Để xoá một mục trong trình đơn, mục đó cần có thời gian tồn tại là 1 phút, như được đặt bằng tham số FAILED_ITEM_AGE
.
Bạn có thể đợi lần chạy theo lịch tiếp theo hoặc buộc thực thi công việc từ bảng điều khiển.
Có nhiều cách để kích hoạt một công việc, thông qua giao diện người dùng hoặc từ dòng lệnh.
Đối với ví dụ này, hãy chạy lệnh trong Cloud Shell(Tuỳ chọn #3) để kích hoạt công việc.
- Trong Cloud Scheduler bằng cách chọn "Buộc chạy công việc" trong trình đơn Hành động.
- Trong Công việc chạy trên đám mây bằng cách nhấp vào nút "THỰC THI".
- Trên Cloud Shell bằng cách chạy lệnh sau:
gcloud beta run jobs execute cleanup-service --region=$REGION
Chuyển đến phần JOBS (CÔNG VIỆC) của Cloud Run, mở thẻ LOGS (NHẬT KÝ) và xác minh rằng mục trong trình đơn đã bị xoá.
Lọc nhật ký theo từ khoá "xoá" để tìm nhật ký.
Sử dụng các điểm cuối của Dịch vụ trình đơn để kiểm tra các mục trong trình đơn hiện có thông qua điểm cuối REST.
curl ${MENU_SERVICE_URL}/menu | jq
Kết quả:
Bạn sẽ thấy 2 mục trong trình đơn ở trạng thái Ready
.
7. 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ội dung chúng ta đã đề cập:
- Cách tạo công việc trên Cloud Run
- Cách thực thi công việc trên Cloud Run
- Cách tạo công việc trên Cloud Scheduler
- Cách xác minh quá trình thực thi công việc
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 tính năng 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 diện từ Cloud Run
- Bảo mật ứng dụng không có máy chủ bằng Proxy nhận biết danh tính (IAP)
- Triển khai an toàn lên Cloud Run
- Bảo mật lưu lượng truy cập vào Cloud Run
- Kết nối với AlloyDB riêng tư từ GKE Autopilot
Dọn dẹp
Để tránh bị tính phí cho tài khoản Google Cloud của bạn đối với các tài nguyên được sử 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 và xoá từng tài nguyên.
Xoá dự án
Cách dễ nhất để loại bỏ tính năng thanh toán là xoá dự án mà bạn đã tạo cho hướng dẫn này.