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

推送Python容器镜像至AWS Lambda时遇错误,寻求排查方案

问题分析与解决方案

错误1:Runtime.MalformedHandlerName

这个错误是因为Lambda要求handler格式必须为模块名.函数名,你最初的Lambda配置里handler被设为了app(缺少.lambda_handler后缀),导致运行时无法解析正确的处理函数。你后续修改CMD为app.lambda_handler是正确的方向,但遇到了新的模块找不到问题。

错误2:Runtime.ImportModuleError

核心原因是你的app.py没有被正确复制到Lambda运行时能识别的路径中,或者构建镜像时的上下文有误,导致镜像内不存在app.py文件。

具体排查与解决步骤:

  1. 确认构建镜像的上下文
    构建镜像时,必须保证app.py和Dockerfile在同一个目录下,并且执行docker build命令时,当前工作目录就是这个目录。如果app.py在子目录,COPY命令需要调整路径(比如COPY ./src/app.py /var/task/),否则Docker会找不到文件,导致镜像内没有app.py。

  2. 验证镜像内的文件是否存在
    本地运行镜像并进入容器,检查/var/task目录下是否有app.py:

    # 先查看你的镜像ID
    docker images
    # 进入容器
    docker run -it --entrypoint bash <你的镜像ID>
    # 检查文件
    ls /var/task
    

    如果输出里没有app.py,说明COPY命令未生效,重新检查构建上下文和COPY路径。

  3. 修正Dockerfile(可选但更稳定)
    把${LAMBDA_TASK_ROOT}替换为明确的路径/var/task,避免环境变量解析问题:

    FROM public.ecr.aws/lambda/python:3.8
    COPY app.py /var/task/
    CMD [ "app.lambda_handler" ]
    
  4. 确认Lambda控制台配置
    推送镜像到ECR并创建Lambda函数时,确保:

    • 容器镜像的启动命令未被手动修改,保持与Dockerfile的CMD一致;
    • 如果在控制台指定启动命令,必须填写app.lambda_handler。

为什么本地测试正常?

本地测试时,你是在app.py所在的目录运行Python,该目录默认在Python的模块搜索路径中,所以能正常导入app模块。但Lambda运行时的模块搜索路径默认只包含/var/task,如果app.py不在这个路径下,就会出现导入错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 18:40:45