CloudFormation从S3拉取代码创建Lambda出现嵌套结构导致依赖导入失败
问题根因
你当前S3存储的zip包是将整个python_data_collector目录打包,而非将目录下的入口文件、依赖库直接打包到zip根目录。Lambda运行时的默认工作目录为/var/task,zip包会直接解压到该路径下,因此你的实际文件结构为/var/task/python_data_collector/lambda.py、/var/task/python_data_collector/requests/(依赖库存放路径)。Python默认的模块搜索路径仅包含/var/task及运行时内置路径,无法检索到子目录下的依赖库,因此触发导入报错。
解决方案
- 方案1:调整zip打包规则(最推荐)
打包时进入python_data_collector目录,选中目录内所有文件(包括入口文件lambda.py、依赖库文件夹等)进行打包,不要直接打包上层的python_data_collector目录。
命令行打包参考命令:
cd python_data_collector zip -r ../python_data_collector.zip ./*
调整后将新的zip包上传到S3,Lambda处理程序配置为lambda.lambda_handler即可正常运行。
- 方案2:修改Python模块搜索路径(无需调整打包逻辑)
如果不想改动现有打包规则,可以在lambda.py文件最开头添加如下代码,将当前文件所在目录加入Python模块搜索路径:
import sys import os sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
修改后重新打包上传即可,处理程序保持python_data_collector.lambda.lambda_handler配置即可。
内容的提问来源于stack exchange,提问作者dataviews
相关产品推荐
相关产品推荐

