AWS Lambda执行sam local invoke无法识别app.py应用问题咨询
解决方案
你的报错核心是Lambda运行环境的Python模块搜索路径未包含项目代码目录,本地pytest运行时会自动把当前工作目录加入搜索路径,因此可以正常执行,SAM本地模拟环境的路径规则和生产Lambda一致,因此出现导入失败。可按以下方案逐一排查修正:
方案1:修正
template.yaml的函数配置
打开内层bodyestimate目录下的template.yaml,找到HelloWorldFunction的配置段,确认两个参数配置正确:- 若要直接打包当前目录下的代码:
CodeUri设置为./,Handler设置为app.lambda_handler(此处的lambda_handler替换为你app.py里实际的入口函数名) - 若要按包结构组织代码:
CodeUri设置为外层bodyestimate项目根目录路径,Handler设置为bodyestimate.app.lambda_handler
修改完成后删除项目下的.aws-sam目录,重新执行sam build后再调用invoke命令。
- 若要直接打包当前目录下的代码:
方案2:在app.py开头手动添加模块搜索路径
如果你的app.py中存在从bodyestimate包导入其他模块的逻辑,可以在app.py的最开头加入以下代码,强制把当前文件所在目录加入Python搜索路径:import sys import os sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))方案3:调整运行sam build的工作目录
如果你是从内层bodyestimate目录执行的sam build,可以切换到外层bodyestimate根目录执行build,同时修改template.yaml的CodeUri为./bodyestimate/,Handler保持app.lambda_handler即可,该配置会把内层bodyestimate目录下的所有代码直接打包到Lambda的执行根目录,避免包导入层级错误。
内容的提问来源于stack exchange,提问作者Peter Dimmar
相关产品推荐
相关产品推荐

