【问题标题】:I cannot just deploy a function with Serverless-framework 1.20.2我不能只使用无服务器框架 1.20.2 部署功能
【发布时间】:2018-02-05 00:32:10
【问题描述】:

我想关注these tips

只需重新部署我的函数,因为 serverless.yml 没有更改。

但是,它只是挂在Serverless: Uploading function 舞台上。显然,永远。

整个部署(使用sls deploy)虽然很慢。

如何调试这个,因为显然没有错误消息?

编辑

当我使用sls deploy 时,我的项目大约需要 4 分钟 15 秒来部署。

对我来说似乎相当长,所以我想我会改用sls deploy function -f myFunction,它应该会快得多。

但是,当我尝试sls deploy function -f myFunction 时,它似乎永远挂在Serverless: Uploading function: myFunction 上。

我不知道如何调试。

好像用'verbose',跟Serverless: Uploading function: myFunction --verbose没什么区别,返回的消息都是一样的。

我将尝试等待,看看最终函数部署是否完成......

好吧,我等了,但没有:大约 8 分 30 秒后,我收到以下错误消息:

无服务器错误 ---------------------------------------- 120000 毫秒后连接超时 得到支持 - - - - - - - - - - - - - - - - - - - - - - 文档:docs.serverless.com 错误:github.com/serverless/serverless/issues 论坛:forum.serverless.com 聊天:gitter.im/serverless/serverless 您的环境信息 ----------------------------- 操作系统:Linux 节点版本:7.10.0 无服务器版本:1.20.2

另一个奇怪的地方:悬挂时,上面写着:

无服务器:上传函数:myFunction (12.05 MB)...

但函数本身只有 3.2 kB,并且不包含任何包。

当我使用sls deploy时,显示的大小是一样的:

无服务器:将服务 .zip 文件上传到 S3 (12.05 MB)...

我的函数部署有什么问题?

编辑 2

正如@dashmug 所暗示的,serverless.yml 中存在配置问题。

在我的无服务器项目的functions 目录中,我希望有一个共同的package.jsonnode_modules。然后每个函数可以根据需要导入模块。

我尝试关注the official guide

我的serverless.yml是这样的:

functions:
  myFunction:
    package:
      exclude:
        - 'functions/node_modules/**'
        - '!functions/node_modules/module1_I_want_to_include/**'
        - '!functions/node_modules/module2_I_want_to_include/**'

现在我知道了,sls deploy

无服务器:将服务 .zip 文件上传到 S3 (31.02 MB)...

并且该功能有效:)

但是,使用sls deploy function -f myFunction,我得到:

Serverless:上传功能:dispatch (1.65 MB)...

它确实在合理的时间内上传,但该函数现在给出以下错误:

无法导入模块“functions/myFunction”:错误

【问题讨论】:

  • 回复的帮助不足以保证回复,但我是否可以强烈建议切换到Apex?我已经使用它将近一年了,并且几乎没有遇到任何问题,而这些问题完全来自我破解了我想要的功能。 :)
  • 好的,谢谢,我试一试

标签: deployment aws-lambda serverless-framework


【解决方案1】:

我会看的东西:

  1. 尝试比较两者之间发生的情况:

    $ SLS_DEBUG=true sls deploy --verbose

    $ SLS_DEBUG=true sls deploy function -f myFunction --verbose

  2. 根据您的项目结构检查您的无服务器配置(打包等)。一个危险信号是函数部署与服务部署一样大。这可能是配置错误的问题。

  3. 使用serverless package 查看包的压缩方式。它可以提供一些线索。

  4. 您是否使用了任何可能改变了您的包的创建方式的插件?

  5. 你有多少个node_modules 目录?整个服务只有一个还是每个功能一个?

【讨论】:

  • 1.这没有帮助,因为“仅功能”部署只是挂起
  • 2.你肯定在做某事:这可能是 yaml 中的包配置问题
  • 3.是的,我可以看到两个大包:一个名为“serverless.zip”,另一个名为“myFunction.zip”
  • 4.不,没有用于打包/打包的特定插件
  • 5.我的目标是只为所有功能提供一个包,并希望使用排除/包含来获取每个功能中所需的模块
【解决方案2】:

您可以通过将--verbose 参数传递给部署函数来使部署过程更加详细。

sls deploy --verbosesls deploy -v 都可以解决问题。

【讨论】:

  • 感谢@JustDanyul。我的意思是:部署整个项目需要一段时间,所以我想我会上传我更新的功能。我将编辑问题以使其更清楚...
【解决方案3】:

我无法弄清楚为什么功能部署(而不是服务部署)会挂起。我的serverless.yml 文件可能配置错误。

但没什么大不了的:我可以不用sls deploy function -myFunction

因为我的预期是错误的。我认为通过某种方式不重新部署node_modules 目录,部署功能会比部署服务快得多。

但 AWS 中没有部分功能部署:部署功能时,还必须部署所有必要的节点模块才能使功能正常工作。

serverless doc中所述:

框架将目标 AWS Lambda 函数打包成一个 zip 文件。

框架获取已上传的函数 .zip 文件的哈希值,并将其与本地 .zip 文件哈希值进行比较。

如果两个哈希值相同,则框架终止。

该 zip 文件使用与 CloudFormation 堆栈指向的前一个函数相同的名称上传到您的 S3 存储桶。

我(天真地)希望只有更新的处理程序会上传到 S3。 但是由于函数是在部署之前打包的,它确实需要它的所有模块和依赖项。

所以在我看来,只有当服务具有多个功能并且服务功能不使用许多常见的nodejs模块时,功能部署才能节省时间(与服务部署相反)。如果sls deploy function -f myFunction 没有挂起,那就是:)


所以为了提高开发速度,诀窍是使用离线模拟和serverless offline这样的工具

serverless offline 提供本地服务器,通过在 Postman 或浏览器中调用 http://localhost:3000/myFunction 可以在本地访问 lambda 函数 myFunction

在大多数情况下,sls deploy 只能在处理程序经过全面离线测试后调用一次。

【讨论】:

    猜你喜欢
    • 2019-08-31
    • 2021-07-27
    • 1970-01-01
    • 2017-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-29
    相关资源
    最近更新 更多