Lambda 函数别名 - AWS Lambda
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

Lambda 函数别名

您可以为 Lambda 函数创建一个或多个别名。Lambda 别名类似于指向特定函数版本的指针。用户可以使用别名 Amazon 资源名称 (ARN) 访问函数版本。

创建别名

  1. 打开 Lambda 控制台 函数页面

  2. 选择函数的名称。

  3. 在函数配置页面上,依次选择操作创建别名

  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 操作:

使用别名

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

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

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

资源策略

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

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

例如,以下 AWS CLI 命令会向 Amazon S3 授予在 Amazon S3 代表 examplebucket 执行操作时调用 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:::examplebucket --source-account 123456789012

有关在策略中使用资源名称的更多信息,请参阅Lambda 操作的资源和条件

别名路由配置

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

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

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

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

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

对别名配置路由

  1. 打开 Lambda 控制台 函数页面

  2. 选择函数的名称。

  3. 确保函数至少具有两个已发布版本。在函数配置页面上,选择版本控制,然后选择版本选项卡以显示版本列表。要创建其他版本,请按照 Lambda 函数版本中的说明操作。

  4. 依次选择操作创建别名

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

    1. 输入别名的名称

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

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

    4. 展开加权别名

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

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

    7. 选择 Save

配置别名路由

使用 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 维度按调用的版本筛选指标数据。有关更多信息,请参阅使用 AWS Lambda 函数指标

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