我有一个 Lambda,当使用包含版本(例如 ...:function:MyFunction:123
)的 ARN 引用时,它用作 CloudFront 源请求处理程序。我创建了一个 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
完全删除根据文档应该最新的版本(即 $LATEST
)或 LATEST
对于版本都失败并出现相同的错误。我发现的所有文档都表明这应该有效,所以我不确定我在这里搞砸了什么。我创建的 IAM 角色的权限可能有问题吗?
最佳答案
我必须提前为写出您可能不希望的答案而道歉,但根据 AWS,不幸的是,目前无法让 CloudFront 指向 $LATEST
或使用 Labmda@Edge 时函数的特定别名。
根据 AWS 官方文档(在 https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_LambdaFunctionAssociation.html 上的 LambdaFunctionARN 下找到):
You must specify the ARN of a function version; you can't specify a Lambda alias or $LATEST.
如果以下是您的选择并且也可以满足您的需求,我们通常在我所在的公司所做的事情(不仅是在此问题的上下文中讨论的原因)同时拥有 CloudFront 分发版和在同一 CloudFormation 堆栈下定义的 Lambda 函数(在我们的例子中,使用 Serverless 框架进行管理)。这样,为服务于特定环境(例如生产)的堆栈部署更改会创建新版本的 Lambda 函数并自动更新与其关联的 CloudFront 分配。
共享以防万一它有望作为替代解决方案。
关于amazon-web-services - Lambda 别名和 CloudFront : The function ARN must reference a specific function version,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57453934/