1. Giới thiệu
Tổng quan
Bản sửa đổi Cloud Run cho phép bạn chỉ định bản sửa đổi nào sẽ nhận lưu lượng truy cập và tỷ lệ phần trăm lưu lượng truy cập cần gửi đến mỗi bản sửa đổi. Tính năng sửa đổi cho phép bạn khôi phục về một bản sửa đổi trước đó, ra mắt dần 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 hướng dẫn bạn cách sử dụng 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 ra mắt dần một bản sửa đổi mới
- Cách khôi phục về một bản sửa đổi trước đó
2. Thiết lập và yêu cầu
Điều kiện tiên quyết
- Bạn đã đăng nhập vào Cloud Console.
- Trước đây, 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 một dịch vụ Cloud Run để bắt đầu.
Đặt các biến môi trường
Bạn có thể thiết lập các biến môi trường sẽ được 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 một kho lưu trữ Artifact Registry 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 một 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 bằ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ỳ thời gian chạy nào.
Đặt các biến môi trường
Bạn có thể thiết lập các biến môi trường sẽ được 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à chuyển đến thư mục đó.
mkdir traffic-revisions-codelab && cd $_
Sau đó, hãy tạo một 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 Artifact Registry bằng Buildpack thông qua Cloud Build:
gcloud builds submit \
--tag $REGION-docker.pkg.dev/$PROJECT_ID/$AR_REPO/$SERVICE_NAME
Sau đó, hãy triển khai bản sửa đổi đầu tiên lên Cloud Run bằng màu xanh lục sẫ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ở trực tiếp điểm cuối trong trình duyệt web để xem màu nền là màu xanh lục đậm.
Giờ đây, 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
Giờ đây, khi làm mới trang web, bạn sẽ thấy màu nền nâu nhạt.
Phân tách 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 vàng, bạn cần tìm mã sửa đổi của các dịch vụ Cloud Run cơ bản. Bạn có thể xem mã 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ư kết quả bên dưới
traffic-revisions-color-00003-qoq traffic-revisions-color-00002-zag
Bạn có thể chia lưu lượng truy cập thành 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 của mình:
gcloud run services update-traffic $SERVICE_NAME \ --region $REGION \ --to-revisions YOUR_REVISION_1=50,YOUR_REVISION_2=50
Thử nghiệm việc phân chia lưu lượng truy cập
Bạn có thể kiểm thử dịch vụ bằng cách làm mới trang trong trình duyệt.
Một nửa thời gian, bạn sẽ thấy bản sửa đổi màu xanh lục sẫm và nửa còn lại, bạn sẽ thấy bản sửa đổi màu nâu vàng. Bạn cũng sẽ thấy tên bản sửa đổi trong đầu ra, 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 triển khai dần các thay đổi đối với 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ề tính năng triển khai từng bước trong tài liệu.
Bạn sẽ sử dụng cùng một mã như trong phần trước, nhưng bạn 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 là gradual-rollouts-colors.
Để triển khai một hàm Cloud Run trực tiếp lê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 ra mắt dần một bản sửa đổi mới có màu nền là hoa oải hương.
Trước tiên, hãy đặt bản sửa đổi hiện tại là 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 phiên bản sửa đổi sau này của bạn không nhận được lưu lượng truy cập. Theo mặc định, Cloud Run sẽ đặt 100% lưu lượng truy cập cho bản sửa đổi có cờ latest. Bằng cách chỉ định theo cách thủ công rằng bản sửa đổi màu be hiện tại sẽ nhận được toàn bộ 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. 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 một hàm Cloud Run trực tiếp lê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ù phiên bản gần đây nhất được triển khai là màu hoa oải hương.
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ủa bạn đượ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 quy trình kiểm tra tình trạng, nhưng bạn vẫn muố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 lavender, bạn có thể áp dụng một thẻ cho bản sửa đổi đó. Việc gắn thẻ cho phép bạn kiểm thử trực tiếp 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 đó (có màu hoa oải hương).
IMAGE_URL_LAVENDER=$(gcloud run services describe gradual-rollouts-colors --region $REGION --format 'value(IMAGE)')
Giờ đây, hãy gắn thẻ cho hình ảnh đó bằng màu sắc liên quan.
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ủa bản sửa đổi cụ thể đó, bạn sẽ thấy màu hoa oải hương.
Lưu lượng truy cập tăng dần
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 màu hoa oải hương.
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 màu hoa oải hương, bạn có thể sử dụng cùng một lệnh, nhưng chỉ định 50% thay vì 10%.
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 đang 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 ra mắt 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 phản hồi sớm 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 khôi phục về màu be.
Bạn có thể khôi phục về 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 trang web, bạn sẽ thấy màu be là màu nền.
Bạn có thể tìm hiểu thêm về tính năng khôi phục về phiên bản trướ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 này!
Bạn nên xem tài liệu về phát hành, 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 ra mắt dần một bản sửa đổi mới
- Cách khôi phục về một bản sửa đổi trước đó
7. Dọn dẹp
Để tránh bị tính phí ngoài ý muốn (ví dụ: nếu hàm Cloud Run này được gọi nhiều lần hơn hạn mức gọi Cloud Run hằng tháng của bạn 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 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 Cloud SDK. Bạn có thể xem danh sách tất cả các dự án có sẵn bằng cách chạy gcloud projects list.