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

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à một bản sửa đổi nhận được. 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 hướng dẫn bạn cách sử dụng các 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 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 hàm 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 sẵn tất cả các công cụ phát triển cần thiết. Ứng dụng này cung cấp một thư mục gốc 5 GB ổn định và chạy trong Google Cloud, giúp cải thiện đáng kể hiệu suất mạng và xác thực. Bạn có thể thực hiện hầu hết (nếu không phải tất cả) công việc 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 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 không, bạn có thể đặt giá trị này bằng lệnh sau:

gcloud config set project <PROJECT_ID>

Kết quả 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 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ể 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

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 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 trực tiếp một hàm Cloud Run 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 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=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ệ 2, hãy sử 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

Bây giờ, khi cuộn điểm cuối, bạn sẽ thấy màu nền nâu.

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

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 traffic-splitting-gcf \
  --region $REGION --format 'value(REVISION)'

Bạn sẽ thấy kết quả tương tự như 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 theo tỷ lệ 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 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-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 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 cùng một mã như phần trước, nhưng sẽ triển khai mã đó dưới dạng một Hàm trên đá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ệ 2, hãy sử 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 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. 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 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-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 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-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 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 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ù màu 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 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 đó.

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à thấy màu tím 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 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à 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ử 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 này.

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

và bây giờ, khi bạn cuộn 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 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ề 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 giữa hai hoặc nhiều bản sửa đổi cho một hàm 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 đó

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 phần Chức năng trên 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ẽ cần thay đổi các 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.