为 Lambda 函数创建别名 - AWS Lambda

为 Lambda 函数创建别名

您可以为 Lambda 函数创建别名。Lambda 别名是您可以更新的指向函数版本的指针。函数的用户可以使用别名 Amazon 资源名称(ARN)访问函数版本。部署新版本时,您可以更新别名以使用新版本,或者在两个版本之间拆分流量。

创建函数别名(控制台)

您可以使用 Lambda 控制台创建函数别名。

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

  2. 选择函数。

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

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

    1. 输入别名的名称

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

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

    4. (可选)要在别名上配置路由,请展开加权别名。有关更多信息,请参阅别名路由配置

    5. 选择 Save(保存)。

使用 Lambda API 管理别名

要使用 AWS Command Line Interface (AWS CLI) 创建别名,请使用 create-alias 命令。

aws lambda create-alias --function-name my-function --name alias-name --function-version version-number --description " "

要更改别名以便指向函数的新版本,请使用 update-alias 命令。

aws lambda update-alias --function-name my-function --name alias-name --function-version version-number

要删除别名,请使用 delete-alias 命令。

aws lambda delete-alias --function-name my-function --name alias-name

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

使用 AWS SAM 和 AWS CloudFormation 管理别名

您可以使用 AWS Serverless Application Model(AWS SAM)和 AWS CloudFormation 创建和管理函数别名。

要了解如何在 AWS SAM 模板中声明函数别名,请参阅《AWS SAM 开发人员指南》中的 AWS::Serverless::Function 页面。有关使用 AWS CloudFormation 创建和配置别名的信息,请参阅《AWS CloudFormation 用户指南》中的 AWS::Lambda::Alias

使用别名

每个别名都有唯一的 ARN。别名只能指向函数版本,而不能指向其他别名。可以更新别名以便指向函数的新版本。

事件源(Amazon Simple Storage Service (Amazon S3) 等)会调用您的 Lambda 函数。这些事件源维护一个映射,该映射标识在发生事件时要调用的函数。如果在映射配置中指定 Lambda 函数别名,则当函数版本发生更改时,您不需要更新映射。有关更多信息,请参阅Lambda 如何处理来自基于流和队列的事件源的记录

在资源策略中,您可以为事件源授予权限,以便使用您的 Lambda 函数。如果在策略中指定别名 ARN,则当函数版本发生更改时,您不需要更新策略。

资源策略

您可以使用基于资源的策略授予服务、资源或账户对您的函数的访问权限。该权限的范围取决于您要将其应用于别名、版本还是整个函数。例如,如果使用别名(如 helloworld:PROD),该权限将允许您使用别名 ARN (helloworld) 调用 helloworld:PROD 函数。

如果您尝试在不指定别名或具体版本的情况下调用该函数,则会出现权限错误。即使您尝试直接调用与别名关联的函数版本,也会发生此权限错误。

例如,以下 AWS CLI 命令会向 Amazon S3 授予在 Amazon S3 代表 DOC-EXAMPLE-BUCKET 执行操作时调用 helloworld 函数的 PROD 别名的权限。

aws lambda add-permission --function-name helloworld \ --qualifier PROD --statement-id 1 --principal s3.amazonaws.com --action lambda:InvokeFunction \ --source-arn arn:aws:s3:::DOC-EXAMPLE-BUCKET --source-account 123456789012

有关在策略中使用资源名称的更多信息,请参阅微调策略的“资源和条件”部分

别名路由配置

对别名使用路由配置,将一部分流量发送到第二个函数版本。例如,您可以通过配置别名以便将大部分流量发送到现有版本,并且仅将一小部分流量发送到新版本,来降低部署新版本的风险。

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

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

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

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

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

对别名配置路由
注意

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

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

  2. 选择函数。

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

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

    1. 输入别名的名称

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

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

    4. 展开加权别名

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

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

    7. 选择 Save(保存)。

使用 CLI 配置别名路由

使用 create-aliasupdate-alias AWS 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={}

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

确定已调用的版本

配置两个函数版本之间的流量权重时,可以通过两种方法确定已调用的 Lambda 函数版本:

  • CloudWatch Logs – 对于每个函数调用,Lambda 会自动将包含调用的版本 ID 的 START 日志条目发出到 Amazon CloudWatch Logs。以下是示例:

    19:44:37 START RequestId: request id Version: $version

    对于别名调用,Lambda 会使用 Executed Version 维度按调用的版本筛选指标数据。有关更多信息,请参阅使用 Lambda 函数指标

  • 响应负载 (同步调用) – 同步函数调用的响应包含 x-amz-executed-version 标头以指示已调用的函数版本。