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

15

我有一个Lambda函数,当使用包含版本的ARN(例如...:function:MyFunction:123)引用时,它可以作为CloudFront Origin请求处理程序工作。我已创建了一个名为PROD的别名,希望使用该别名代替版本号123。

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

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)

完全移除版本信息(例如: ...:function:MyFunction )应该命中最新版本,使用 $LATESTLATEST 均出现了相同的错误。

我查找到的所有文档都表明它应该可以正常工作,所以我不确定我可能在这里搞砸了什么。这可能是我创建的 IAM 角色权限的问题吗?

1个回答

10

很抱歉,根据AWS的说法,目前在使用Lambda@Edge时,无法将CloudFront指向$ LATEST或特定函数别名。$LATEST

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

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

如果以下选项适合您并且也能满足您的需求,我们通常在公司中执行以下操作(不仅是在讨论此问题的上下文中),即将CloudFront分布和Lambda功能定义为同一个CloudFormation stack(在我们的情况下,使用Serverless框架进行管理)。这样,部署特定环境(例如生产环境)的堆栈更改会创建Lambda函数的新版本,并自动更新与其关联的CloudFront分发。 分享一下,希望能作为另一种解决方案。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接