Deployment 我不能仅仅用无服务器框架1.20.2部署一个函数

Deployment 我不能仅仅用无服务器框架1.20.2部署一个函数,deployment,aws-lambda,serverless-framework,Deployment,Aws Lambda,Serverless Framework,我想跟着 只需重新部署我的函数,因为没有更改serverless.yml 但是,它只是挂在Serverless:Uploading功能阶段。显然是永远 整个部署(使用sls deploy)工作正常,但速度较慢 既然显然没有错误消息,如何调试它 编辑 当我使用slsdeploy时,我的项目部署大约需要4分钟15秒 它对我来说似乎很长,所以我想我应该使用sls deploy function-f myFunction,这应该更快 然而,当我尝试sls部署函数-f myFunction时,它似乎永远挂

我想跟着

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

但是,它只是挂在
Serverless:Uploading功能
阶段。显然是永远

整个部署(使用
sls deploy
)工作正常,但速度较慢

既然显然没有错误消息,如何调试它

编辑

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

它对我来说似乎很长,所以我想我应该使用
sls deploy function-f myFunction
,这应该更快

然而,当我尝试
sls部署函数-f myFunction
时,它似乎永远挂在
Serverless:upload function:myFunction

我不知道如何调试它

使用“verbose”与
Serverless:upload function:myFunction--verbose
似乎没有什么区别,返回的消息是相同的

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

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

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

另一个奇怪之处是:悬挂时,上面写着:

无服务器:上传功能:myFunction(12.05 MB)

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

当我使用
sls deploy
时,显示的大小相同:

无服务器:正在将service.zip文件上载到S3(12.05 MB)

我的函数部署可能有什么问题

编辑2

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

在我的无服务器项目的
functions
dir中,我想要一个通用的
package.json
node\u modules
。然后,每个函数都可以根据需要导入模块

我试着跟着

我的
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部署

无服务器:正在将service.zip文件上载到S3(31.02 MB)

并且该函数可以工作:)

但是,使用
sls部署函数-f myFunction
,我得到:

无服务器:上载功能:调度(1.65 MB)

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

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


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


无论是
sls deploy--verbose
还是
sls deploy-v
都可以做到这一点。

我将介绍以下内容:

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

    $SLS\u DEBUG=真正的SLS部署--详细

    $SLS\u DEBUG=true SLS部署函数-f myFunction--verbose

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

  • 使用
    无服务器软件包
    查看软件包的压缩方式。它可以提供一些线索

  • 您使用的插件是否改变了软件包的创建方式

  • 您有多少个
    node\u模块
    目录?整个服务只有一个,还是每个功能只有一个


  • 我无法理解为什么功能部署(相对于服务部署)会挂起。我可能错误配置了我的
    serverless.yml
    文件

    但没什么大不了的:我可以不用
    sls部署函数-myFunction

    因为我的期望是错误的。我认为部署一个功能要比部署一个服务快得多,因为不知何故没有重新部署
    node\u modules
    目录

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

    如中所述:

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

    框架获取已经上传的函数.zip文件的散列,并将其与本地.zip文件散列进行比较

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

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

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

    因此,在我看来,只有当服务具有多个功能,并且服务功能不使用许多常见的nodejs模块时,功能部署才会节省时间(与服务部署相反)。如果
    sls部署函数-f myFunction
    未挂起,即:)


    因此,为了提高开发速度,诀窍是使用离线仿真工具,如

    提供本地服务器,通过调用
    http://localhost:3000/myFunction
    在或浏览器中

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

    谢谢@JustDanyul。什么