通过 lambda apigateway dynamodb 构建 serverless 服务 (一)
为什么要使用 serverless
省钱
节约机器、研发、运维成本
传统的分布式 web 服务,需要可扩展的服务器(如 ECS),网关服务器(如 NGINX),负载均衡(如 ELB),数据库服务器(如 Mysql),数据缓存服务器(如 Redis),CDN。如果在算上备份和容灾,每个月的成本上万元。
图一 传统服务架构
而基于 lambda apigateway dynamodb 构建的 serverless 服务,同样的服务可以将成本控制在 1000 元以内。
节约中长尾应用成本
中长尾应用是指每天大部分时间都没有流量或者流量很少的应用。微服务时代这些应用至少要独占一台机器,徒增成本,而 serverless 可以按量计费,极速冷启动,不使用不付费,把成本节约到极致。
省时间
传统应用 ci/cd 流程复杂,一般需要研发配合专业的运维团队搭建。而serverless 可以本地一行代码部署(sls deploy),也可以方便的和主流的 ci/cd 集成。
目前腾讯的小程序开发客户端集成了云函数,免费试用,小白也可以根据 demo 几行代码就生成高可用的 api,可以说是省时又省钱。
什么是 serverless
serverless 即解决问题的边界,也就是解决服务端的边界(运维)。
简单来讲 serverless = Trigger + Faas + Baas
Faas(Function As a Service)
函数即服务,可以随时随地创建使用销毁一个函数。
图二 FAAS
Baas (Backend As a Service)
后端即服务,具备高可用性和弹性,而且免运维的后端服务,以 Mysql 为例,将 Faas 操作的数据库命令,封装成 HTTP 的封装 openAPI,提供给 Faas 调用,自己控制这个 API 的请求频率以及限流降级。
图三 BAAS
使用 AWS 构建 serverless
注:该操作依赖 AWS 账号,可通过信用卡注册,注册可以免费使用一年
Lambda
点击 https://console.aws.amazon.com/lambda/home 进入 Lambda 控制台,点击橙色的创建函数按钮
图四 创建 Lambda 函数
在函数名称下面的文本框里输入 hello-lambda,点击下面的橙色的创建函数按钮,进入到 hello-lambda 函数编辑页面
图四 lambda 编辑页面
可以看到下面编辑器内已经提供了基本的函数代码
exports.handler = async (event) => {
// TODO implement
const response = {
statusCode: 200,
body: JSON.stringify('Hello from Lambda!'),
};
return response;
};
页面的右上角有 ARN 地址,形如 arn:aws:lambda:us-east-1:1234567890:function:hello-lambda 点击旁边的复制按钮,保存一下。
API GateWay
函数已经准备好,需要一个触发器来调用,也就是 apiGateWay。
点击 https://console.aws.amazon.com/apigateway/home 打开 APIGateway 控制台,点击橙色的创建 API 按钮。
图五 apiGateWay 控制台
点击 HTTP API 里面橙色的构建按钮
图六 选择 API 类型
在 API 名称下面的文本框里输入 hello-api,点击白色的审核并创建按钮。
图七 创建 API
在审核并创建页面点击橙色的创建按钮。进入到 hello-api 的详细信息页面。
图八 审核并创建
图九 hello-api 详细信息
下面我们来创建路由。点击左侧菜单的路由链接,进入到路由页面。
图十 路由页面
点击 hello-api 的路由右边的 Create 按钮,进入创建路由页面。
图十一 创建路由
点击右下方橙色的创建,完成创建。
图十二 路由详细信息
选中 hello-api 的路由下面的 / 的 ANY 方法。在右边的路由详细信息,点击附加集成。
图十三 集成详细信息
点击创建并附加集成。
图十四 创建集成
集成目标选择 Lambda 函数。集成详细信息的 Lambda 函数里选择 hello-lambda。(如果找不到 hello-lambda 就添加之前复制的 lambda 的 ARN 地址)点击右下方橙色的创建按钮。回到路由页面。
图十五 集成目标
点击左侧菜单的部署下面的阶段链接,进入阶段页面,选择 $default, 可以看到左边的调用 URL。
图十六 阶段
在浏览器里打开 URL。可以看到成功调用了 lambda 函数。
图十七 浏览器
至此,lambda apigateway 构建的 serverless 服务搭建完成。接下来就是集成数据库 dynamodb。
参考资料