无服务器部署 - 未找到函数 - sls deploy
Posted
技术标签:
【中文标题】无服务器部署 - 未找到函数 - sls deploy【英文标题】:Serverless deploy - Function not found - sls deploy 【发布时间】:2020-02-11 10:23:01 【问题描述】:我正在尝试通过无服务器 CLI 部署无服务器功能,但出现以下错误:
发生错误:GenerateDownloadLinkLambdaFunction - 函数没有 发现:
奇怪的是,我已经为另一个阶段qa
部署了这个函数并且它部署得很好,但是对于dev
它只是抛出了上述错误。
如果我尝试从 AWS 控制台手动创建函数并部署它,Lambda 函数菜单会显示该函数是 X 秒前部署的,但是它没有显示我在 serverless.yml
文件中的任何设置在我的机器上。
另外值得注意的是,我已经设法在dev
舞台上部署了这个功能,但我不小心删除了它。从那以后它拒绝重新部署。
一直在思考我做错了什么,但没有发现任何东西,以前有没有其他人遇到过类似的 Serverless 问题?
【问题讨论】:
【参考方案1】:我在使用 Serverless 时遇到过这个问题。该问题是由 Serverless 如何处理、跟踪和部署您的函数引起的。当您删除该功能时,您实际上手动更改了应用程序的状态,并且实际上是不同步的。
要解决此问题,请注释掉拒绝部署的函数,然后运行sls deploy
。完成后取消注释该功能,然后再次sls deploy
。这次它应该部署你的函数。
【讨论】:
我最终只是重命名了该函数,但听起来效果相同。谢谢! Tamojit Chakraborty 使用sls remove
(如下)的解决方案比删除sls deploy
并放回它要干净得多
这真的取决于。完整的sls remove
将删除堆栈中的所有资源,包括日志组、API 网关等。这在许多情况下可能会出现问题。例如,如果您有合规义务并需要保留日志,或者如果您将 API 网关映射到自定义域或 CloudFront,或者如果您具有跨堆栈资源依赖关系。更不用说您可能会通过完全删除、重新部署而不必要地使其他功能停止服务。这两种方法都可以,但对于生产中的服务,我建议采用更有针对性的方法。【参考方案2】:
使用 sls remove 从堆栈中删除所有内容,然后运行 sls deploy
【讨论】:
【参考方案3】:在 AWS 控制台顶部的菜单上检查您的区域过滤器。
确保它与您在 serverless.yml 中部署到的区域相同:
provider:
name: aws
runtime: nodejs12.x
region: us-east-1
【讨论】:
【参考方案4】:我遇到了同样的问题。不记得是因为我更改了函数名还是因为我添加了
apiGateway:
shouldStartNameWithService: true
到提供程序部分中的 serverless.yml。 (我这样做是因为我想切换到the new API gateway naming)
Serverless 仍在跟踪旧名称,因此为了重置它并能够再次部署,我执行了以下 3 个步骤:
-
删除了 Serverless 在 S3 中创建的存储桶;
删除了 Serverless 在 CloudFormation 中创建的堆栈;
删除了 Serverless 在我项目的根文件夹中创建的 .serverless 文件夹。
之后,serverless deploy
命令再次起作用。
【讨论】:
【参考方案5】:注意:这将删除并重新创建整个堆栈,包括数据库(如果有的话),因此请自行承担风险
使用以下命令:
无服务器删除 --stage "environment" --region "region"
例如。 无服务器删除 --stage dev --region us-east-1
关键是如果您意外/手动从堆栈中删除任何内容,那么您会破坏堆栈。您必须使用上述命令将其删除并清理。
另一种解决方法是手动重新创建已删除的组件,但我再次建议按照上述流程进行操作,现在将其中断。
相信我...它有效...!!!
【讨论】:
以上是关于无服务器部署 - 未找到函数 - sls deploy的主要内容,如果未能解决你的问题,请参考以下文章
sls 离线启动,无服务器警告:发现功能不受支持的运行时“nodejs8.10”
无服务器框架 sls 与 Powershell sls 冲突(选择字符串)