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

AWS Lambda 函数别名

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

创建别名

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

  2. 选择函数。

  3. 操作中,选择创建别名

  4. 创建新别名表单中,输入别名的名称以及可选的描述。为此别名选择函数版本。

要查看当前为某个函数定义的别名,请选择限定符,然后选择别名选项卡。

使用 Lambda API 管理别名

要创建别名,请使用 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

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

使用别名

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

事件源(例如 Amazon S3)会调用您的 Lambda 函数。这些事件源维护一个映射,该映射标识在发生事件时要调用的函数。如果在映射配置中指定 Lambda 函数别名,则当函数版本发生更改时,您不需要更新映射。

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

资源策略

使用基于资源的策略为服务、资源或账户提供对您的函数的访问时,这种权限的范围取决于您是将权限应用于别名、版本还是函数。如果您使用别名(例如 helloworld:PROD),则权限仅在使用别名 ARN 调用 helloworld 函数时有效。如果您使用版本 ARN 或函数 ARN,则会遇到权限错误。这包括别名指向的版本 ARN。

例如,以下 AWS CLI 命令向 Amazon S3 授予调用 helloworld Lambda 函数的 PROD 别名的权限。请注意,--qualifier 参数指定别名。

$ 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

在此情况下,Amazon S3 现在可以调用 PROD 别名。然后,Lambda 可执行 PROD 别名引用的 helloworld Lambda 函数版本。您必须在 S3 存储桶的通知配置中使用 PROD 别名 ARN 才能使其生效。

别名路由配置

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

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

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

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

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

对别名配置路由

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

  2. 选择函数。

  3. 确保函数至少具有两个已发布版本。为此,请选择限定符,然后选择版本,以便显示版本列表。如果您需要创建其他版本,请按照AWS Lambda 函数版本中的说明操作。

  4. 操作菜单中,选择创建别名

  5. 创建新别名窗口中,输入名称的值,可以选择性地输入描述的值,然后选择别名所引用的 Lambda 函数的版本

  6. 其他版本中,指定以下项:

    1. 选择第二个 Lambda 函数版本。

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

  7. 选择创建

配置别名路由

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

以下示例为 Lambda 函数创建别名(名为 routing-alias)。该别名指向函数的版本 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,请使用 UpdateAlias 命令更改 function-version 属性,使别名指向版本 2。该命令还将重置路由配置。

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

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

确定已调用的版本

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

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

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

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

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