ServerLess的好伙伴——一些有用的NPM包


【编者的话】本文介绍了在基于AWS Lambda进行Serverless应用开发的过程中可以使用的一些工具,包括可以支持babel到ES5的转换的Serverless框架插件,管理lambda函数的命令行工具node-lambda,DynamoDB的数据映射工具Vogels,可以本地运行DynamoDB的Dynalite以及处理JavaScript代码中的promises的工具BlueBird。

AWS Lambda是一个年轻的产品;它是去年4月份正式发布的并一直运行Node v0.10,直到今年4月份才支持v4.3。对于我们这些ES2015的粉丝来讲,4.3版本的支持依然没有给我们所有的我们所期待的有趣的功能。然而,根据AWS发布新功能的速度来看,我们可以得到所有有趣的功能只是时间问题。

Serverless框架(v0.5)有一些有趣的插件可以支持babel到ES5的转换。或许你不想这么做,因为当出错的时候的你更希望看到有用的堆栈追踪信息而不是被告知类似于“在第2行第593列出错了”的模糊信息,但是有这么一个选项始终是好的。感谢人们开发了让我们生活变得更容易的工具。更好的是我只需要使用下面的一个命令就可以获取这些工具:
npm install -g serverless

我已经不再需要用来管理和部署的我的诸多函数的方法。

或许你需要一些更轻量级的工具,例如node-lambda,这是一个非常直接的管理lambda函数的命令行工具,它非常轻量、灵活和中立。它非常易于安装而且有很多配置选项。当你要认真处理Lambda的工作原理甚至是当你的Lambda需求很简单时,node-mambda都是一个很好的起点。我从node-lambda转到Serverless框架是因为我需要CloudFormation和API网关所支持的所有功能(以及插件),但是我还是会毫不犹豫的再次使用node-lambda,一个非常好的工具。

DynamoDB是一个精巧抽象的NoSQL数据库,但是它的API不是那么易用。有一个非常棒的包叫做Vogels(我想是根据作者的名字命名的),它是一个极好的DynamoDB的数据映射工具。我已经使用了几个月了,觉得已经离不开它了。你可以使用Joi schema validator来定义你的数据库模型。它有一些内置的东西例如产生和管理时间戳。增删改查的操作和查询都非常容易。仅仅有因为其完善的文档都值得赞扬,所有的东西都有实例,非常好。有一个问题是在过去几个月都没有更新,不过最近有一个代码的分支被产生用来继续做维护和开发。不要因为这个小问题阻止你继续使用这个工具 – 这是一个被充分测试的和有效率的工具。

对Lambda进行本地测试可能会是很复杂的,主要是因为操作系统的区别(除非你用Docker – 如果感兴趣请参阅docker-lambda),你无法模拟CPU或者内存的限制。但这并不意味着一切必然是那么困难,你可以用Dynalite本地运行DynamoDB。你可以用跟DynamoDB相同的方式管理所有的条目,这就是重点所在。你仅仅需要配置你的AWS API去使用这个数据库,AWS自己也提供了DynamoDB Local,但是这是不那么好。Dynalite没有图形界面,但是功能上是完全没问题的。

如果你正在使用Serverless框架,你就可以用使用Offline或者Serve插件来测试你的API网关配置。你可以快速测试你的请求而无需持续部署或者担心触碰到配额(但是谁会担心这个呢?)。

虽然不是直接跟AWS或者Serverless应用开发相关,但我觉得还是要说一下Bluebird。如果你在你的JavaScript代码中没有使用promises,看一下他们是如何处理异步代码的管理和测试是一个很好的主意。我最喜欢Bluebird的一点是它可以‘promisify’一个库,只要传入一个库它将会把所有的回调函数转换成promises。如下所示:
import Promise from 'bluebird';
const s3 = Promise.promisifyAll(new AWS.S3());
// Some config...
s3.putObjectAsync(options)
.then((object) => {
// Do something else.
});  

你无需担心回调函数陷阱或者任何对于promises的滥用。而且当你理解了细节之后代码也非常易读。

这些就是我喜欢用的并且希望跟大家分享的几个工具。Lodash也值得一提,它在使你的代码保持专注和小尺寸方面做得非常棒。

原文链接:Serverless buddies — NPM packages that will make your life easier(翻译:李光成)

==============================================================
译者介绍
李光成,IBM中国研究院资深研究员,研究方向是云计算基础设施及技术。目前在做的是Docker方面的研究项目。

0 个评论

要回复文章请先登录注册