Lambda 函数别名
您可以为 Lambda 函数创建一个或多个别名。Lambda 别名类似于指向特定函数版本的指针。用户可以使用别名 Amazon 资源名称 (ARN) 访问函数版本。
创建函数别名(控制台)
您可以使用 Lambda 控制台创建函数别名。
创建别名
使用 Lambda API 管理别名
要使用 Amazon Command Line Interface (Amazon CLI) 创建别名,请使用 create-alias
命令。
aws lambda create-alias --function-name
my-function
--namealias-name
--function-versionversion-number
--description " "
要更改别名以便指向函数的新版本,请使用 update-alias
命令。
aws lambda update-alias --function-name
my-function
--namealias-name
--function-versionversion-number
要删除别名,请使用 delete-alias
命令。
aws lambda delete-alias --function-name
my-function
--namealias-name
以上步骤中的 Amazon CLI 命令对应于以下 Lambda API 操作:
使用 Amazon SAM 和 Amazon CloudFormation 管理别名
您可以使用 Amazon Serverless Application Model(Amazon SAM)和 Amazon CloudFormation 创建和管理函数别名。
要了解如何在 Amazon SAM 模板中声明函数别名,请参阅《Amazon SAM 开发人员指南》中的 Amazon::Serverless::Function 页面。有关使用 Amazon CloudFormation 创建和配置别名的信息,请参阅《Amazon CloudFormation 用户指南》中的 Amazon::Lambda::Alias。
使用别名
每个别名都有唯一的 ARN。别名只能指向函数版本,而不能指向其他别名。可以更新别名以便指向函数的新版本。
事件源(Amazon Simple Storage Service (Amazon S3) 等)会调用您的 Lambda 函数。这些事件源维护一个映射,该映射标识在发生事件时要调用的函数。如果在映射配置中指定 Lambda 函数别名,则当函数版本发生更改时,您不需要更新映射。有关更多信息,请参阅Lambda 事件源映射。
在资源策略中,您可以为事件源授予权限,以便使用您的 Lambda 函数。如果在策略中指定别名 ARN,则当函数版本发生更改时,您不需要更新策略。
资源策略
您可以使用基于资源的策略授予服务、资源或账户对您的函数的访问权限。该权限的范围取决于您要将其应用于别名、版本还是整个函数。例如,如果使用别名(如 helloworld:PROD
),该权限将允许您使用别名 ARN (helloworld
) 调用 helloworld:PROD
函数。
如果您尝试在不指定别名或具体版本的情况下调用该函数,则会出现权限错误。即使您尝试直接调用与别名关联的函数版本,也会发生此权限错误。
例如,以下 Amazon CLI 命令会向 Amazon S3 授予在 Amazon S3 代表 examplebucket
执行操作时调用 helloworld
函数的 PROD 别名的权限。
aws lambda add-permission --function-name helloworld \ --qualifier PROD --statement-id 1 --principal s3.amazonaws.com.cn --action lambda:InvokeFunction \ --source-arn arn:aws:s3:::examplebucket --source-account 123456789012
有关在策略中使用资源名称的更多信息,请参阅Lambda 操作的资源和条件。
别名路由配置
对别名使用路由配置,将一部分流量发送到第二个函数版本。例如,您可以通过配置别名以便将大部分流量发送到现有版本,并且仅将一小部分流量发送到新版本,来降低部署新版本的风险。
请注意,Lambda 使用简单的概率模型在两个函数版本之间分发流量。低流量级别情况下,您可能会看到每个版本上配置的流量百分比与实际流量百分比之间的差异很大。如果您的函数使用预配置并发,则可以避免溢出调用,方法是在别名路由处于活动状态期间配置更多的预配置并发实例。
您可以将别名最多指向两个 Lambda 函数版本。版本必须满足以下条件:
对别名配置路由
注意
确保函数至少具有两个已发布版本。要创建其他版本,请按照 Lambda 函数版本中的说明操作。
打开 Lamba 控制台的 Functions
(函数)页面。 -
选择函数。
-
选择 Aliases(别名),然后选择 Create alias(创建别名)。
-
在创建别名页面上,执行以下操作:
-
输入别名的名称。
-
(可选)输入别名的描述。
-
对于版本,选择希望别名指向的第一个函数版本。
-
展开加权别名。
-
对于其他版本,请选择希望别名指向的第二个函数版本。
-
对于权重 (%),输入函数的权重值。权重是在调用别名时分配给该版本的流量百分比。第一个版本接收剩余权重。例如,如果为其他版本指定 10%,则会自动为第一个版本分配 90%。
-
选择 Save(保存)。
-
使用 CLI 配置别名路由
使用 create-alias
和 update-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
日志条目发出到 Amazon CloudWatch Logs。以下是示例:19:44:37 START RequestId:
request id
Version: $version
对于别名调用,Lambda 会使用
Executed Version
维度按调用的版本筛选指标数据。有关更多信息,请参阅使用 Lambda 函数指标。 -
响应负载 (同步调用) – 同步函数调用的响应包含
x-amz-executed-version
标头以指示已调用的函数版本。