使用AWS Lambda搭建API服务器

最近发现直接在自己的服务器上面跑API的话,部署Docker太麻烦(其实是懒),而且因为要过一层CloudFlare,导致速度不太理想,还有其他一些原因。总之这次我们选择了AWS提供的Serverless服务——Lambda。

Lambda这项服务是让客户上传代码到上面,每次调用的时候会计算运行的时长,最后根据时长和你配置的内存大小计费。比如你在AWS中国上面创建了一个内存占用为128MB的程序,处理每次请求需要100ms,那么你需要支付0.0000014185元人名币。美国区给的计费例子是128MB内存,3千万次请求,每次200ms,月费仅需要5.83美元。总的来说非常划算,而且不需要你去搭建什么环境,其自身支持Node.js,Python,Go等语言。

我们首先在Lambda主页上面创建函数,这里我们希望上传自己的代码,所以选择了Author from scratch,即从头编写。第二项蓝图的话会给你一些示例代码,你可以基于上面进行开发,可以很方便地完成数据库的连接处理等等。

创建之后你就能进入详情页面进行代码编辑和上传,代码运行内存和超时时间调整,同时你可以编辑触发器和目的地,这个我们稍后再说。在此同时,我们选择了自动创建一个IAM角色,这一点可以从role中看到。

我们键入一个示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
exports.handler = async (event) => {
var id = event['queryStringParameters']['id'];
if(id == null){
const response = {
statusCode: 400,
body: JSON.stringify({'message':'Error.'}),
};
return response;
} else {
if(id != '1'){
const response = {
statusCode: 404,
body: JSON.stringify({'message':'Not Found.'}),
};
return response;
}
const response = {
statusCode: 200,
body: JSON.stringify({'message':"Hello Mr.Li~"}),
};
return response;
}
};

从上面我们知道了几点,首先传入的参数会保存在event之中,event里面包含了很多请求的详细信息,不仅仅是参数。随后我们进行了一些对id这一参数的处理,并定义了返回的数据。这就是一个比较完整的Lambda函数了,你完全可以当作其他Node.js脚本编写,只不过注意入口是上面的handler就行。

这时候我们只有一个函数,没有办法去让它执行。这时候可以定义一个触发器,如果是API Gateway的话,那么每当访问指定URL,就会去调用这个函数,返回结果。如果是数据库的话,那么数据库变动就可以传进这个函数进行处理。而目的地是让你的Lambda函数去触发其他服务,也可以用当前的Lambda函数出发另外一个Lambda函数。

这里我们选择添加一个API Gateway,因为这个用不到REST API,所以我们选择了HTTP API。

完成创建之后,你会得到一个网址,当你访问它的时候,比如https://rauighsierg.execute-api.us-east-1.amazonaws.com/default/test?id=1,就会返回我们期待的结果。你如果想自定义域名的话,需要上传SSL证书。

总而言之,Lambda服务方便了开发者,简化了服务器部署并可能地减少了成本,是一项不错的服务。

  • 版权声明: 本博客所有文章除特别声明外,均采用 CC BY-SA 许可协议。转载需要标明作者,并以超链接的方式指向原文。
  • Copyrights © 2020 Kevin Li
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~