无服务器部署 - 函数未找到 - sls deploy

26
我正在尝试通过Serverless CLI部署一个无服务器函数,但是我遇到了以下错误:
“生成下载链接LambdaFunction失败-未找到函数:”
奇怪的是,我已经成功地将此函数部署到另一个阶段“qa”,但对于“dev”阶段,它只会抛出上述错误。
如果我尝试手动从AWS控制台创建函数并部署它,则Lambda函数菜单显示该函数在X秒前已部署,但它不会显示我在本机serverless.yml文件中设置的任何设置。
值得注意的是,我曾经成功将这个函数部署到“dev”阶段,但我意外地删除了它。从那时起,它就拒绝重新部署。
我一直在为自己做错了什么而苦恼,但却找不到任何问题,有其他人在使用Serverless时遇到过类似的问题吗?
5个回答

56

我曾在Serverless中遇到过这个问题。问题的原因是由于Serverless如何处理、跟踪和部署您的函数所致。当您删除函数时,您实际上手动更改了应用程序的状态,并且它已经不同步。

要解决这个问题,请注释拒绝部署的函数,然后运行sls deploy。完成后取消注释该函数,再次运行sls deploy。这次它应该能够成功部署您的函数。


3
我最终只是重新命名了函数,但听起来这具有相同的效果。谢谢! - red house 87
5
Tamojit Chakraborty提供的sI5删除解决方案(如下)比仅删除sI5部署并重新放回要干净得多。 - betelgeuz
4
这要看情况而定。完整的sls remove命令将删除堆栈中的所有资源,包括日志组、API网关等。在许多情况下,这可能会带来问题。例如,如果您有合规义务并需要保留日志记录,或者如果您将API网关映射到自定义域或CloudFront上,或者如果您具有跨堆栈资源依赖性。更不用说,使用完整的删除和重新部署方法可能会不必要地使其他功能失效。这两种方法都可以使用,但对于正在生产中的服务,我建议采用更有针对性的方法。 - hephalump
您先生 - 真是个救命恩人! - Joe Buckle

12

使用 sls remove 命令从堆栈中移除所有内容,然后运行 sls deploy 命令。


这会删除Dynamodb、s3等所有内容! - Menelaos Kotsollaris

3

注意:使用此命令将删除并重新创建整个堆栈,包括任何数据库,因此请自行承担风险

使用以下命令:

serverless remove --stage "环境变量" --region "区域"

例如: serverless remove --stage dev --region us-east-1

重点是,如果您意外/手动从堆栈中删除任何内容,则会破坏该堆栈。您必须使用上述命令进行删除和清理。

另一种解决方法是手动重新创建已删除的组件,但我建议按照上述流程操作,以免出现问题。


1

请在AWS控制台顶部的菜单中检查您的区域过滤器。

确保它与您在serverless.yml中部署的区域相同:

provider:
  name: aws
  runtime: nodejs12.x
  region: us-east-1

enter image description here


0

我也遇到了同样的问题。不记得是因为我改变了函数名称还是因为我添加了什么。

  apiGateway:
    shouldStartNameWithService: true

在 provider 部分的 serverless.yml 文件中进行更改(我这样做是因为我想切换到新的 API 网关命名)。

Serverless 仍然跟踪旧名称,所以为了重置它并能够再次部署,我执行了以下三个步骤:

  1. 删除 Serverless 在 S3 中创建的存储桶;
  2. 删除 Serverless 在 CloudFormation 中创建的堆栈;
  3. 删除 Serverless 在我的项目根文件夹中创建的 .serverless 文件夹。

之后,serverless deploy 命令又可以正常工作了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接