CloudFront关联Lambda函数时触发InvalidLambdaFunctionAssociationException错误
解决CloudFront关联Lambda时的InvalidLambdaFunctionAssociationException错误
嘿,这个错误其实说得相当直白——你用来关联CloudFront的Lambda函数用了Python 2.7运行时,但当时CloudFront要求这类触发函数必须使用Node.js 6.10(不过现在AWS已经支持更多新版本的运行时了,比如Python 3.8+、Node.js 14.x及以上,我们后面会详细说到)。
下面是具体的修复步骤,一步步来:
1. 明确CloudFront支持的Lambda运行时
首先要搞清楚,CloudFront触发的Lambda函数(包括Lambda@Edge)有严格的运行时限制:Python 2.7早就被AWS淘汰,而且从一开始就不被CloudFront的关联机制支持。目前AWS官方支持的运行时包括:
- Node.js 14.x、16.x、18.x
- Python 3.8、3.9、3.10、3.11
建议选一个较新的稳定版本,比如Python 3.9或者Node.js 16.x,兼容性和安全性都更好。
2. 迁移Lambda函数到支持的运行时
- 打开AWS Lambda控制台,找到你的
domain_redirects函数 - 切换到「配置」标签页,找到「运行时设置」,点击「编辑」
- 选择一个CloudFront支持的运行时,比如Python 3.9
- 检查你的Python代码是否兼容3.x版本:比如把
print "xxx"改成print("xxx"),处理好2.x到3.x的语法差异(代码量不大的话很快就能搞定) - 保存更改后,记得发布一个新的函数版本(比如版本2),因为CloudFront关联需要指定具体的版本ARN
3. 重新关联CloudFront与更新后的Lambda函数
- 回到CloudFront控制台,找到你的Web分配
- 进入「行为」标签页,编辑你之前配置的那个行为
- 在「Lambda函数关联」部分,替换成新的函数ARN(比如
arn:aws:lambda:us-east-1:316211033416:function:domain_redirects:2) - 保存更改,然后等待CloudFront完成部署(这个过程通常需要几分钟)
额外注意事项
- 如果你用的是Lambda@Edge,函数必须部署在
us-east-1区域(你的函数已经是这个区域,没问题) - 确保Lambda的执行角色有允许CloudFront调用它的权限:在角色的信任策略里,要添加
cloudfront.amazonaws.com作为信任实体 - 要是你不想修改Python代码,也可以把重定向逻辑改成Node.js代码,用报错里提到的nodejs6.10(不过这个版本也比较老,还是推荐用更新的Node.js版本更稳妥)
你遇到的错误原文:
com.amazonaws.services.cloudfront.model.InvalidLambdaFunctionAssociationException: The function has an invalid runtime for functions that are triggered by a CloudFront event: python2.7 Expecting: nodejs6.10 Function: arn:aws:lambda:us-east-1:316211033416:function:domain_redirects:1 (Service: AmazonCloudFront; Status Code...)
内容的提问来源于stack exchange,提问作者Manish Kumar
相关产品推荐
相关产品推荐

