无服务器部署 - 未找到函数 - 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 冲突(选择字符串)

“functions.app.events[0]”处的无服务器配置警告:不支持的函数事件

在无服务器框架中禁用 SLS_DEBUG=*

无服务器:服务文件未更改。跳过部署

无服务器框架 AWS 跨账户自定义授权方