Lambda 别名和 CloudFront:函数 ARN 必须引用特定的函数版本

Pet*_*ess 12 amazon-web-services amazon-cloudfront aws-lambda

我有一个 Lambda,当使用包含版本(例如...:function:MyFunction:123)的 ARN 引用时,它用作 CloudFront 源请求处理程序。我已经PROD为版本 123创建了一个别名,我想改用它。

使用...:function:MyFunction:PRODARN 会产生以下错误

com.amazonaws.services.cloudfront.model.InvalidLambdaFunctionAssociationException:
The function ARN must reference a specific function version. (The ARN
must end with the version number.) ARN: 
...:function:MyFunction:PROD (Service: AmazonCloudFront; Status Code:
400; Error Code: InvalidLambdaFunctionAssociation; Request ID:
d407f350-bc7f-11e9-8498-e7f23762c03e)
Run Code Online (Sandbox Code Playgroud)

完全删除版本(即...:function:MyFunction)根据文档应该是最新的,使用$LATESTLATEST版本都失败并出现相同的错误。

我发现的所有文档都表明这应该有效,所以我不确定我在这里搞砸了什么。我创建的 IAM 角色的权限可能有问题吗?

小智 7

我必须提前为写出您可能不希望的答案道歉,但根据 AWS,不幸$LATEST的是,在使用 Labmda@Edge 时,目前无法让 CloudFront 指向函数的特定别名。

根据 AWS 官方文档(在https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_LambdaFunctionAssociation.html 上的LambdaFunctionARN下找到):

您必须指定函数版本的 ARN;您不能指定 Lambda 别名或 $LATEST。

如果以下选项适合您并且也可以满足您的需求,我们通常在我所在的公司所做的事情(不仅是在此问题的上下文中讨论的原因)同时拥有 CloudFront 分发版和在同一个 CloudFormation 堆栈下定义的 Lambda 函数(在我们的例子中,使用无服务器框架进行管理)。这样,为服务于特定环境(例如生产)的堆栈部署更改会创建新版本的 Lambda 函数并自动更新与其关联的 CloudFront 分配。共享以防万一它有望作为替代解决方案。