我想关注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秒后我收到以下错误信息:
无服务器错误--------------------------------------- 连接在120000ms后超时 得到支持 - - - - - - - - - - - - - - - - - - - - - - 文档: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.json
和node_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
,我得到:
无服务器:上传功能:发送(1.65 MB)...
它会在合理的时间内上传,但该功能现在会出现以下错误:
无法导入模块' functions / myFunction':错误
答案 0 :(得分:5)
我要看的东西:
尝试比较两者之间的情况:
$ SLS_DEBUG=true sls deploy --verbose
和
$ SLS_DEBUG=true sls deploy function -f myFunction --verbose
根据项目结构检查无服务器配置(打包等)。一个红旗是功能部署与服务部署一样大。这可能是一个配置错误的问题。
使用serverless package
查看如何压缩包裹。它可以提供一些线索。
您使用的是哪些插件可能改变了您的包的创建方式吗?
您有多少个node_modules
目录?您是否只有一个服务或每个功能一个?
答案 1 :(得分:2)
通过将--verbose
参数传递给deploy函数,可以使部署过程更加详细。
sls deploy --verbose
或sls deploy -v
都可以解决问题。
答案 2 :(得分:2)
我无法弄清楚为什么功能部署(而不是服务部署)会挂起。我可能错误配置了我的serverless.yml
文件。
但没什么大不了的:我可以不用sls deploy function -myFunction
。
因为我的期望是错误的。我认为部署一个函数会比部署一个服务更快,不管怎样都不会重新部署node_modules
目录。
但AWS中没有部分功能部署:部署功能时,必须部署所有必需的节点模块,以使该功能正常工作。
如serverless doc中所述:
Framework将目标AWS Lambda函数打包成一个zip文件。
Framework获取已上传的函数.zip文件的哈希值,并将其与本地.zip文件哈希值进行比较。
如果两个哈希值相同,则框架终止。
该zip文件使用与前一个函数相同的名称上传到您的S3存储桶,CloudFormation堆栈指向该文件。
我(天真地)希望只有更新的处理程序才能上传到S3。 但是,由于函数在部署之前打包,它确实需要所有模块和依赖项。
所以我认为,只有当服务具有多个功能,并且服务功能不使用许多常见的nodejs模块时,功能部署才能节省时间(而不是服务部署)。如果sls deploy function -f myFunction
没有挂起,那就是:)
因此,为了提高开发速度,诀窍是使用serverless offline
等工具使用离线模拟 serverless offline提供本地服务器,通过调用Postman中的myFunction
或浏览器
http://localhost:3000/myFunction
在大多数情况下,sls deploy
只能在处理程序完全脱机测试后调用一次。