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

serverless-python-requirements部署numpy Lambda报内部错误排查

问题原因
  • 核心原因:numpy是包含C语言编译原生扩展的第三方库,本地开发环境(Windows/macOS/非Amazon Linux的普通Linux发行版)安装的numpy二进制是适配本地系统、CPU架构的,和AWS Lambda的Amazon Linux运行环境不兼容,打包上传后Lambda执行时无法正常导入numpy,直接触发运行时错误。纯Python实现的依赖无原生兼容问题,因此移除numpy后函数可正常运行。
  • 配置疏漏:当前使用的serverless-python-requirements插件未配置Lambda兼容的打包规则,默认直接打包本地环境安装的依赖,未做跨环境兼容处理。
  • 笔误问题:当前serverless.yml中配置的handler为tes_api.handler,和实际代码文件名test_api.py拼写不一致,若不是提问时的输入笔误,即便numpy问题修复,也会触发handler不存在的错误,需先核对修正。
修复方案
  1. 修正基础配置笔误:将serverless.yml内functions.test.handler字段值从tes_api.handler改为test_api.handler,和代码文件名保持一致。
  2. 安装必要依赖:在项目根目录执行npm install --save-dev serverless-python-requirements,确保打包插件正确安装到项目dev依赖中,避免插件未生效导致依赖未被正确打包。
  3. 调整插件配置,使用Lambda兼容环境打包依赖:
    提前安装并启动本地Docker,修改serverless.yml添加custom配置段,指定插件使用和Lambda一致的Amazon Linux环境编译、打包带原生扩展的依赖,参考配置如下:
    service: test_api
    frameworkVersion: "3"
    provider:
      name: aws
      runtime: python3.8
      region: eu-west-3
      stage: dev
      # 如需使用性价比更高的arm64架构,可取消下一行注释
      # architecture: arm64
    
    functions:
      test:
        handler: test_api.handler
        events:
          - http:
              path: test_api
              method: get
              cors: true
    
    plugins:
      - serverless-python-requirements
    
    custom:
      pythonRequirements:
        # 开启docker模式,在Lambda匹配的系统环境中打包依赖,解决原生扩展兼容问题
        dockerizePip: true
        # 若使用arm64架构,补充配置对应架构的构建镜像即可
        # 依赖单独打zip包,降低冷启动耗时
        zip: true
        # 自动剔除冗余的测试文件、缓存文件,减小部署包体积
        slim: true
    
  4. 清理旧资源重新部署:先执行sls remove删除之前部署的异常资源栈,再执行sls deploy重新完成部署即可。

替代方案:如果不想本地安装Docker,可直接使用AWS官方提供的内置numpy、scipy等科学计算库的公共Lambda层,对应Python3.8版本的层为AWSLambda-Python38-SciPy1x,在函数配置中挂载当前部署区域对应版本的该层后,将Pipfile中的numpy依赖移除,不需要自己打包numpy即可正常运行,这种方式部署包体积更小,冷启动速度更快。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 04:24:12