来源:Node.js

ServerLess

ServerLess不是一种技术,而是一种架构模型,称为无服务器架构

在传统模式下,部署一个服务需要选择服务器例如Linux、windows等,还要安装环境、熟悉操作系统命令、知晓安全知识等,有一定成本

而ServerLess的核心思想就是,让开发者更多的是关注业务本身,而不是服务器运行成本

Faas

全称函数即服务,是一种Serverless计算模型,它允许开发人员编写和部署函数代码,而无需关心底层的服务器管理

在FaaS中,每个函数即一个服务,开发人员只需关注函数的实现和逻辑,无需关心背后计算资源的问题

将其上传到云平台上后,平台会负责函数的运行和扩展

当有请求触发函数时,云平台会自动为函数提供所需的计算资源,并根据请求量进行弹性扩展

这种按需计算的模式使开发人员可以更专注于业务逻辑的实现,同时实现了资源的高效利用

Baas

全称后端即服务,是一种提供面向移动应用和Web应用的后端功能的云服务模型

BaaS为开发人员提供了一组预构建的后端服务,如用户身份验证、数据库存储、文件存储、推送通知等,以简化应用程序的开发和管理

开发人员可以使用BaaS平台提供的API和SDK,直接集成这些功能到应用中,而无需自己构建和维护后端基础设施

编写

依赖

1
pnpm install @serverless-devs/s -g

身份验证

首先需要阿里云或别的什么云函数服务的密钥,在RAM 访问控制中创建一个新角色

给这个用户添加函数计算相关的权限:

在这个用户的信息中创建并保存好AccessKey

初始化

配置ServerLess用户,会弹出一系列选项,根据实际情况填写即可

1
s config add

创建项目

1
s

新项目的模板,函数体与配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
'use strict';
// event:前端传来的数据 context:上下文 callback:给前端回传内容
exports.handler = (event, context, callback) => {
const eventObj = JSON.parse(event);
console.log(`receive event: ${JSON.stringify(eventObj)}`);

let body = 'Hello World!';
// get http request body
if ("body" in eventObj) {
body = eventObj.body;
if (eventObj.isBase64Encoded) {
body = Buffer.from(body, 'base64').toString('utf-8');
}
}
console.log(`receive http body: ${body}`);

callback(null, {
'statusCode': 200,
'body': body
});
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# ------------------------------------
# 官方手册: https://manual.serverless-devs.com/user-guide/aliyun/#fc3
# 常见小贴士: https://manual.serverless-devs.com/user-guide/tips/
# 有问题快来钉钉群问一下吧:33947367
# ------------------------------------
edition: 3.0.0
name: hello-world-app
access: "serverLess"

vars: # 全局变量
region: "cn-hongkong"

resources:
hello_world:
component: fc3
props:
region: ${vars.region}
functionName: "getAlbums"
description: 'hello world by serverless devs'
runtime: "nodejs16"
code: ./code
handler: index.handler
memorySize: 128
timeout: 30
triggers:
- triggerName: httpTrigger # 触发器名称
triggerType: http # 触发器类型
description: 'xxxx'
qualifier: LATEST # 触发服务的版本
triggerConfig:
authType: anonymous # 鉴权类型,可选值:anonymous、function
disableURLInternet: false # 是否禁用公网访问 URL
methods: # HTTP 触发器支持的访问方法,可选值:GET、POST、PUT、DELETE、HEAD
- GET
- POST

阿里云ServerLess的Node.js环境提供了许多API,例如可以在其中调用阿里云的其他服务模块

上传云函数

1
s deploy

上传成功后,就可以在控制台看到云函数了,记得把地点切换为之前设置的地点

接口url在这里拿,也可以设置一个自定义域名