Serverless部署新Lambda函数报错:函数不存在,如何配置指向新函数?
遇到这种情况,大概率是你的Serverless配置或者部署流程里有几个细节没注意到,我帮你梳理下排查和修复步骤:
第一步:检查
serverless.yml的函数定义
首先确认你在serverless.yml里确实正确定义了myFunction,YAML对缩进要求很严格,函数必须嵌套在functions块下面,而且名称要和你命令里的myFunction完全一致(大小写敏感!)。举个正确的示例:service: my-service-name provider: name: aws runtime: nodejs18.x region: us-east-1 functions: myFunction: # 这里的名称必须和命令里的-f参数完全匹配 handler: src/myFunction.handler # 对应你的代码文件和导出的handler # 其他配置比如内存、超时等如果你的函数名拼写错了,或者缩进不对(比如和
functions同一层级),框架根本识别不到这个新函数。第二步:确保全量部署已经成功完成
serverless deploy function -f xxx这个命令是用来更新已存在的函数的,不是用来创建新函数的!如果你刚在yml里加了myFunction,必须先执行一次完整的serverless deploy,让框架把新函数的元数据同步到AWS和本地缓存里。
你可以执行serverless info命令,查看当前服务下已部署的函数列表,如果myFunction不在列表里,说明全量部署要么失败了,要么yml定义有问题。第三步:清理本地缓存目录
Serverless会在本地生成.serverless目录缓存服务配置,有时候旧缓存会导致框架看不到新函数。你可以删除这个目录,然后重新执行serverless deploy,之后再试serverless deploy function -f myFunction:- Linux/Mac:
rm -rf .serverless - Windows:
rmdir /s .serverless
- Linux/Mac:
第四步:确认部署阶段和区域匹配
如果你部署时指定了--stage或者--region参数(比如serverless deploy --stage prod),那执行deploy function时必须带上相同的参数,否则会默认指向dev阶段的旧服务。比如:serverless deploy function -f myFunction --stage prod --region us-east-1同样可以用
serverless info --stage prod --region us-east-1来验证对应环境下的函数是否存在。
按这个流程排查下来,基本就能解决你的问题了!
内容的提问来源于stack exchange,提问作者Md. Parvez Alam

