You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

容器化Python AWS Lambda本地运行正常,部署后无法导入app模块

问题描述

我尝试将一款基于R的应用打包到Docker容器中部署,将基础镜像更换为lambda/python3.9,并新增了一个自带独立Dockerfile的应用,该应用包含一个简单的Python脚本作为函数的处理程序。我在该处理程序中调用代码运行R脚本,并将运行结果上传到S3。目前本地测试时一切运行正常,但当我将镜像推送到ECR并将容器部署为Lambda函数时,收到如下错误:

{
  "errorMessage": "Unable to import module 'app': No module named 'app'",
  "errorType": "Runtime.ImportModuleError",
  "requestId": "1a7fa818-62e4-4374-8318-625b15e2ae8a",
  "stackTrace": []
}

AWS调用的更多日志如下:

2021-09-25T17:11:32.570+02:00   START RequestId: 1a7fa818-62e4-4374-8318-625b15e2ae8a Version: $LATEST
2021-09-25T17:11:32.571+02:00   [ERROR] Runtime.ImportModuleError: Unable to import module 'app': No module named 'app' Traceback (most recent call last):
2021-09-25T17:11:32.574+02:00   END RequestId: 1a7fa818-62e4-4374-8318-625b15e2ae8a
2021-09-25T17:11:32.574+02:00 REPORT RequestId: 1a7fa818-62e4-4374-8318-625b15e2ae8a    Duration: 1.40 ms   Billed Duration: 2395 ms    Memory Size: 3200 MB    Max Memory Used: 48 MB  Init Duration: 2393.47 ms   

本地运行容器的命令:

docker run -e AWS_SECRET_ACCESS_KEY=XXX -e AWS_ACCESS_KEY_ID=YYY -p 9000:8080 palmid-lambda:latest

本地运行的输出:

time="2021-09-25T14:29:42.318" level=info msg="exec '/var/runtime/bootstrap' (cwd=/home/palmid, handler=)"
time="2021-09-25T14:29:47.899" level=info msg="extensionsDisabledByLayer(/opt/disable-extensions-jwigqn8j) -> stat /opt/disable-extensions-jwigqn8j: no such file or directory"
time="2021-09-25T14:29:47.899" level=warning msg="Cannot list external agents" error="open /opt/extensions: no such file or directory"
START RequestId: 1b867a67-e778-4418-9139-ff1123331b34 Version: $LATEST
... application logs

本地调用Lambda函数的命令:

curl -XPOST "http://localhost:9000/2015-03-31/functions/function/invocations" -d '{ "sequence": ">SRR9968562_waxsystermes_virus_microassembly
PIWDRVLEPLMRASPGIGRYMLTDVSPVGLLRVFKEKVDTTPHMPPEGMEDFKKASKEVE
KTLPTTLRELSWDEVKEMIRNDAAVGDPRWKTALEAKESEEFWREVQAEDLNHRNGVCLR
GVFHTMAKREKKEKNKWGQKTSRMIAYYDLIERACEMRTLGALNADHWAGEENTPEGVSG
IPQHLYGEKALNRLKMNRMTGETTEGQVFQGDIAGWDTRVSEYELQNEQRICEERAESED
HRRKIRTIYECYRSPIIRVQDADGNLMWLHGRGQRMSGTIVTYAMNTITNAIIQQAVSKD
LGNTYGRENRLISGDDCLVLYDTQHPEETLVAAFAKYGKVLKFEPGEPTWSKNIENTWFC
SHTYSRVKVGNDIRIMLDRSEIEILGKARIVLGGYKTGEVEQAMAKGYANYLLLTFPQRR
NVRLAANMVRAIVPRGLLPMGRAKDPWWREQPWMSTNNMIQAFNQIWEGWPPISSMKDIK
YVGRAREQMLDST", "hash": "132xx"}'
解决方案

该问题的核心原因是AWS Lambda Python运行时默认只会从/var/task目录加载处理程序模块,而你当前的代码放在/home/palmid目录下,未加入Python的模块搜索路径。本地测试时你大概率使用root用户启动容器,有权限读取任意路径的文件,所以不会触发报错。

可按以下任意一种方案修复:

  • 调整Dockerfile配置,将app.py及所有依赖代码直接复制到/var/task目录下,这是Lambda官方推荐的代码存放路径
  • 在Dockerfile中添加环境变量配置,将你的代码目录加入Python搜索路径:ENV PYTHONPATH="${PYTHONPATH}:/home/palmid"
  • 将Dockerfile中的WORKDIR设置为/var/task,后续所有代码操作都在该路径下执行
  • 额外确认app.py的文件权限,确保Lambda默认运行的非特权用户有该文件的读取权限,不要仅给root用户开放读权限

内容的提问来源于stack exchange,提问作者MGubler

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 02:36:02