AWS Lambda Python3.9无需层导入requests突然失效问题咨询
你遇到的核心矛盾是之前无需手动部署requests依赖就能运行,现在却提示找不到模块,结合你的场景(多次用CloudFormation重建堆栈、代码未修改),可能的原因和排查方向如下:
可能的原因
之前的部署包无意中包含了
requests依赖
大概率是你之前打包Lambda代码时,本地环境的requests模块被一起打包进了部署zip里(比如执行过pip install requests -t .后再打包),只是你没留意。后来某次重建堆栈时,打包流程变了(比如只单独打包了index.py),导致部署包里没有了requests,自然就触发了模块找不到的错误。CloudFormation模板的隐性变更
可能之前的CFN模板里配置了包含requests的Lambda层,并且关联到了你的函数。后来模板被修改(比如自己误删、团队其他人调整),层的资源定义或者函数的层关联被移除,导致现在函数没有依赖支持。代码存储源的变化
如果你的CFN模板是从S3拉取部署包,那可能之前的S3 zip包包含requests,后来重新上传的zip包没有包含依赖,CFN部署时用了新的包,就会出现这个问题。极小概率:Lambda运行时的临时异常
AWS Lambda的Python3.9运行时本身确实不预装requests,但不排除某次AWS的临时更新中意外包含了该模块,后续又修正了这个问题。不过这个可能性极低,优先排查自己的部署流程。
排查步骤
检查当前Lambda的部署包
登录Lambda控制台,进入你的函数,在"代码"标签页下载部署包,解压后查看是否有requests文件夹或相关模块文件。如果没有,说明当前包确实缺少依赖。对比CFN模板的历史版本
找到之前能正常运行的CFN模板版本,和当前模板对比:- 查看是否有Lambda层的定义,以及函数是否关联了该层;
- 检查代码源的配置(比如S3路径、本地打包方式)是否有变化。
确认本地打包流程
如果是本地打包后上传,回忆之前的操作:是否执行过pip install requests -t ./将依赖安装到代码目录后再打包?现在的打包步骤是不是漏掉了这一步?查看Lambda函数的层配置
在Lambda控制台的"配置"->"层"标签页,确认是否挂载了包含requests的层。如果之前有,现在没有,那就是层被移除了。
内容的提问来源于stack exchange,提问作者Subash Chandra

