Sử dụng các bản sửa đổi trong các chức năng của Cloud Run để phân chia lưu lượng truy cập, triển khai dần và khôi phục

1. Giới thiệu

Tổng quan

Các hàm 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à chỉ định tỷ lệ phần trăm lưu lượng truy cập mà bản sửa đổi nhận được. Bản sửa đổi cho phép bạn khôi phục về bản sửa đổi trước đó, triển khai dần 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.

Các 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 vào 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 cho hai bản sửa đổi trở lên của một chức năng Cloud Run
  • Cách từng bước triển khai bản sửa đổi mới
  • Cách khôi phục về 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 hàm Cloud Run. Ví dụ: bạn có thể làm theo hướng dẫn triển khai chức năng Cloud Run để bắt đầu.

Kích hoạt Cloud Shell

  1. Trên Cloud Console, hãy nhấp vào Kích hoạt Cloud Shell d1264ca30785e435.png.

cb81e7c8e34bc8d.png

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ột màn hình trung gian, hãy nhấp vào Tiếp tục.

d95252b003979716.png

Quá trình cấp phép và kết nối với Cloud Shell chỉ mất vài phút.

7833d5e1c5d18f54.png

Máy ảo này được tải tất cả các công cụ phát triển cần thiết. Dịch vụ này cung cấp thư mục gốc có dung lượng ổn định 5 GB và chạy trên Google Cloud, giúp nâng cao đáng kể hiệu suất và khả năng xác thực của mạng. Nhiều (nếu không nói là) tất cả công việc của bạn trong lớp học lập trình này đều có thể thực hiện bằng trình duyệt.

Sau khi kết nối với Cloud Shell, bạn sẽ thấy mình đã được xác thực và dự án được đặt thành mã dự án của bạn.

  1. Chạy lệnh sau trong Cloud Shell để xác nhận rằng bạn đã được xác thực:
gcloud auth list

Kết quả của lệnh

 Credentialed Accounts
ACTIVE  ACCOUNT
*       <my_account>@<my_domain.com>

To set the active account, run:
    $ gcloud config set account `ACCOUNT`
  1. 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

Kết quả của lệnh

[core]
project = <PROJECT_ID>

Nếu chưa, bạn có thể đặt chế độ này bằng lệnh sau:

gcloud config set project <PROJECT_ID>

Kết quả lệnh

Updated property [core/project].

3. Chia 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 sửa đổi bằng màu nền đó.

Mặc dù lớp học lập trình này sử dụngnode.js, nhưng bạn có thể 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ể đặt 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

Tạo hàm

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 revisions-gcf-codelab && cd $_

Sau đó, hãy tạo một tệp package.json với 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 hàm Cloud Run ngay trê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ệ 2, hãy sử 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ử hàm này, bạn có thể cuộn điểm cuối hiện có để xem màu xanh lục đậm trong html hoặc sử dụng 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

Bây giờ, hãy triển khai bản sửa đổi thứ hai có màu nền nâu nhạt.

Để triển khai hàm Cloud Run ngay trê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 cuộn điểm cuối, bạn sẽ thấy màu nền màu nâu vàng.

curl -H "Authorization: bearer $(gcloud auth print-identity-token)" -X GET $SERVICE_URL

Chia 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 đậm và 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 các 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

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ử hàm này 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

Trong một nửa thời gian, bạn sẽ thấy phiên bản màu xanh lục đậm và nửa còn lại là phiên bản màu nâu vàng. 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-splitting-gcf-00006-qoq</p></div></body></html>

4. Phát hành từng bước

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 mới của Hàm trên đám mây. 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 mã giống như phần trước, nhưng bạn sẽ triển khai mã này dưới dạng một Hàm đám mây 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-gcf.

Để 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-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

Bây giờ, giả sử chúng ta muốn dần dần triển khai một bản sửa đổi mới với màu nền hoa oải hương.

Trước tiên, hãy thiết lập màu be của bản sửa đổi hiện tại để nhận 100% lưu lượng truy cập. Việc này sẽ đảm bảo rằng các lần triển khai Hàm trên đám mây 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 sẽ đặt 100% lưu lượng truy cập vào bản sửa đổi bằng cờ latest. Bằng cách chỉ định thủ công rằng màu be của bản sửa đổi hiện tại này sẽ nhận 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-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 bất kỳ lưu lượng truy cập nào. Thay vì chỉnh sửa 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 hàm Cloud Run ngay 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-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ệ 2, hãy sử 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 DISCOUNT-rollout-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 cuộn 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ù hoa oải hương là bản sửa đổi được triển khai gần đây nhất.

<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 đã 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 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 tím 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 tra 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 đó.

IMAGE_URL=$(gcloud run services describe gradual-rollouts-gcf --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-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ể cuộn trực tiếp 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>

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-gcf --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-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 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 triển khai hoàn toàn hoa oải hương, bạn có thể đặt tỷ lệ 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à giờ đây, khi bạn truy cập hoặc cuộn 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ử có phản hồi ban đầu về trải nghiệm người dùng, cho thấy khách hàng thích màu be hơn màu hoa oải hương và bạn cần chuyển sang 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 này.

gcloud run services update-traffic gradual-rollouts-gcf --region $REGION --to-revisions $BEIGE_REVISION=100

và bây giờ là khi bạn cuộn hoặc truy cập đ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ề việc khôi phục trong tài liệu này.

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ề việc 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 cho hai bản sửa đổi trở lên của một chức năng Cloud Run
  • Cách từng bước triển khai bản sửa đổi mới
  • Cách khôi phục về 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 mức phân bổ số lần gọi hàm Cloud Run hằng tháng 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 chuyển đến Cloud Run trong Cloud Console tại https://console.cloud.google.com/functions/ rồi xoá các hà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ệ 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 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ẽ phải thay đổi các dự án trong Cloud SDK của mình. 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.