Cloud Run 可讓您指定應接收流量的修訂版本,以及修訂版本接收的流量百分比。這項功能可讓您復原至先前的修訂版本、逐步部署修訂版本,以及在多個修訂版本之間拆分流量。本頁面說明如何使用這項功能管理 Cloud Run 修訂版本的流量。
請注意,流量路徑調整不會立即生效。變更修訂版本的流量時,所有正在處理的要求都會繼續完成。在轉換期間,系統不會捨棄進行中的要求,且可能會將要求導向新修訂版本或先前的修訂版本。
流量拆分和工作階段相依性
如果您在啟用工作階段相依性的情況下,將流量分配給多個修訂版本,請參閱「工作階段相依性和流量拆分」,瞭解工作階段相依性對流量拆分的影響。
流量分配的生命週期
如果您在多個修訂版本之間拆分流量,或將流量指派給先前的修訂版本,後續所有部署作業都會沿用該流量拆分模式。如要返回只使用最新修訂版本而不拆分流量的狀態,請將所有流量傳送至最新修訂版本。
必要的角色
如要取得管理 Cloud Run 服務和修訂版本所需的權限,請要求管理員授予下列 IAM 角色:
- 如果您管理的是從容器映像檔部署的服務:
- Cloud Run 開發人員
(
roles/run.developer
) Cloud Run 服務 - 服務身分上的服務帳戶使用者 (
roles/iam.serviceAccountUser
) - Artifact Registry Reader
(
roles/artifactregistry.reader
) 服務容器映像檔的 Artifact Registry 存放區 (如適用)
- Cloud Run 開發人員
(
- 如果您管理的是透過原始碼部署的服務:
- Cloud Run 原始碼開發者
(
roles/run.sourceDeveloper
) 專案 - 專案的服務使用情形消費者
(
roles/serviceusage.serviceUsageConsumer
) - 服務身分上的服務帳戶使用者 (
roles/iam.serviceAccountUser
) - 此外,請在專案中將 Cloud Run Builder (
roles/run.builder
) 角色授予 Cloud Build 服務帳戶。建構服務帳戶負責建構服務,預設為 Compute Engine 預設服務帳戶。
- Cloud Run 原始碼開發者
(
如需與 Cloud Run 相關聯的 IAM 角色和權限清單,請參閱 Cloud Run IAM 角色和 Cloud Run IAM 權限。如果 Cloud Run 服務與Google Cloud API (例如 Cloud 用戶端程式庫) 介接,請參閱服務身分設定指南。 如要進一步瞭解如何授予角色,請參閱部署權限和管理存取權。
復原至先前的修訂版本
如要還原為先前的修訂版本,請按照下列步驟操作:
控制台
前往 Google Cloud 控制台的 Cloud Run:
在服務清單中找出所需服務,然後按一下。
按一下「Revisions」(修訂版本) 分頁,顯示該服務的目前修訂版本清單。
在修訂版本清單中,按一下要還原的修訂版本右側的省略號圖示:
按一下「管理流量」,顯示管理流量表單:
- 在下拉式清單中,選取要復原的先前修訂版本。
- 將先前修訂版本的流量百分比設為 100。
- 將目前提供服務的修訂版本百分比設為 0。
- 按一下 [儲存]。
gcloud
使用下列指令:
gcloud run services update-traffic SERVICE --to-revisions REVISION=100
- 將 SERVICE 改為服務名稱。
- 將 REVISION 替換成要復原的修訂版本名稱。
YAML
如要建立新服務,請略過這個步驟。 如要更新現有服務,請下載其 YAML 設定:
gcloud run services describe SERVICE --format export > service.yaml
在
spec
屬性下方,找出並將traffic
屬性更新為下列值:apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE spec: ... traffic: - revisionName: REVISION percent: 100
取代
- 將 REVISION 替換為要復原的修訂版本名稱。
使用下列指令,以新設定取代服務:
gcloud run services replace service.yaml
等待更新完成:您應該會看到一則訊息,指出要復原的修訂版本 from 已部署,並處理
0
% 的流量。
Terraform
如要瞭解如何套用或移除 Terraform 設定,請參閱「基本 Terraform 指令」。
在 Terraform 設定中,將下列內容新增至google_cloud_run_v2_service
資源:逐步推出修訂版本
如要逐步推出新修訂版本,請按照下列步驟操作:
控制台
前往 Google Cloud 控制台的 Cloud Run:
在服務清單中選取服務。
按一下「Deploy New Revision」(部署新修訂版本)。
視需要填寫部署表單,但請務必取消勾選「立即提供這個修訂版本」核取方塊。
按一下 [Deploy] (部署)。
按一下「管理流量」。
新修訂版本會列出,但設定的百分比為 0,因此目前不會處理任何流量。格式:
- 將其設為所需百分比,例如 5。請注意,目前放送版本的百分比會自動減少相同幅度。
- 按一下 [儲存]。
- 重複上述「管理流量」步驟,但要變更百分比,視需要提高新修訂版本的百分比。您不需要重新部署,即可變更流量百分比。
gcloud
如要從容器映像檔部署服務,請按照下列步驟操作:
部署要逐步推出的修訂版本,並將其設為一開始不接收任何流量:
如要透過原始碼部署服務,請按照下列步驟操作:
gcloud run deploy --image IMAGE --no-traffic
將 IMAGE 替換為您要部署的映像檔。
如要透過原始碼部署服務,請按照下列步驟操作:
gcloud run deploy SERVICE --source . --no-traffic
將 SERVICE 改為您的服務名稱。
指定要由新修訂版本處理的流量百分比,例如 5%:
gcloud run services update-traffic SERVICE --to-revisions REVISION=PERCENTAGE
- 將 SERVICE 改為服務名稱。
- 將 REVISION 替換為要逐步推出的修訂版本名稱。如要指定最新修訂版本,可以使用
LATEST
,例如LATEST=5
。 - 將 PERCENTAGE 替換為要傳送至新修訂版本的流量百分比,例如
5
表示要傳送 5% 的流量。
如果修訂版本的成效令人滿意,請重複上述
update-traffic
步驟,但視需要提高百分比值。
YAML
如要建立新服務,請略過這個步驟。 如要更新現有服務,請下載其 YAML 設定:
gcloud run services describe SERVICE --format export > service.yaml
對服務進行任何所需的設定變更,並為新修訂版本指定修訂版本名稱:
apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE spec: template: metadata: annotations: ... name: REVISION-NAME
取代
- REVISION-NAME 改成您要的新修訂版本名稱。
在
spec
屬性下方,找出並更新traffic
屬性,讓新修訂版本只處理少量流量:apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE spec: ... traffic: - revisionName: REVISION-NEW percent: PERCENT-NEW - revisionName: REVISION-FORMER percent: PERCENT-FORMER
請注意,百分比總和必須為 100。取代
- 將 REVISION-NEW 替換為您要逐步推出的修訂版本名稱。
- REVISION-FORMER 改為目前放送中修訂版本的名稱。
- PERCENT-NEW,並指定要傳送至新修訂版本的流量百分比,例如使用
10
將 10% 的流量傳送至該修訂版本。 - PERCENT-FORMER,並將其替換為要傳送至舊版修訂內容的流量百分比
等待更新完成:系統應會顯示訊息,指出您逐步推出的新修訂版本已部署,並提供您使用的流量百分比值。
Terraform
在 .tf
檔案中新增下列內容,並逐步將流量百分比從先前的修訂版本更新至最新修訂版本。
請注意,每次流量變更都需要執行另一個 terraform apply
。
輸入 terraform apply
來套用變更。
在多個修訂版本之間拆分流量
如要在兩個或多個修訂版本之間拆分流量,請按照下列步驟操作:
控制台
前往 Google Cloud 控制台的 Cloud Run:
在服務清單中找出所需服務,然後按一下。
按一下「管理流量」。
系統會列出目前提供服務的新版本。格式:
- 將目前放送的修訂版本百分比設為所需比例。
- 使用下拉式清單選取先前的修訂版本,並將其設為所需的百分比分割。
- 如要拆分更多修訂版本之間的流量,請按一下「新增修訂版本」,選取所需修訂版本,然後設定所需的拆分百分比。
- 按一下 [儲存]。
gcloud
以半形逗號分隔的清單,指定修訂版本和每個修訂版本的流量百分比:
gcloud run services update-traffic SERVICE --to-revisions LIST
- 將 SERVICE 改為服務名稱。
- 將 LIST 替換為以半形逗號分隔的修訂版本和百分比清單:
REVISION1=PERCENTAGE1,REVISION2=PERCENTAGE2,REVISIONn=PERCENTAGEx
例如hello2-00005-red=25,hello2-00001-bod=25,hello2-00002-nan=50
。
YAML
如要建立新服務,請略過這個步驟。 如要更新現有服務,請下載其 YAML 設定:
gcloud run services describe SERVICE --format export > service.yaml
在
spec
屬性下方,找出並更新traffic
屬性,讓新修訂版本只處理少量流量:apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE spec: ... traffic: - revisionName: REVISION-A percent: PERCENT-A - revisionName: REVISION-B percent: PERCENT-B - revisionName: REVISION-C percent: PERCENT-C
請注意,百分比總和必須為 100。取代
- REVISION-A、REVISION-B、REVISION-C 您要分配流量的修訂版本。
- PERCENT-A、PERCENT-B、PERCENT-C,以及相應修訂版本的百分比。
使用下列指令,以新設定取代服務:
gcloud run services replace service.yaml
等待更新完成:您應該會看到訊息,指出逐步推出的新修訂版本已部署,並提供
5
百分比 (或您使用的任何逐步值) 的流量。
Terraform
請將以下內容新增到您的 .tf
檔案中:
輸入 terraform apply
來套用變更。
將所有流量轉送至最新修訂版本
部署新修訂版本時,您可以盡快讓這個修訂版本和所有後續版本處理 100% 的流量,並覆寫所有已建立的流量拆分:
控制台
前往 Google Cloud 控制台的 Cloud Run:
在服務清單中找出所需服務,然後按一下。
按一下「Deploy New Revision」(部署新修訂版本)。
視需要填寫部署表單,並務必勾選標示為「立即提供這個修訂版本」的核取方塊。這項操作會覆寫所有現有的流量拆分,讓新修訂版本處理 100% 的流量。
按一下 [Deploy] (部署)。
gcloud
如要將所有流量傳送至最近部署的修訂版本,請執行下列操作:
gcloud run services update-traffic SERVICE --to-latest
將 SERVICE 改為服務名稱。
YAML
如要建立新服務,請略過這個步驟。 如要更新現有服務,請下載其 YAML 設定:
gcloud run services describe SERVICE --format export > service.yaml
在
spec
屬性下方,找出並將traffic
屬性更新為下列值:apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE spec: ... traffic: - latestRevision: true percent: 100
使用下列指令,以新設定取代服務:
gcloud run services replace service.yaml
等待更新完成:您應該會看到訊息,指出 (最新) 修訂版本已部署,並處理
100
% 的流量。
Terraform
請將以下內容新增到您的 .tf
檔案中:
輸入 terraform apply
來套用變更。
使用標記進行測試、流量遷移和復原
如要避免標記修訂版本產生帳單費用,請使用服務層級最低執行個體,或在不再需要修訂版本時移除標記。
這項功能的常見用途是在新服務修訂版本開始處理任何流量前,先進行測試和審查,一般流程如下:
- 在開發期間對容器執行整合測試。
- 將容器部署到僅用於暫存的 Google Cloud 專案,不放送任何流量,並針對已標記的修訂版本進行測試。
- 將其部署至正式環境,但不提供流量,並針對正式環境中標記的修訂版本進行測試。
- 將流量遷移至已標記的修訂版本。
部署新的已標記修訂版本
如要將現有服務的新修訂版本部署至正式環境,請按照下列步驟操作:
gcloud
如要從容器映像檔部署新的標記修訂版本,請按照下列步驟操作:
gcloud run deploy myservice --image IMAGE_URL --no-traffic --tag TAG_NAME
取代:
- IMAGE_URL 改為圖片的網址。
- TAG_NAME 替換為小寫的代碼名稱。
如要透過原始碼部署服務,請按照下列步驟操作:
gcloud run deploy myservice --source . --no-traffic --tag TAG_NAME
請將 TAG_NAME 替換成小寫標記名稱。
您可以使用標記在特定網址中直接測試新修訂版本,而不提供流量。網址會以您提供的標記名稱開頭。舉例來說,如果您在服務 myservice
上使用標記名稱 green
,則會在網址 https://green---myservice-abcdef.a.run.app
測試已標記的修訂版本
YAML
如要建立新服務,請略過這個步驟。 如要更新現有服務,請下載其 YAML 設定:
gcloud run services describe SERVICE --format export > service.yaml
在
traffic
屬性下方,找出並更新與要新增代碼的修訂版本對應的tag
屬性:apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE spec: ... traffic: - revisionName: REVISION percent: 100 - revisionName: REVISION-A tag: TAG-A - revisionName: REVISION-B tag: TAG-B - revisionName: REVISION-C tag: TAG-C
取代:
- TAG-A、TAG-B、TAG-C,並為每個修訂版本加上相關聯的標記。
- REVISION,並將所有流量傳送至該修訂版本。
使用下列指令建立或更新服務:
gcloud run services replace service.yaml
Terraform
在 .tf
檔案中加入下列項目,然後使用新的標記,逐步將流量百分比從舊版修訂內容更新至最新版修訂內容。
請注意,每次流量變更都需要執行另一個 terraform apply
。
輸入 terraform apply
來套用變更。
移除標記
如要從修訂版本中移除標記,請按照下列步驟操作:
控制台
前往 Google Cloud 控制台的 Cloud Run:
在服務清單中選取服務。
前往所需服務的「修訂版本」部分,然後選取要移除現有代碼的修訂版本。
將指標懸停在「Revision URLs (tags)」(修訂版本網址 (標記)) 欄上,然後按一下鉛筆圖示:
在「修訂版本網址」對話方塊選單中,按一下「垃圾桶」圖示,移除修訂版本中使用的現有代碼。
按一下 [儲存]。
gcloud
如要移除修訂版本標記,請按照下列步驟操作:
gcloud run services update-traffic SERVICE --remove-tags TAG_NAME
取代
- 將 TAG_NAME 替換為要將流量遷移至的標記名稱
- SERVICE 替換為要移除代碼的服務名稱
YAML
如要建立新服務,請略過這個步驟。 如要更新現有服務,請下載其 YAML 設定:
gcloud run services describe SERVICE --format export > service.yaml
視需要變更服務設定。
在
spec
屬性下方,找出並移除已標記修訂版本的tag
屬性:apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE spec: ... traffic: - revisionName: REVISION tag: TAG_NAME percent: PERCENT-NEW
使用下列指令,以新設定取代服務:
gcloud run services replace service.yaml
Terraform
請將以下內容新增到您的 .tf
檔案中:
輸入 terraform apply
來套用變更。
將流量遷移至已標記的修訂版本
確認新修訂版本運作正常後,您可以使用 Google Cloud 控制台、gcloud 指令列、Terraform 或 YAML 檔案,開始將流量遷移至新版本:
控制台
前往 Google Cloud 控制台的 Cloud Run:
在服務清單中找出所需服務,然後按一下:
選取要將流量傳送至哪個已標記的修訂版本:
按一下「管理流量」。
找出已標記的修訂版本名稱:該名稱會列出,但設定的百分比為 0,表示目前未處理任何流量。在「Manage traffic」(管理流量) * 表單中:
- 將其設為所需百分比,例如 5。請注意,目前放送版本的百分比會自動減少相同幅度。
- 按一下 [儲存]。
- 視需要重複上述「管理流量」步驟,但要變更百分比,並視需要提高已標記修訂版本的百分比。您不需要重新部署,即可變更流量百分比。
gcloud
如要將流量遷移至特定修訂版本標記,請按照下列步驟操作:
gcloud run services update-traffic myservice --to-tags TAG_NAME=TRAFFIC_PERCENT
取代
- 將 TAG_NAME 替換為要將流量遷移至的標記名稱
- TRAFFIC_PERCENT,並指定要由標記版本放送的流量百分比,例如
1
。
YAML
如要建立新服務,請略過這個步驟。 如要更新現有服務,請下載其 YAML 設定:
gcloud run services describe SERVICE --format export > service.yaml
對服務進行任何選取的設定變更。
在
spec
屬性下方,找出並更新已標記修訂版本的traffic
屬性,讓已標記的修訂版本只放送少量流量:apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE spec: ... traffic: - revisionName: REVISION tag: TAG_NAME percent: PERCENT-NEW - revisionName: REVISION-FORMER percent: PERCENT-FORMER
請注意,百分比總和必須為 100。取代
- 將 REVISION 替換為已加上標記的修訂版本名稱。
- 將 TAG_NAME 替換為您要逐步推出的代碼名稱。
- PERCENT-NEW,並指定要傳送至已標記修訂版本的流量百分比,例如使用
10
將 10% 的流量傳送至該修訂版本。 - REVISION-FORMER 改為目前放送中修訂版本的名稱。
- PERCENT-FORMER,並將其替換為要傳送至舊版修訂內容的流量百分比
使用下列指令,以新設定取代服務:
gcloud run services replace service.yaml
等待更新完成:系統應會顯示訊息,指出您逐步推出的新修訂版本已部署,並提供您使用的流量百分比值。
Terraform
請將以下內容新增到您的 .tf
檔案中:
視需要花費數小時或數天,逐步從一個標記更新至另一個標記,並視需要提高標記修訂版本的百分比。
每次變更後輸入 terraform apply
即可套用。