程式碼研究室簡介
1. 簡介
總覽
您可以透過 Cloud Run 修訂版本指定哪些修訂版本應接收流量,以及傳送至每個修訂版本的流量百分比。您可以使用修訂版本復原至先前的版本、漸進式推出修訂版本,並在多個修訂版本之間拆分流量。
本程式碼研究室說明如何使用修訂版本來管理 Cloud Run 服務的流量。如要進一步瞭解修訂版本,請參閱 Cloud Run 說明文件。
課程內容
- 如何在 Cloud Run 服務的兩個或多個修訂版本之間拆分流量
- 如何逐步推出新修訂版本
- 如何復原為先前的修訂版本
2. 設定和需求
必要條件
- 您已登入 Cloud 控制台。
- 您先前已部署 Cloud Run 服務。舉例來說,您可以參考部署 Cloud Run 服務的說明開始操作。
設定環境變數
您可以設定在本程式碼研究室中使用的環境變數。
PROJECT_ID=YOUR-PROJECT-ID
REGION=YOUR_REGION
BG_COLOR=darkseagreen
SERVICE_NAME=traffic-revisions-color
AR_REPO=traffic-revisions-color-repo
為服務建立 Artifact Registry 存放區
gcloud artifacts repositories create $AR_REPO \
--repository-format=docker \
--location=$REGION \
--description="codelab for finetuning using CR jobs" \
--project=$PROJECT_ID
3. 流量分配
本範例說明如何建立 Cloud Run 服務,讀取顏色環境變數,並以該背景顏色回傳修訂版本名稱。
雖然本程式碼研究室使用 Python,但您可以使用任何執行階段。
設定環境變數
您可以設定在本程式碼研究室中使用的環境變數。
REGION=<YOUR_REGION> PROJECT_ID=<YOUR-PROJECT-ID> BG_COLOR=darkseagreen SERVICE_NAME=traffic-revisions-color AR_REPO=traffic-revisions-color-repo
建立服務
首先,請建立原始碼目錄,然後切換至該目錄。
mkdir traffic-revisions-codelab && cd $_
接著,請使用以下內容建立 main.py
檔案:
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)
接著,請使用以下內容建立 requirements.txt
檔案:
Flask>=2.0.0 gunicorn>=20.0.0
最後建立 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"]
使用 Cloud Build 在 Artifact Registry 中使用 Buildpacks 建立映像檔:
gcloud builds submit \
--tag $REGION-docker.pkg.dev/$PROJECT_ID/$AR_REPO/$SERVICE_NAME
然後將第一個修訂版本部署至 Cloud Run,並使用 darkseagreen 顏色:
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
如要測試這項服務,您可以直接在網路瀏覽器中開啟端點,查看背景顏色是否為深海綠。
現在部署第二個修訂版本,並使用棕色背景顏色。
# 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
現在重新整理網站,您會看到棕色背景顏色。
以 50/50 的比例分配流量
如要將流量區分為深海綠色和棕色修訂版本,您必須找出基礎 Cloud Run 服務的修訂版本 ID。您可以執行下列指令查看修訂版本 ID:
gcloud run revisions list --service $SERVICE_NAME \ --region $REGION --format 'value(REVISION)'
您應該會看到類似下方的結果
traffic-revisions-color-00003-qoq traffic-revisions-color-00002-zag
您可以執行下列指令,將流量以 50/50 的比例分配給兩個修訂版本:
gcloud run services update-traffic $SERVICE_NAME \ --region $REGION \ --to-revisions YOUR_REVISION_1=50,YOUR_REVISION_2=50
測試流量拆分
您可以透過在瀏覽器中重新整理頁面來測試服務。
一半的時間會看到深海綠色修訂版本,另一半的時間則會看到棕色修訂版本。您也會在輸出內容中看到修訂版本名稱,例如:
<html><body style="background-color:tan;"><div><p>Hello traffic-revisions-color-00003-qoq</p></div></body></html>
4. 逐步推出
在本節中,您將瞭解如何逐步將變更內容推送至新的 Cloud Service 修訂版本。如要進一步瞭解漸進式推出功能,請參閱說明文件。
您將使用與上一節相同的程式碼,但會將其部署為新的 Cloud Run 服務。
首先,將背景顏色設為 beige
,然後部署名為 gradual-rollouts-colors
的函式。
如要將 Cloud Run 函式直接部署至 Cloud Run,請執行下列指令:
# 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
假設我們想逐步推出背景顏色為薰衣草色的新修訂版本。
首先,讓我們將目前的修訂版本 (即 beige) 設為接收 100% 流量。這麼做可確保日後的修訂版本不會收到任何流量。根據預設,Cloud Run 會將 100% 流量設為含有 latest
標記的修訂版本。手動指定目前的修訂版本 beige 應接收所有流量,這樣標有 latest
標記的修訂版本就不會再接收 100% 流量。請參閱說明文件。
# 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
您會看到類似 Traffic: 100% radual-rollouts-colors-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-colors \ --image $REGION-docker.pkg.dev/$PROJECT_ID/$AR_REPO/$SERVICE_NAME:latest \ --region $REGION \ --allow-unauthenticated \ --update-env-vars BG_COLOR=$BG_COLOR
而現在,當您在瀏覽器中造訪網站時,您會看到米色,即使最近部署的修訂版本是薰衣草色。
測試提供 0% 流量的修訂版本
假設您已驗證修訂版本已成功部署,且正在放送 0% 的流量。即使已通過健康狀態檢查,您仍應驗證此修訂版本是否使用薰衣草背景顏色。
如要測試薰衣草修訂版本,您可以將標記套用至該修訂版本。標記可讓您直接在特定網址中測試新修訂版本,而不提供流量。
首先,取得最新修訂版本 (即薰衣草) 的圖片網址。
IMAGE_URL_LAVENDER=$(gcloud run services describe gradual-rollouts-colors --region $REGION --format 'value(IMAGE)')
接著,為該圖片加上相關顏色標記。
gcloud run deploy gradual-rollouts-colors --image $IMAGE_URL_LAVENDER --no-traffic --tag $BG_COLOR --region $REGION
您會看到類似下方的輸出內容:
The revision can be reached directly at https://lavender---gradual-rollouts-colors-<hash>-<region>.a.run.app
如今,當您造訪該修訂版本網址時,就會看到淡紫色。
逐步增加流量
您現在可以開始將流量傳送至薰衣草修訂版本。以下範例說明如何將 1% 的流量傳送至 lavender。
gcloud run services update-traffic gradual-rollouts-colors --region $REGION --to-tags lavender=1
如要將 50% 的流量傳送至 lavender,您可以使用相同的指令,但請改為指定 50%。
gcloud run services update-traffic gradual-rollouts-colors --region $REGION --to-tags lavender=50
畫面上應會顯示一份清單,列出每個修訂版本的流量。
Traffic: 50% gradual-rollouts-colors-00001-hos 50% gradual-rollouts-colors-00004-mum lavender: https://lavender---gradual-rollouts-colors-<hash>-<region>.a.run.app
準備好全面推出薰衣草色時,可以將薰衣草色設為 100%,取代米色。
gcloud run services update-traffic gradual-rollouts-colors --region $REGION --to-tags lavender=100
而現在,當你造訪網站時,只會看到薰衣草。
6. 恭喜!
恭喜您完成程式碼研究室!
建議您參閱推出、回溯和流量遷移相關說明文件
涵蓋內容
- 如何在 Cloud Run 服務的兩個或多個修訂版本之間拆分流量
- 如何逐步推出新修訂版本
- 如何復原為先前的修訂版本
7. 清除所用資源
為避免產生意外費用 (例如,如果這項 Cloud Run 函式不小心叫用次數超過 免費等級的 Cloud Run 叫用次數配額),您可以刪除 Cloud Run 服務,或是刪除在步驟 2 中建立的專案。
如要刪除 Cloud Run 服務,請前往 Cloud 控制台中的 Cloud Run (網址:https://console.cloud.google.com/run/),然後刪除您在本程式碼研究室中建立的函式。
如果您選擇刪除整個專案,可以前往 https://console.cloud.google.com/cloud-resource-manager,選取您在步驟 2 中建立的專案,然後選擇「Delete」(刪除)。如果您刪除專案,就必須在 Cloud SDK 中變更專案。您可以執行 gcloud projects list
來查看所有可用專案的清單。