使用加权别名实施 Lambda 金丝雀部署
您可以使用加权别名在同一函数的两个不同版本之间拆分流量。通过此方法,您可以用一小部分流量测试新版本的函数,并在必要时快速回滚。这称为金丝雀部署。金丝雀部署与蓝/绿部署的不同之处在于,它只向部分请求公开新版本,而不是一次切换所有流量。
您可以将别名最多指向两个 Lambda 函数版本。版本必须满足以下条件:
注意
Lambda 使用简单的概率模型在两个函数版本之间分发流量。低流量级别情况下,您可能会看到每个版本上配置的流量百分比与实际流量百分比之间的差异很大。如果您的函数使用预配置并发,则可以避免溢出调用,方法是在别名路由处于活动状态期间配置更多的预配置并发实例。
创建加权别名
确定调用的版本
配置两个函数版本之间的流量权重时,可以通过两种方法确定已调用的 Lambda 函数版本:
-
CloudWatch Logs – 对于每次函数调用,Lambda 会自动发出包含调用的版本 ID 的
START
日志条目。示例:START RequestId: 1dh194d3759ed-4v8b-a7b4-1e541f60235f Version:
2
对于别名调用,Lambda 会使用
ExecutedVersion
维度按调用的版本筛选指标数据。有关更多信息,请参阅 查看 Lambda 函数的指标。 -
响应负载 (同步调用) – 同步函数调用的响应包含
x-amz-executed-version
标头以指示已调用的函数版本。
使用加权别名创建滚动部署
使用 Amazon CodeDeploy 和 Amazon Serverless Application Model(Amazon SAM)创建滚动部署,该部署可自动检测函数代码的更改、部署函数的新版本,并逐渐增加流向新版本的流量。您可以配置的参数包括流量和增长率。
在滚动部署中,Amazon SAM 会执行以下任务:
-
配置您的 Lambda 函数并创建别名。加权别名路由配置是实施滚动部署的基础功能。
-
创建一个 CodeDeploy 应用程序和一个部署组。部署组可管理滚动部署和回滚(如果需要)。
-
检测您何时创建 Lambda 函数的新版本。
-
触发 CodeDeploy 启动部署新版本。
示例 Amazon SAM 模板
下面的示例演示了用于简单滚动部署的 Amazon 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
的别名。此外,Amazon SAM 框架会自动检测您何时为函数保存新代码。然后,框架发布新的函数版本并更新live
别名以便指向新版本。 - DeploymentPreference
-
DeploymentPreference
属性决定 CodeDeploy 应用程序将流量从 Lambda 函数的原始版本转移到新版本的速率。Linear10PercentEvery2Minutes
值每两分钟将额外 10% 的流量转移到新版本。有关预定义部署配置的列表,请参阅部署配置。
有关如何使用 CodeDeploy 和 Amazon SAM 创建滚动部署的更多信息,请参阅以下内容: