【问题标题】:Serverless deploy - Function not found - sls deploy无服务器部署 - 未找到函数 - sls deploy
【发布时间】:2020-02-11 10:23:01
【问题描述】:

我正在尝试通过无服务器 CLI 部署无服务器功能,但出现以下错误:

发生错误:GenerateDownloadLinkLambdaFunction - 函数没有 发现:

奇怪的是,我已经为另一个阶段qa 部署了这个函数并且它部署得很好,但是对于dev 它只是抛出了上述错误。

如果我尝试从 AWS 控制台手动创建函数并部署它,Lambda 函数菜单会显示该函数是 X 秒前部署的,但是它没有显示我在 serverless.yml 文件中的任何设置在我的机器上。

另外值得注意的是,我已经设法在dev 舞台上部署了这个功能,但我不小心删除了它。从那以后它拒绝重新部署。

一直在思考我做错了什么,但没有发现任何东西,以前有没有其他人遇到过类似的 Serverless 问题?

【问题讨论】:

    标签: amazon-web-services aws-lambda serverless-framework


    【解决方案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 个步骤:

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

        之后,serverless deploy 命令再次起作用。

        【讨论】:

          【解决方案5】:

          注意:这将删除并重新创建整个堆栈,包括数据库(如果有的话),因此请自行承担风险

          使用以下命令:

          无服务器删除 --stage "environment" --region "region"

          例如。 无服务器删除 --stage dev --region us-east-1

          关键是如果您意外/手动从堆栈中删除任何内容,那么您会破坏堆栈。您必须使用上述命令将其删除并清理。

          另一种解决方法是手动重新创建已删除的组件,但我再次建议按照上述流程进行操作,现在将其中断。

          相信我...它有效...!!!

          【讨论】:

            猜你喜欢
            • 2020-09-07
            • 1970-01-01
            • 2021-08-22
            • 1970-01-01
            • 2020-01-09
            • 2020-05-09
            • 2020-01-28
            • 2016-05-30
            • 1970-01-01
            相关资源
            最近更新 更多