Thông tin về lớp học lập trình này
1. Giới thiệu
Tổng quan
Các bản sửa đổi Cloud Run cho phép bạn chỉ định bản sửa đổi nào sẽ nhận được lưu lượng truy cập và tỷ lệ phần trăm lưu lượng truy cập sẽ gửi đến mỗi bản sửa đổi. Tính năng Bản sửa đổi cho phép bạn quay lại một bản sửa đổi trước đó, từng bước triển khai một bản sửa đổi và phân chia lưu lượng truy cập giữa nhiều bản sửa đổi.
Lớp học lập trình này cho bạn biết cách sử dụng các bản sửa đổi để quản lý lưu lượng truy cập đến dịch vụ Cloud Run. Bạn có thể tìm hiểu thêm về các bản sửa đổi trong tài liệu về Cloud Run.
Kiến thức bạn sẽ học được
- Cách phân chia lưu lượng truy cập giữa hai hoặc nhiều bản sửa đổi cho một dịch vụ Cloud Run
- Cách từng bước triển khai bản sửa đổi mới
- Cách quay lại một bản sửa đổi trước đó
2. Cách thiết lập và các yêu cầu
Điều kiện tiên quyết
- Bạn đã đăng nhập vào Cloud Console.
- Bạn đã triển khai một dịch vụ Cloud Run. Ví dụ: bạn có thể làm theo hướng dẫn triển khai dịch vụ Cloud Run để bắt đầu.
Đặt biến môi trường
Bạn có thể thiết lập các biến môi trường sẽ được sử dụng trong suốt lớp học lập trình này.
PROJECT_ID=YOUR-PROJECT-ID
REGION=YOUR_REGION
BG_COLOR=darkseagreen
SERVICE_NAME=traffic-revisions-color
AR_REPO=traffic-revisions-color-repo
Tạo kho lưu trữ đăng ký cấu phần phần mềm cho Dịch vụ
gcloud artifacts repositories create $AR_REPO \
--repository-format=docker \
--location=$REGION \
--description="codelab for finetuning using CR jobs" \
--project=$PROJECT_ID
3. Phân tách lưu lượng truy cập
Mẫu này cho bạn biết cách tạo dịch vụ Cloud Run đọc biến môi trường màu và phản hồi lại bằng tên bản sửa đổi sử dụng màu nền đó.
Mặc dù lớp học lập trình này sử dụng python, nhưng bạn có thể sử dụng bất kỳ môi trường thời gian chạy nào.
Đặt biến môi trường
Bạn có thể thiết lập các biến môi trường sẽ được sử dụng trong suốt lớp học lập trình này.
REGION=<YOUR_REGION> PROJECT_ID=<YOUR-PROJECT-ID> BG_COLOR=darkseagreen SERVICE_NAME=traffic-revisions-color AR_REPO=traffic-revisions-color-repo
Tạo dịch vụ
Trước tiên, hãy tạo một thư mục cho mã nguồn và cd vào thư mục đó.
mkdir traffic-revisions-codelab && cd $_
Sau đó, hãy tạo tệp main.py
có nội dung sau:
import os from flask import Flask, render_template_string app = Flask(__name__) TEMPLATE = """ <!doctype html> <html lang="en"> <head> <title>Cloud Run Traffic Revisions</title> <style> body { display: flex; justify-content: center; align-items: center; min-height: 50vh; background-color: {{ bg_color }}; /* Set by environment variable */ font-family: sans-serif; } .content { background-color: rgba(255, 255, 255, 0.8); /* Semi-transparent white background */ padding: 2em; border-radius: 8px; text-align: center; box-shadow: 0 4px 8px rgba(0,0,0,0.1); } </style> </head> <body> <div class="content"> <p>background color: <strong>{{ color_name }}</strong></p> </div> </body> </html> """ @app.route('/') def main(): """Serves the main page with a background color from the ENV.""" # Get the color from the 'BG_COLOR' environment variable. # Default to 'white' if the variable is not set. color = os.environ.get('BG_COLOR', 'white').lower() return render_template_string(TEMPLATE, bg_color=color, color_name=color) if __name__ == '__main__': port = int(os.environ.get('PORT', 8080)) app.run(debug=True, host='0.0.0.0', port=port)
Tiếp theo, hãy tạo tệp requirements.txt
có nội dung sau:
Flask>=2.0.0 gunicorn>=20.0.0
Cuối cùng, hãy tạo một Dockerfile
FROM python:3.12-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
EXPOSE 8080
ENV PYTHONPATH /app
CMD ["gunicorn", "--bind", "0.0.0.0:8080", "main:app"]
Tạo hình ảnh trong CSDL Cấu phần phần mềm bằng cách sử dụng Buildpacks thông qua Cloud Build:
gcloud builds submit \
--tag $REGION-docker.pkg.dev/$PROJECT_ID/$AR_REPO/$SERVICE_NAME
Sau đó, triển khai bản sửa đổi đầu tiên cho Cloud Run với màu xanh lục đậm:
gcloud run deploy $SERVICE_NAME \
--image $REGION-docker.pkg.dev/$PROJECT_ID/$AR_REPO/$SERVICE_NAME:latest \
--region $REGION \
--allow-unauthenticated \
--set-env-vars BG_COLOR=darkseagreen
Để kiểm thử dịch vụ, bạn có thể mở điểm cuối ngay trong trình duyệt web để thấy màu nền là xanh lục đậm.
Bây giờ, hãy triển khai bản sửa đổi thứ hai có màu nền nâu nhạt.
# update the env var BG_COLOR=tan gcloud run deploy $SERVICE_NAME \ --image $REGION-docker.pkg.dev/$PROJECT_ID/$AR_REPO/$SERVICE_NAME:latest \ --region $REGION \ --set-env-vars BG_COLOR=tan
Bây giờ, khi làm mới trang web, bạn sẽ thấy màu nền màu nâu nhạt.
Phân chia lưu lượng truy cập theo tỷ lệ 50/50
Để phân chia lưu lượng truy cập giữa các bản sửa đổi màu xanh lục đậm và màu nâu, bạn cần tìm mã bản sửa đổi của các dịch vụ Cloud Run cơ bản. Bạn có thể xem mã bản sửa đổi bằng cách chạy lệnh sau:
gcloud run revisions list --service $SERVICE_NAME \ --region $REGION --format 'value(REVISION)'
Bạn sẽ thấy kết quả tương tự như bên dưới
traffic-revisions-color-00003-qoq traffic-revisions-color-00002-zag
Bạn có thể phân chia lưu lượng truy cập theo tỷ lệ 50/50 giữa hai bản sửa đổi bằng cách chạy lệnh sau với các bản sửa đổi:
gcloud run services update-traffic $SERVICE_NAME \ --region $REGION \ --to-revisions YOUR_REVISION_1=50,YOUR_REVISION_2=50
Kiểm thử tính năng phân tách lưu lượng truy cập
Bạn có thể kiểm thử dịch vụ này bằng cách làm mới trang trong trình duyệt.
Trong một nửa số lần, bạn sẽ thấy bản sửa đổi màu xanh lục đậm và trong nửa còn lại, bạn sẽ thấy bản sửa đổi màu nâu. Bạn cũng sẽ thấy tên bản sửa đổi được liệt kê trong kết quả, ví dụ:
<html><body style="background-color:tan;"><div><p>Hello traffic-revisions-color-00003-qoq</p></div></body></html>
4. Phát hành dần
Trong phần này, bạn sẽ tìm hiểu cách từng bước triển khai các thay đổi cho một bản sửa đổi Dịch vụ đám mây mới. Bạn có thể tìm hiểu thêm về việc triển khai từng bước trong tài liệu.
Bạn sẽ sử dụng cùng một mã như phần trước, nhưng sẽ triển khai mã đó dưới dạng một dịch vụ Cloud Run mới.
Trước tiên, hãy đặt màu nền thành beige
và triển khai hàm có tên gradual-rollouts-colors
.
Để triển khai trực tiếp một hàm Cloud Run trên Cloud Run, hãy chạy lệnh sau:
# update the env var BG_COLOR=beige gcloud beta run deploy gradual-rollouts-colors \ --image $REGION-docker.pkg.dev/$PROJECT_ID/$AR_REPO/$SERVICE_NAME:latest \ --region $REGION \ --allow-unauthenticated \ --update-env-vars BG_COLOR=$BG_COLOR
Giả sử chúng ta muốn từng bước triển khai một bản sửa đổi mới có màu nền hoa oải hương.
Trước tiên, hãy đặt bản sửa đổi hiện tại màu be để nhận 100% lưu lượng truy cập. Điều này sẽ đảm bảo rằng các bản sửa đổi trong tương lai của bạn sẽ không nhận được lưu lượng truy cập nào. Theo mặc định, Cloud Run sẽ đặt 100% lưu lượng truy cập vào bản sửa đổi có cờ latest
. Bằng cách chỉ định thủ công rằng bản sửa đổi màu be hiện tại này sẽ nhận được tất cả lưu lượng truy cập, bản sửa đổi có cờ latest
sẽ không còn nhận được 100% lưu lượng truy cập nữa. Xem tài liệu.
# get the revision name BEIGE_REVISION=$(gcloud run revisions list --service gradual-rollouts-colors \ --region $REGION --format 'value(REVISION)') # now set 100% traffic to that revision gcloud run services update-traffic gradual-rollouts-colors \ --to-revisions=$BEIGE_REVISION=100 \ --region $REGION
Bạn sẽ thấy kết quả tương tự như Traffic: 100% radual-rollouts-colors-00001-yox
Giờ đây, bạn có thể triển khai một bản sửa đổi mới sẽ không nhận được lưu lượng truy cập nào. Thay vì thực hiện bất kỳ thay đổi nào về mã, bạn có thể cập nhật biến môi trường BG_COLOR cho bản sửa đổi này.
Để triển khai trực tiếp một hàm Cloud Run trên Cloud Run, hãy chạy lệnh sau:
# update color BG_COLOR=lavender # deploy the function that will not receive any traffic gcloud beta run deploy gradual-rollouts-colors \ --image $REGION-docker.pkg.dev/$PROJECT_ID/$AR_REPO/$SERVICE_NAME:latest \ --region $REGION \ --allow-unauthenticated \ --update-env-vars BG_COLOR=$BG_COLOR
và giờ đây, khi truy cập vào trang web trong trình duyệt, bạn sẽ thấy màu be, mặc dù màu hoa oải hương là bản sửa đổi được triển khai gần đây nhất.
Kiểm thử một Bản sửa đổi phân phát 0% lưu lượng truy cập
Giả sử bạn đã xác minh rằng bản sửa đổi đã được triển khai thành công và đang phân phát 0% lưu lượng truy cập. Mặc dù đã vượt qua các bước kiểm tra tình trạng, bạn vẫn nên xác minh rằng bản sửa đổi này đang sử dụng màu nền hoa oải hương.
Để kiểm thử bản sửa đổi màu hoa oải hương, bạn có thể áp dụng thẻ cho bản sửa đổi đó. Việc gắn thẻ cho phép bạn trực tiếp kiểm thử bản sửa đổi mới tại một URL cụ thể mà không cần phân phát lưu lượng truy cập.
Trước tiên, hãy lấy URL hình ảnh cho bản sửa đổi mới nhất đó (màu hoa oải hương).
IMAGE_URL_LAVENDER=$(gcloud run services describe gradual-rollouts-colors --region $REGION --format 'value(IMAGE)')
Bây giờ, hãy gắn thẻ hình ảnh đó bằng màu liên kết.
gcloud run deploy gradual-rollouts-colors --image $IMAGE_URL_LAVENDER --no-traffic --tag $BG_COLOR --region $REGION
Bạn sẽ thấy kết quả tương tự như sau:
The revision can be reached directly at https://lavender---gradual-rollouts-colors-<hash>-<region>.a.run.app
Giờ đây, khi truy cập vào URL cụ thể của bản sửa đổi đó, bạn sẽ thấy màu hoa oải hương.
Tăng dần lưu lượng truy cập
Giờ đây, bạn có thể bắt đầu gửi lưu lượng truy cập đến bản sửa đổi màu hoa oải hương. Ví dụ bên dưới cho thấy cách gửi 1% lưu lượng truy cập đến lavender.
gcloud run services update-traffic gradual-rollouts-colors --region $REGION --to-tags lavender=1
Để gửi 50% lưu lượng truy cập đến lavender, bạn có thể sử dụng cùng một lệnh, nhưng chỉ định 50%.
gcloud run services update-traffic gradual-rollouts-colors --region $REGION --to-tags lavender=50
Bạn sẽ thấy danh sách lưu lượng truy cập mà mỗi bản sửa đổi nhận được.
Traffic: 50% gradual-rollouts-colors-00001-hos 50% gradual-rollouts-colors-00004-mum lavender: https://lavender---gradual-rollouts-colors-<hash>-<region>.a.run.app
Khi đã sẵn sàng triển khai hoàn toàn màu hoa oải hương, bạn có thể đặt màu hoa oải hương thành 100% để thay thế màu be.
gcloud run services update-traffic gradual-rollouts-colors --region $REGION --to-tags lavender=100
và giờ đây, khi truy cập vào trang web, bạn sẽ chỉ thấy màu hoa oải hương.
5. Khôi phục
Giả sử bạn đã nhận được ý kiến phản hồi ban đầu về trải nghiệm người dùng, cho biết khách hàng thích màu be hơn màu hoa oải hương và bạn cần quay lại màu be.
Bạn có thể quay lại bản sửa đổi trước (màu be) bằng cách chạy lệnh sau:
gcloud run services update-traffic gradual-rollouts-colors --region $REGION --to-revisions $BEIGE_REVISION=100
và giờ đây, khi truy cập vào trang web, bạn sẽ thấy màu be làm màu nền.
Bạn có thể tìm hiểu thêm về tính năng khôi phục trong tài liệu.
6. Xin chúc mừng!
Chúc mừng bạn đã hoàn thành lớp học lập trình!
Bạn nên xem tài liệu về cách triển khai, khôi phục và di chuyển lưu lượng truy cập
Nội dung đã đề cập
- Cách phân chia lưu lượng truy cập giữa hai hoặc nhiều bản sửa đổi cho một dịch vụ Cloud Run
- Cách từng bước triển khai bản sửa đổi mới
- Cách quay lại một bản sửa đổi trước đó
7. Dọn dẹp
Để tránh bị tính phí do nhầm lẫn (ví dụ: nếu hàm Cloud Run này vô tình được gọi nhiều lần hơn hạn mức gọi Cloud Run hằng tháng trong cấp miễn phí), bạn có thể xoá dịch vụ Cloud Run hoặc xoá dự án mà bạn đã tạo ở Bước 2.
Để xoá một dịch vụ Cloud Run, hãy chuyển đến Cloud Run trong Cloud Console tại https://console.cloud.google.com/run/ rồi xoá các hàm bạn đã tạo trong lớp học lập trình này.
Nếu chọn xoá toàn bộ dự án, bạn có thể truy cập vào https://console.cloud.google.com/cloud-resource-manager, chọn dự án bạn đã tạo ở Bước 2 rồi chọn Xoá. Nếu xoá dự án, bạn sẽ cần thay đổi dự án trong SDK trên đám mây. Bạn có thể xem danh sách tất cả dự án hiện có bằng cách chạy gcloud projects list
.