1. 簡介
總覽
Cloud Run 函式可讓您指定應接收流量的修訂版本,以及修訂版本接收的流量百分比。您可以使用修訂版本復原至先前的版本、漸進式推出修訂版本,並在多個修訂版本之間拆分流量。
本程式碼研究室將說明如何使用修訂版本來管理 Cloud Run 函式的流量。如要進一步瞭解修訂版本,請參閱 Cloud Run 說明文件。
課程內容
- 如何在 Cloud Run 函式的兩個或多個修訂版本之間拆分流量
- 如何逐步推出新修訂版本
- 如何復原為先前的修訂版本
2. 設定和需求
必要條件
- 您已登入 Cloud 控制台。
- 您先前已部署 Cloud Run 函式。舉例來說,您可以按照部署 Cloud Run 函式的說明開始操作。
啟用 Cloud Shell
- 在 Cloud 控制台中,按一下「啟用 Cloud Shell」 圖示
。
如果這是您首次啟動 Cloud Shell,系統會顯示中介畫面,說明 Cloud Shell 的功能。如果您看到中介畫面,請按一下「繼續」。
佈建並連線至 Cloud Shell 的作業只需幾分鐘的時間。
這個虛擬機器會載入所有必要的開發工具。提供永久的 5 GB 主目錄,而且在 Google Cloud 中運作,可大幅提升網路效能和驗證功能。您可以在瀏覽器中完成本程式碼研究室的大部分工作,甚至是全部工作。
連線至 Cloud Shell 後,您應會發現自己通過驗證,且專案已設為您的專案 ID。
- 在 Cloud Shell 中執行下列指令,確認您已通過驗證:
gcloud auth list
指令輸出
Credentialed Accounts ACTIVE ACCOUNT * <my_account>@<my_domain.com> To set the active account, run: $ gcloud config set account `ACCOUNT`
- 在 Cloud Shell 中執行下列指令,確認 gcloud 指令知道您的專案:
gcloud config list project
指令輸出
[core] project = <PROJECT_ID>
如未設定,請輸入下列指令設定專案:
gcloud config set project <PROJECT_ID>
指令輸出
Updated property [core/project].
3. 流量拆分
本範例說明如何建立函式,讀取顏色環境變數,並以該背景顏色回傳修訂版本名稱。
雖然本程式碼研究室使用 node.js,但您可以使用任何執行階段。
設定環境變數
您可以設定在本程式碼研究室中使用的環境變數。
REGION=<YOUR_REGION> PROJECT_ID=<YOUR-PROJECT-ID> BG_COLOR=darkseagreen
建立函式
首先,請建立原始碼目錄,然後切換至該目錄。
mkdir revisions-gcf-codelab && cd $_
接著,請使用以下內容建立 package.json
檔案:
{ "dependencies": { "@google-cloud/functions-framework": "^3.0.0" } }
接下來,請建立含有下列內容的 index.js
來源檔案:
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>'); });
如要將 Cloud Run 函式直接部署至 Cloud Run,請執行下列指令:
gcloud beta run deploy traffic-splitting-gcf \ --source . \ --function helloWorld \ --region $REGION \ --no-allow-unauthenticated \ --set-env-vars BG_COLOR=$BG_COLOR
如果您想部署 Cloud Functions 第 2 代,請使用下列指令:
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
如要測試函式,您可以使用 curl 查詢現有的端點,在 HTML 中查看 darkseagreen 顏色,也可以使用瀏覽器直接查詢端點,查看背景顏色。
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
現在部署第二個修訂版本,並使用棕色背景顏色。
如要將 Cloud Run 函式直接部署至 Cloud Run,請執行下列指令:
# 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
如果您想部署 Cloud Functions 第 2 代,請使用下列指令:
# 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
現在,當您 curl 端點時,就會看到棕色背景顏色。
curl -H "Authorization: bearer $(gcloud auth print-identity-token)" -X GET $SERVICE_URL
以 50/50 的比例分配流量
如要將流量區分為深海綠色和棕色修訂版本,您必須找出基礎 Cloud Run 服務的修訂版本 ID。您可以執行下列指令查看修訂版本 ID:
gcloud run revisions list --service traffic-splitting-gcf \ --region $REGION --format 'value(REVISION)'
您應該會看到類似下方的結果
traffic-splitting-gcf-00003-qoq traffic-splitting-gcf-00002-zag
您可以執行下列指令,將流量以 50/50 的比例拆分給兩個修訂版本:
gcloud run services update-traffic traffic-splitting-gcf \ --region $REGION \ --to-revisions <REVISION1>=50,<REVISION2>=50
測試流量拆分
您可以透過造訪公開網址 (使用 curl 或直接在瀏覽器中) 來測試函式。
curl -H "Authorization: bearer $(gcloud auth print-identity-token)" $SERVICE_URL
您應該會一半時間看到深海綠色修訂版本,另一半時間則看到棕色修訂版本。您也會在輸出內容中看到修訂版本名稱,例如
<html><body style="background-color:tan;"><div><p>Hello traffic-splitting-gcf-00006-qoq</p></div></body></html>
4. 逐步推出
在本節中,您將瞭解如何逐步將變更內容推送至新的 Cloud Functions 修訂版本。如要進一步瞭解漸進式推出功能,請參閱說明文件。
您將使用與上一節相同的程式碼,但會將其部署為新的 Cloud 函式。
首先,將背景顏色設為 beige
,然後部署名為 gradual-rollouts-gcf
的函式。
如要將 Cloud Run 函式直接部署至 Cloud Run,請執行下列指令:
# 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
如果您想部署 Cloud Functions 第 2 代,請使用下列指令:
# 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
假設我們想逐步推出背景顏色為薰衣草色的新修訂版本。
首先,讓我們將目前的修訂版本 (beige) 設為接收 100% 流量。這麼做可確保日後的 Cloud Functions 部署作業不會收到任何流量。根據預設,Cloud Functions 會將 100% 流量指派給含有 latest
標記的修訂版本。手動指定目前的修訂版本 beige 應接收所有流量,這樣標有 latest
標記的修訂版本就不會再接收 100% 流量。請參閱說明文件。
# 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
您會看到類似 Traffic: 100% gradual-rollouts-gcf2-00001-yox
的輸出內容
您現在可以部署不會接收任何流量的新修訂版本。您可以更新此修訂版本的 BG_COLOR 環境變數,而無須進行任何程式碼變更。
如要將 Cloud Run 函式直接部署至 Cloud Run,請執行下列指令:
# 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
如果您想部署 Cloud Functions 第 2 代,請使用下列指令:
# 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
請更新 SERVICE_URL 環境變數,以便使用 gradual-rollouts-gcf 函式
SERVICE_URL=$(gcloud run services describe gradual-rollouts-gcf --platform managed --region $REGION --format 'value(status.url)')
而現在,當您使用 curl 服務時
curl -H "Authorization: bearer $(gcloud auth print-identity-token)" -X GET $SERVICE_URL
即使最近部署的修訂版本是薰衣草色,您仍會看到米色。
<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>
測試提供 0% 流量的修訂版本
假設您已驗證修訂版本已成功部署,且正在放送 0% 的流量。即使已通過健康狀態檢查,您仍應驗證此修訂版本是否使用薰衣草背景顏色。
如要測試薰衣草修訂版本,您可以將標記套用至該修訂版本。標記可讓您直接在特定網址中測試新修訂版本,而不提供流量。
首先,取得該修訂版本的圖片網址。
IMAGE_URL=$(gcloud run services describe gradual-rollouts-gcf --region $REGION --format 'value(IMAGE)')
接著,為該圖片加上相關顏色標記。
gcloud run deploy gradual-rollouts-gcf --image $IMAGE_URL --no-traffic --tag $BG_COLOR --region $REGION --no-allow-unauthenticated
您會看到類似下方的輸出內容:
The revision can be reached directly at https://lavender---gradual-rollouts-gcf-k6msmyp47q-lz.a.run.app
您現在可以直接使用 curl 這個修訂版本
curl -H "Authorization: bearer $(gcloud auth print-identity-token)" -X GET <DIRECT_REVISION_URL>
並在結果中看到薰衣草色:
<html><body style="background-color:lavender;"><div><p>Hello from gradual-rollouts-gcf-24jan16-00003-xik using color lavender</p></div></body></html>
逐步增加流量
您現在可以開始將流量傳送至薰衣草修訂版本。以下範例說明如何將 1% 的流量傳送至 lavender。
gcloud run services update-traffic gradual-rollouts-gcf --region $REGION --to-tags lavender=1
如要將 50% 的流量傳送至 lavender,您可以使用相同的指令,但改為指定 50%。
gcloud run services update-traffic gradual-rollouts-gcf --region $REGION --to-tags lavender=50
您應該會看到一份清單,列出每個修訂版本的流量。
Traffic: 50% gradual-rollouts-gcf-00001-hos 50% gradual-rollouts-gcf-00004-mum lavender: https://lavender---gradual-rollouts-gcf-k6msmyp47q-uc.a.run.app
當您準備好全面推出薰衣草色時,可以將薰衣草色設為 100%,取代米色。
gcloud run services update-traffic gradual-rollouts-gcf --region $REGION --to-tags lavender=100
而現在,當您造訪或 curl 漸進式推出 gcf 函式服務網址時,
curl -H "Authorization: bearer $(gcloud auth print-identity-token)" -X GET $SERVICE_URL
你只會看到薰衣草。
<html><body style="background-color:lavender;"><div><p>Hello gradual-rollouts-gcf-00004-mum</p></div></body></html>
5. 復原
假設您收到早期的使用者體驗意見回饋,指出客戶偏好米色而非淡紫色,因此您需要回溯至米色。
您可以執行這項指令,將版本回溯至先前版本 (米色)。
gcloud run services update-traffic gradual-rollouts-gcf --region $REGION --to-revisions $BEIGE_REVISION=100
而現在,當您 curl 或造訪函式網址端點時,
curl -H "Authorization: bearer $(gcloud auth print-identity-token)" -X GET $SERVICE_URL
您會看到 beige 已傳回。
<html><body style="background-color:beige;"><div><p>Hello gradual-rollouts-gcf-00001-hos</p></div></body></html>
如要進一步瞭解復原作業,請參閱說明文件。
6. 恭喜!
恭喜您完成程式碼研究室!
建議您參閱推出、回溯和流量遷移相關說明文件
涵蓋內容
- 如何在 Cloud Run 函式的兩個或多個修訂版本之間拆分流量
- 如何逐步推出新修訂版本
- 如何復原為先前的修訂版本
7. 清理
為避免產生意外費用 (例如,如果這個 Cloud Run 函式不小心叫用次數超過 免費方案的 Cloud Function 叫用次數配額),您可以刪除 Cloud Run 函式,或是刪除在步驟 2 中建立的專案。
如要刪除已部署至 Cloud Run 的 Cloud Run 函式,請前往 Cloud 控制台中的 Cloud Run (網址:https://console.cloud.google.com/functions/),然後刪除您在本程式碼研究室中建立的函式。
如要刪除以第 2 代函式部署的 Cloud Run 函式,請前往 Cloud 控制台的 Cloud Functions 頁面 (https://console.cloud.google.com/functions/),然後刪除您在本程式碼研究室中建立的函式。
如果您選擇刪除整個專案,可以前往 https://console.cloud.google.com/cloud-resource-manager,選取您在步驟 2 中建立的專案,然後選擇「Delete」(刪除)。如果您刪除專案,就必須在 Cloud SDK 中變更專案。您可以執行 gcloud projects list
來查看所有可用專案的清單。