1. Giới thiệu
Tổng quan
Hàm Cloud Run cho phép bạn chỉ định những bản sửa đổi sẽ nhận lưu lượng truy cập và chỉ định tỷ lệ phần trăm lưu lượng truy cập mà một bản sửa đổi nhận được. 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 các hàm 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 hàm 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 hàm Cloud Run. Ví dụ: bạn có thể làm theo hướng dẫn triển khai hàm Cloud Run để bắt đầu.
Kích hoạt Cloud Shell
- Trong Cloud Console, hãy nhấp vào Kích hoạt Cloud Shell
.

Nếu đây là lần đầu tiên bạn khởi động Cloud Shell, bạn sẽ thấy một màn hình trung gian mô tả về Cloud Shell. Nếu bạn thấy màn hình trung gian, hãy nhấp vào Tiếp tục.

Quá trình cung cấp và kết nối với Cloud Shell chỉ mất vài giây.

Máy ảo này được trang bị tất cả các công cụ phát triển cần thiết. Nền tảng này cung cấp một thư mục chính có dung lượng 5 GB và chạy trong Google Cloud, giúp tăng cường đáng kể hiệu suất mạng và hoạt động xác thực. Bạn có thể thực hiện hầu hết, nếu không muốn nói là tất cả, công việc của mình trong lớp học lập trình này bằng trình duyệt.
Sau khi kết nối với Cloud Shell, bạn sẽ thấy rằng mình đã được xác thực và dự án được đặt thành mã dự án của bạn.
- Chạy lệnh sau trong Cloud Shell để xác nhận rằng bạn đã được xác thực:
gcloud auth list
Đầu ra của lệnh
Credentialed Accounts
ACTIVE ACCOUNT
* <my_account>@<my_domain.com>
To set the active account, run:
$ gcloud config set account `ACCOUNT`
- Chạy lệnh sau trong Cloud Shell để xác nhận rằng lệnh gcloud biết về dự án của bạn:
gcloud config list project
Đầu ra của lệnh
[core] project = <PROJECT_ID>
Nếu không, bạn có thể đặt nó bằng lệnh sau:
gcloud config set project <PROJECT_ID>
Đầu ra của lệnh
Updated property [core/project].
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 hàm đọ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 node.js, nhưng bạn có thể 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
Tạo hàm
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 revisions-gcf-codelab && cd $_
Sau đó, hãy tạo một tệp package.json có nội dung sau:
{
"dependencies": {
"@google-cloud/functions-framework": "^3.0.0"
}
}
Tiếp theo, hãy tạo tệp nguồn index.js có nội dung sau:
const functions = require('@google-cloud/functions-framework');
const BG_COLOR = process.env.BG_COLOR;
const K_REVISION = process.env.K_REVISION;
functions.http('helloWorld', (req, res) => {
res.writeHead(200, { 'Content-Type': 'text/html' });
res.end('<html><body style="background-color:' + BG_COLOR + ';"' + '><div><p>' + 'Hello from ' + K_REVISION + ' using color ' + BG_COLOR + '</p></div></body>' + '</html>');
});
Để triển khai một hàm Cloud Run trực tiếp lên Cloud Run, hãy chạy lệnh sau:
gcloud beta run deploy traffic-splitting-gcf \
--source . \
--function helloWorld \
--region $REGION \
--no-allow-unauthenticated \
--set-env-vars BG_COLOR=$BG_COLOR
Nếu bạn muốn triển khai dưới dạng Cloud Functions thế hệ thứ 2, hãy dùng lệnh sau:
gcloud functions deploy traffic-splitting-gcf \ --gen2 \ --runtime=nodejs20 \ --region=$REGION \ --source=. \ --entry-point=helloWorld \ --trigger-http \ --no-allow-unauthenticated \ --set-env-vars BG_COLOR=$BG_COLOR
Để kiểm thử chức năng này, bạn có thể dùng curl cho điểm cuối hiện có để xem màu darkseagreen trong HTML hoặc dùng trình trình duyệt để truy cập trực tiếp vào điểm cuối để xem màu nền.
SERVICE_URL=$(gcloud run services describe traffic-splitting-gcf --platform managed --region $REGION --format 'value(status.url)') curl -H "Authorization: bearer $(gcloud auth print-identity-token)" -X GET $SERVICE_URL
Giờ đây, hãy triển khai bản sửa đổi thứ hai có màu nền nâu nhạt.
Để 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=tan
gcloud beta run deploy traffic-splitting-gcf \
--source . \
--function helloWorld \
--region $REGION \
--no-allow-unauthenticated \
--update-env-vars BG_COLOR=$BG_COLOR
Nếu bạn muốn triển khai dưới dạng Cloud Functions thế hệ thứ 2, hãy dùng lệnh sau:
# update the env var BG_COLOR=tan gcloud functions deploy traffic-splitting-gcf \ --gen2 \ --runtime nodejs20 \ --entry-point helloHttp \ --source . \ --region $REGION \ --trigger-http \ --no-allow-unauthenticated \ --update-env-vars BG_COLOR=$BG_COLOR
Giờ đây, khi dùng lệnh curl cho điểm cuối, bạn sẽ thấy màu nền nâu nhạt.
curl -H "Authorization: bearer $(gcloud auth print-identity-token)" -X GET $SERVICE_URL
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 traffic-splitting-gcf \ --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-splitting-gcf-00003-qoq traffic-splitting-gcf-00002-zag
Bạn có thể phân chia lưu lượng truy cập 50/50 giữa hai bản sửa đổi bằng cách chạy lệnh sau:
gcloud run services update-traffic traffic-splitting-gcf \ --region $REGION \ --to-revisions <REVISION1>=50,<REVISION2>=50
Thử nghiệm việc phân chia lưu lượng truy cập
Bạn có thể kiểm thử hàm bằng cách truy cập vào URL công khai của hàm (bằng curl hoặc trực tiếp trong trình duyệt).
curl -H "Authorization: bearer $(gcloud auth print-identity-token)" $SERVICE_URL
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 là bản sửa đổi màu nâu nhạt. 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-splitting-gcf-00006-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 Cloud Functions 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ư phần trước, nhưng sẽ triển khai mã đó dưới dạng một Cloud Function 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-gcf.
Để 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-gcf \
--source . \
--function helloWorld \
--region $REGION \
--no-allow-unauthenticated \
--update-env-vars BG_COLOR=$BG_COLOR
Nếu bạn muốn triển khai dưới dạng Cloud Functions thế hệ thứ 2, hãy dùng lệnh sau:
# update the env var BG_COLOR=beige # deploy the function gcloud functions deploy gradual-rollouts-gcf \ --gen2 \ --runtime nodejs20 \ --entry-point helloHttp \ --source . \ --region $REGION \ --trigger-http \ --no-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 hoạt động triển khai Cloud Functions trong tương lai của bạn không nhận được lưu lượng truy cập nào. Theo mặc định, Cloud Functions đặ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-gcf \ --region $REGION --format 'value(REVISION)') # now set 100% traffic to that revision gcloud run services update-traffic gradual-rollouts-gcf --to-revisions=$BEIGE_REVISION=100 --region $REGION
Bạn sẽ thấy kết quả tương tự như Traffic: 100% gradual-rollouts-gcf2-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-gcf \
--source . \
--function helloWorld \
--region $REGION \
--no-allow-unauthenticated \
--update-env-vars BG_COLOR=$BG_COLOR
Nếu bạn muốn triển khai dưới dạng Cloud Functions thế hệ thứ 2, hãy dùng lệnh sau:
# update color BG_COLOR=lavender # deploy the function that will not receive any traffic gcloud functions deploy gradual-rollouts-gcf \ --gen2 \ --runtime nodejs20 \ --entry-point helloHttp \ --source . \ --region $REGION \ --trigger-http \ --no-allow-unauthenticated \ --update-env-vars BG_COLOR=$BG_COLOR \ --tag $BG_COLOR
Bây giờ, hãy cập nhật biến môi trường SERVICE_URL để sử dụng hàm gradual-rollouts-gcf
SERVICE_URL=$(gcloud run services describe gradual-rollouts-gcf --platform managed --region $REGION --format 'value(status.url)')
và bây giờ khi bạn curl dịch vụ
curl -H "Authorization: bearer $(gcloud auth print-identity-token)" -X GET $SERVICE_URL
bạn sẽ thấy màu be, mặc dù phiên bản được triển khai gần đây nhất là màu hoa oải hương.
<html><body style="background-color:beige;"><div><p>Hello from gradual-rollouts-gcf-24jan16-staging-2-00001-kop using color beige</p></div></body></html>
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 của hình ảnh cho bản sửa đổi đó.
IMAGE_URL=$(gcloud run services describe gradual-rollouts-gcf --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-gcf --image $IMAGE_URL --no-traffic --tag $BG_COLOR --region $REGION --no-allow-unauthenticated
Bạn sẽ thấy kết quả tương tự như sau:
The revision can be reached directly at https://lavender---gradual-rollouts-gcf-k6msmyp47q-lz.a.run.app
Giờ đây, bạn có thể trực tiếp dùng lệnh curl cho bản sửa đổi này
curl -H "Authorization: bearer $(gcloud auth print-identity-token)" -X GET <DIRECT_REVISION_URL>
và xem màu hoa oải hương trong kết quả:
<html><body style="background-color:lavender;"><div><p>Hello from gradual-rollouts-gcf-24jan16-00003-xik using color lavender</p></div></body></html>
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-gcf --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-gcf --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-gcf-00001-hos
50% gradual-rollouts-gcf-00004-mum
lavender: https://lavender---gradual-rollouts-gcf-k6msmyp47q-uc.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-gcf --region $REGION --to-tags lavender=100
và bây giờ khi bạn truy cập hoặc curl URL dịch vụ hàm gradual-rollouts-gcf,
curl -H "Authorization: bearer $(gcloud auth print-identity-token)" -X GET $SERVICE_URL
bạn sẽ chỉ thấy màu hoa oải hương.
<html><body style="background-color:lavender;"><div><p>Hello gradual-rollouts-gcf-00004-mum</p></div></body></html>
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 này.
gcloud run services update-traffic gradual-rollouts-gcf --region $REGION --to-revisions $BEIGE_REVISION=100
và bây giờ khi bạn curl hoặc truy cập vào điểm cuối URL của hàm,
curl -H "Authorization: bearer $(gcloud auth print-identity-token)" -X GET $SERVICE_URL
bạn sẽ thấy màu be được trả về.
<html><body style="background-color:beige;"><div><p>Hello gradual-rollouts-gcf-00001-hos</p></div></body></html>
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 hàm 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 ngoài ý muốn nhiều lần hơn hạn mức gọi Cloud Functions hằng tháng của bạn trong cấp miễn phí), bạn có thể xoá hàm Cloud Run hoặc xoá dự án mà bạn đã tạo ở Bước 2.
Để xoá một hàm Cloud Run được triển khai cho Cloud Run, hãy truy cập vào Cloud Run trong Cloud Console tại https://console.cloud.google.com/functions/ rồi xoá các hàm mà bạn đã tạo trong lớp học lập trình này.
Để xoá các hàm Cloud Run được triển khai dưới dạng hàm thế hệ thứ 2, hãy chuyển đến Cloud Functions trong Cloud Console tại https://console.cloud.google.com/functions/ 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.