本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用加權別名實作 Lambda Canary 部署
可以使用加權別名來分割相同函數的兩個不同版本之間的流量。透過此方法,可以用少量流量測試新版本的函數,並視需要快速復原。這稱為 Canary 部署。Canary 部署與藍/綠部署的不同之處在於只將新版本暴露於一部分請求,而不是一次切換所有流量。
一個別名可以指向最多兩個 Lambda 函數版本。版本必須符合下列條件:
注意
Lambda 使用簡單的概率模型來在兩個函數版本之間分配流量。在流量較低時,您可能會看到每個版本已設定流量百分比與實際流量百分比之間,存在很大差異。如果您的函數使用佈建並行,透過在別名路由作用期間設定較高數目的已佈建並行執行個體,則可以避免溢出調用。
建立加權別名
判斷調用哪個版本
當您設定兩個函數版本之間的流量權重時,有兩種方法可判斷已叫用的 Lambda 函數版本:
-
CloudWatch Logs - 對於每個函數調用,Lambda 會自動發出含有已調用版本 ID 的
START
記錄。範例:START RequestId: 1dh194d3759ed-4v8b-a7b4-1e541f60235f Version:
2
對於別名叫用,Lambda 使用
ExecutedVersion
維度,依照已叫用的版本來篩選指標資料。如需詳細資訊,請參閱檢視 Lambda 函數的指標。 -
回應承載 (同步呼叫) – 回應至同步函式呼叫包含
x-amz-executed-version
標題,以顯示已呼叫哪個函式版本。
使用加權別名建立滾動部署
使用 AWS CodeDeploy 和 AWS Serverless Application Model (AWS SAM) 建立滾動部署,自動偵測函數程式碼的變更、部署新版本的函數,並逐漸增加流向新版本的流量。流量和增加速率是您可以設定的參數。
在滾動部署中, 會 AWS SAM 執行下列任務:
-
配置您的 Lambda 函數並建立別名。加權別名路由組態是實作滾動部署的基本功能。
-
建立 CodeDeploy 應用程式和部署群組。部署群組會管理滾動部署和轉返 (如有需要)。
-
在您建立 Lambda 函數的新版本時進行偵測。
-
觸發 CodeDeploy 開始新版本的部署。
範本範例 AWS SAM
下列範例顯示 AWS SAM 範本,以進行簡單的滾動部署。
AWSTemplateFormatVersion : '2010-09-09' Transform: AWS::Serverless-2016-10-31 Description: A sample SAM template for deploying Lambda functions Resources: # Details about the myDateTimeFunction Lambda function myDateTimeFunction: Type: AWS::Serverless::Function Properties: Handler: myDateTimeFunction.handler Runtime: nodejs18.x # Creates an alias named "live" for the function, and automatically publishes when you update the function. AutoPublishAlias: live DeploymentPreference: # Specifies the deployment configuration Type: Linear10PercentEvery2Minutes
此範本會定義名為 myDateTimeFunction
的 Lambda 函數,且具備下列屬性。
- AutoPublishAlias
-
AutoPublishAlias
屬性會建立名為live
的別名。此外,當您為該函數儲存新代碼時, AWS SAM 架構會自動偵測。之後,架構會發佈一個新的函數版本並更新live
別名以指向新版本。 - DeploymentPreference
-
DeploymentPreference
屬性會決定 CodeDeploy 應用程式將流量從 Lambda 函數的原始版本轉移到新版本的速率。值Linear10PercentEvery2Minutes
每隔兩分鐘會將額外 10% 的流量轉移到新版本。如需預先定義的部署組態清單,請參閱部署組態。
如需如何使用 CodeDeploy 建立滾動部署的詳細資訊 AWS SAM,請參閱以下內容: