Blog

无服务器架构 (Serverless) - 把基于express的程序搬上lambda

Overview: 利用Lambda同API Gateway来搭建一个无服务器架构的HTTP/HTTPS API服务应该是最常见的了。

当一个新的技术解决方案兴起,必定带来很多不稳定性。 最初开发需要把api gateway的路由(GET, DELETE, POST等等)与lambda的计算单元一一对应,serverless工具的设置也很复杂,包含很多api gateway中JSON数据的映射。 在2016年新推出了api gateway的proxy mode,可以把一条路径下的所有方法传递给lambda。 而serverless v1也大幅简化了设置。

开发,测试

虽然Lambda是Function-as-a-Service,但是把程序按照新的方法方式重写是一个浩瀚的工程; 而对于后台API程序来讲,是否真的需要把每个功能独立开写维护,而很多功能又需要同样的库文件。

而且lambda带来了测试的复杂化。很多时候需要发布到AWS上才能测试,而本地用的serverless-offline等等插件又有可能有不为人知的bug。 虽然不需要维护服务器,但是你有可能需要因为开发、测试上的流程而陷入地狱。

所以基于express.js等等库来开发API程序,开发、测试等等的方法都是成熟的。lambda仅仅是作为一个发布的平台。项目的风险可以降到最低。

工具

Awslabs提供了一个库aws-serverless-express,让基于express框架的程序用几步就可以简单的发布到lambda:

  • 步骤1:只需要写个lambda.js
'use strict'
const awsServerlessExpress = require('aws-serverless-express')
const app = require('./app')
const server = awsServerlessExpress.createServer(app)

exports.handler = (event, context) => awsServerlessExpress.proxy(server, event, context)
  • 步骤2:利用serverless发布程序到lambda
Posted February 27, 2017

author Jimmy YangWritten by Jimmy Yang who lives and works in Hong Kong.
Focusing on DevOps, Cloud Services, Microservices etc. Find me at