2017-08-27 18 views
12

我想跟随these tips我不能只部署与无服务器框架的功能1.20.2

,只是重新部署我的功能,如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秒,我得到了以下错误消息:

Serverless Error --------------------------------------- Connection timed out after 120000ms Get Support -------------------------------------------- Docs: docs.serverless.com Bugs: github.com/serverless/serverless/issues Forums: forum.serverless.com Chat: gitter.im/serverless/serverless Your Environment Information ----------------------------- OS: linux Node Version: 7.10.0 Serverless Version: 1.20.2

另一个怪胎:挂时,它读取:

Serverless: Uploading function: myFunction (12.05 MB)...

但功能本身只是3.2 KB,不包括任何软件包。

当我使用sls deploy,显示的尺寸是一样的:

Serverless: Uploading service .zip file to S3 (12.05 MB)...

出了什么问题我的功能部署?

EDIT 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

Serverless: Uploading service .zip file to S3 (31.02 MB)...

和功能的工作原理:)

然而,随着sls deploy function -f myFunction,我得到:

Serverless: Uploading function: dispatch (1.65 MB)...

它上传在一个合理的时间,但现在的功能提供了以下错误:

Unable to import module 'functions/myFunction': Error

+0

没有足够的答复保证答案,但我强烈建议切换到[Apex](http://apex.run)?我已经使用了将近一年,并且只有很少的问题,而这些完全是来自我想要的功能。 :) –

+0

好的,谢谢,我会给它一个 – Manube

回答

2

您可以通过将--verbose参数部署功能部署过程更详细。

sls deploy --verbosesls deploy -v都可以做到。

+0

谢谢@JustDanyul。我的意思是:部署整个项目需要一段时间,所以我想我会上传我更新的功能。我将编辑这个问题,使其更清晰...... – Manube

4

事情我想看看:

  1. 尝试比较两个之间发生了什么:

    $ SLS_DEBUG=true sls deploy --verbose

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

  2. 检查无服务器配置(包老化等)对您的项目结构。一个红旗是功能部署与服务部署一样大。这可能是一个配置错误的问题。

  3. 使用serverless package来查看软件包是如何压缩的。它可以提供一些线索。

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

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

+0

1.没有帮助,因为'功能唯一'部署只是挂起 – Manube

+0

2.你肯定是在一些东西:它可能是在yaml的包配置问题 – Manube

+0

3.是的,我可以看到两个大包:一个叫做“serverless.zip”,另一个叫'myFunction.zip' – Manube

2

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

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

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

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

serverless doc解释说:

The Framework packages up the targeted AWS Lambda Function into a zip file.

The Framework fetches the hash of the already uploaded function .zip file and compares it to the local .zip file hash.

The Framework terminates if both hashes are the same.

That zip file is uploaded to your S3 bucket using the same name as the previous function, which the CloudFormation stack is pointing to.

我有(天真)希望只更新处理程序将被上传到S3。 但是由于该功能是在部署之前打包的,它确实需要所有的模块和依赖关系。

所以我看到它的方式,只有服务具有多个功能并且服务功能不使用许多常见的nodejs模块时,功能部署才会节省时间(而不是服务部署)。如果sls deploy function -f myFunction不挂,就是:)


所以要提高发展速度,诀窍是使用离线仿真用的工具,像serverless offline

serverless offline提供了本地服务器,lambda函数myFunction通过在Postman或浏览器中拨打http://localhost:3000/myFunction或浏览器

在大多数情况下,sls deploy只能在脱机处理完全测试后调用一次。