如何解决自定义Python模块导入AWS Lambda Layer的找不到模块问题?
No module named utils的原因 以下是核心排查方向及解决办法:
ZIP包结构不符合Lambda Layer要求
AWS Lambda对Python层的目录结构有强制要求:代码必须放在python/目录下。你的ZIP当前结构是直接把utils放在根目录,正确的结构应该是:python/ utils/ a.py b.py c.py重新打包时,要将
utils文件夹放入python目录,再压缩python目录为ZIP包(注意ZIP根目录必须是python,不能包含额外的外层文件夹)。Layer与Lambda函数的版本不匹配
确认Layer打包时使用的Python版本,和目标Lambda函数的运行时版本完全一致(比如Layer用Python 3.10打包,Lambda函数也必须设置为Python 3.10)。版本不兼容会导致Lambda无法识别Layer中的模块。同时要检查Layer是否已正确关联到目标Lambda函数,可在Lambda控制台的「Layers」标签页确认。执行环境路径异常
Lambda会自动将Layer的python目录加入Python的sys.path,如果结构正确仍报错,可在Lambda代码开头添加调试代码:import sys print(sys.path)执行后查看CloudWatch日志,确认Layer的
python目录是否在路径列表中。如果不在,说明Layer关联或打包过程存在问题,需重新检查。打包时混入冗余目录
避免将本地项目的外层目录(比如你存放python文件夹的项目文件夹)也打包进ZIP,比如ZIP内出现my-local-project/python/utils/...的结构会导致模块无法被识别,确保ZIP根目录直接是python文件夹。
内容的提问来源于stack exchange,提问作者mr oogway

