使用加权别名实施 Lambda 金丝雀部署 - Amazon Lambda
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

使用加权别名实施 Lambda 金丝雀部署

您可以使用加权别名在同一函数的两个不同版本之间拆分流量。通过此方法,您可以用一小部分流量测试新版本的函数,并在必要时快速回滚。这称为金丝雀部署。金丝雀部署与蓝/绿部署的不同之处在于,它只向部分请求公开新版本,而不是一次切换所有流量。

您可以将别名最多指向两个 Lambda 函数版本。版本必须满足以下条件:

  • 两个版本必须具有相同的执行角色

  • 两个版本必须具有相同的死信队列配置,或者都没有死信队列配置。

  • 这两个版本必须都已发布。别名不能指向 $LATEST

注意

Lambda 使用简单的概率模型在两个函数版本之间分发流量。低流量级别情况下,您可能会看到每个版本上配置的流量百分比与实际流量百分比之间的差异很大。如果您的函数使用预配置并发,则可以避免溢出调用,方法是在别名路由处于活动状态期间配置更多的预配置并发实例。

创建加权别名

Console
使用控制台对别名配置路由
注意

确保函数至少具有两个已发布版本。要创建其他版本,请按照 创建函数版本中的说明操作。

  1. 打开 Lamba 控制台的 Functions(函数)页面。

  2. 选择函数。

  3. 选择 Aliases(别名),然后选择 Create alias(创建别名)。

  4. 创建别名页面上,执行以下操作:

    1. 输入别名的名称

    2. (可选)输入别名的描述

    3. 对于版本,选择希望别名指向的第一个函数版本。

    4. 展开加权别名

    5. 对于其他版本,请选择希望别名指向的第二个函数版本。

    6. 对于权重 (%),输入函数的权重值。权重是在调用别名时分配给该版本的流量百分比。第一个版本接收剩余权重。例如,如果为其他版本指定 10%,则会自动为第一个版本分配 90%。

    7. 选择保存

Amazon CLI

使用 create-aliasupdate-alias Amazon CLI 命令配置两个函数版本之间的流量权重。创建或更新别名时,您可以使用 routing-config 参数指定流量权重。

以下示例会创建一个名为 routing-alias 的 Lambda 函数别名,该别名指向函数的版本 1。函数的版本 2 接收 3% 的流量。其余 97% 的流量路由到版本 1。

aws lambda create-alias \ --name routing-alias \ --function-name my-function \ --function-version 1 \ --routing-config AdditionalVersionWeights={"2"=0.03}

使用 update-alias 命令可提高流入版本 2 的流量的百分比。在下面的示例中,将该流量提高到 5%。

aws lambda update-alias \ --name routing-alias \ --function-name my-function \ --routing-config AdditionalVersionWeights={"2"=0.05}

要将所有流量路由到版本 2,请使用 update-alias 命令更改 function-version 属性,以使别名指向版本 2。该命令还将重置路由配置。

aws lambda update-alias \ --name routing-alias \ --function-name my-function \ --function-version 2 \ --routing-config AdditionalVersionWeights={}

以上步骤中的 Amazon CLI 命令对应于以下 Lambda API 操作:

确定调用的版本

配置两个函数版本之间的流量权重时,可以通过两种方法确定已调用的 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 创建滚动部署的更多信息,请参阅以下内容: