为 AWS Lambda 和无服务器推荐啥本地节点版本

Posted

技术标签:

【中文标题】为 AWS Lambda 和无服务器推荐啥本地节点版本【英文标题】:What local node-version is recommended for AWS Lambda and Serverless为 AWS Lambda 和无服务器推荐什么本地节点版本 【发布时间】:2016-07-07 18:02:10 【问题描述】:

从 AWS-Lambda 和无服务器框架开始,我对节点版本感到困惑:

AWS help site 这么说(2016 年 3 月 21 日)

AWS Lambda 支持以下运行时版本:

Node.js:v0.10.36

所以我确实在我的本地机器上安装了 Node.js v0.10.36。通过

安装最新 (v 0.4.2) 无服务器框架
npm install serverless -g

它给出以下警告:

npm WARN 引擎 serverless@0.4.2: 想要: "node":">=4.0" (当前: "node":"0.10.36","npm":"1.4.28")

我认为在本地拥有与 AWS 上相同的版本可能有助于拥有一致的开发环境......我错了吗?我应该在本地运行什么 Node.js 版本才能充分利用无服务器?

【问题讨论】:

需要安装支持node v0.10.36的serverless版本 我如何检查,它确实如此? 你最好问问这个包的贡献者,或者自己检查版本 @Floo0,我在我的机器上运行节点 v5.1.0 和无服务器 v0.4.2。对我来说唯一有问题的是 ECMA 2015。我建议安装节点版本,因为 sls 询问“node”:">=4.0"。我没有听说社区中有人为这个版本不匹配而苦苦挣扎。我并不是说它是完美的,人们仍在等待 Lambda 团队更新节点版本。 @AluaK 非常感谢。刚刚更新了我的节点版本。到目前为止一切正常 【参考方案1】:

无服务器框架需要 Node.js v4.0 或更高版本。 v4.x 或 v5.x 行中的任何版本的 Node.js 都应该可以工作。

您说得对,AWS Lambda 目前仅支持 Node.js v0.10.36。在 Node.js v4.0 上构建无服务器框架的决定是因为预期 AWS Lamabda 最终将支持 Node.js v4.0 或更高版本。

在为 AWS Lambda 开发代码时,您应该继续只使用与 Node.js v0.10.36 兼容的功能。如果您对框架做出任何贡献,您可以使用 v4.0+ 中提供的 Node.js 功能。

另一种选择是使用 Babelify 将您的 ES2015 代码上传到 AWS Lambda。这允许您在 ES2015 中进行开发,而无需等待 AWS Lambda 正式支持它。这可以在您每次使用 Optimizer Plugin 使用无服务器框架进行部署时自动完成。

更新:现在有一个新选项,Serverless Babel Runtime。这比 Optimizer 所做的更进一步,并在运行时本身内部使用 Babel。

更新 2:AWS Lambda 现在支持 Node.js v4.3。

【讨论】:

非常感谢您的回答。到目前为止,我对使用无服务器的易用性感到惊讶。干得好! Lambda 现在支持 Node 4.3 (aws.amazon.com/blogs/compute/…) 并且我在 s-function.json 文件中将运行时设置为 nodejs4.3,但是当我尝试使用 4.3 功能时出现错误(例如 fat箭头函数、模板字符串、生成器等等)。无服务器是否迫使我以某种方式使用非 ES2015 功能? 原来我的 lambda 函数最初被创建为使用 node0.10(我正在玩弄 serverless babel 插件),即使我更改了运行时,serverless 也没有更新 AWS 上的配置到我的 s-function.json 中的 nodejs4.3 并重新部署。【参考方案2】:

如果您从一个全新的项目开始,我会极力避免从节点 0.10.x 开始。该版本此时刚刚收到重要的安全修复,并且仅持续五个月(直到 2016 年 10 月)。

Node.js 采用了常见的长期支持 (LTS) 模式来保持发布的及时和稳定。 Here is the current LTS plan 代表节点。

我强烈建议您从版本 4 或 5 开始,这取决于您对更改的兴趣并让您的项目保持最新。您将能够在 0.10/0.12 版本中利用 numerous new features,并更好地为 ES6 做好准备。

【讨论】:

以上是关于为 AWS Lambda 和无服务器推荐啥本地节点版本的主要内容,如果未能解决你的问题,请参考以下文章

使用 graphql、aws lambda 和无服务器框架的多个 url 路径选项错误

AWS SAM(无服务器应用程序模型)和无服务器框架有啥区别?

是啥导致 AWS Lambda 上的 Mongodb 超时错误?

使用无服务器和 chrome-aws-lambda 节点包在 AWS Lambda 上找不到 Chrome 二进制文件

如何在本地测试 aws lambda 函数

AWS lambda 和 AWS Lambda@EDGE 有啥区别?