我有一个 Lambda,当使用包含版本的 ARN 引用时(例如
...:function:MyFunction:123
),它充当 CloudFront 源请求处理程序。我已经为版本 123 创建了一个 PROD
别名,我想使用它。
使用
...: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 的说法,不幸的是,在使用 Labmda@Edge 时,目前不可能让 CloudFront 指向
$LATEST
或函数的特定别名.
根据 AWS 官方文档(位于 https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_LambdaFunctionAssociation.html 上的 LambdaFunctionARN 下):
必须指定函数版本的ARN;您无法指定 Lambda 别名或 $LATEST。
如果以下选项适合您并且也能满足您的需求,我们通常在我所在的公司做的事情(不仅是在这个问题的上下文中讨论的原因)是同时拥有 CloudFront 发行版和在同一 CloudFormation 堆栈下定义的 Lambda 函数(在我们的示例中,使用 Serverless 框架进行管理)。这样,为服务于特定环境(例如生产)的堆栈部署更改会创建新版本的 Lambda 函数,并自动更新与其关联的 CloudFront 发行版。 分享以防万一它可以作为替代解决方案。
这对我有用:
aws_lambda_function.my_func.qualified_arn
qualified_arn - 标识您的 Lambda 函数版本的 ARN(如果通过publish = true 启用版本控制)。