使用serverless-python-requirements插件部署Serverless项目出现TypeError如何解决
报错根因
该错误是serverless-python-requirements插件处理容器镜像类型Lambda函数的兼容性问题导致:插件默认会遍历所有Python运行时的函数,读取本地代码路径下的requirements.txt安装依赖,但你部署的ec2函数使用容器镜像方式部署,没有配置本地代码路径(handler字段),插件读取路径时拿到undefined就抛出了参数类型错误。
因为你使用容器镜像部署Lambda,依赖已经在Dockerfile.ec2构建过程中安装完成,不需要插件额外处理依赖,可通过以下方法解决:
解决方法
- 方法1:函数级别禁用插件处理
在ec2.yml配置中添加函数级自定义配置,明确告知插件不需要处理该函数的依赖:
# 添加到ec2.yml的任意顶层位置即可 custom: pythonRequirements: false
- 方法2:全局配置排除指定函数
若不想修改单独的函数配置,可在serverless.yml的全局pythonRequirements配置中添加排除规则:
custom: pythonRequirements: dockerizePip: 'non-linux' slim: true exclude: # 新增排除项,值为需要排除的函数名 - ec2
- 方法3:升级插件版本
旧版本serverless-python-requirements对容器镜像类型函数的兼容性存在已知bug,可尝试升级到最新版本修复该问题:
npm install serverless-python-requirements@latest --save-dev
额外注意事项
你当前serverless.yml的告警配置存在语法错误:alerts.topics.alarm.topic的!Sub后缺少开头单引号,后续部署可能触发语法校验失败,建议修正为:
alarm: topic: !Sub 'arn:aws:sns:${self:custom.region}:${AWS::AccountId}:${AWS::StackName}-alarm'
内容的提问来源于stack exchange,提问作者Nícolas Thiesen
相关产品推荐
相关产品推荐

