EMAS Serverless
什么是 EMAS
阿里巴巴应用研发平台(Enterprise Mobile Application Studio,简称EMAS),是面向全端场景(移动App、H5应用、小程序、Web应用、PC应用等)的一站式应用研发平台。EMAS基于广泛的云原生技术(Backend as a Service、Serverless、DevOps、低代码等),致力于为企业、开发者提供一站式的应用研发运营管理服务,涵盖开发、测试、运维、运营等应用全生命周期。
什么是 Serverless
Serverless 是近些年比较火热的一种开发模式。从字面看,它是无服务的意思。但它所表达的意思其实是“不需要过度专注服务器”。也就是说,开发者只需专注于业务实现,像搭建服务器环境,代码部署,服务器扩容等等传统运维的工作,直接交给 Serverless 来做就好了。
对于小程序开发的需求,Serverless 的开发模式非常适合前端开发人员去使用。
什么是 EMAS Serverless
阿里云 EMAS Serverless 是面向小程序开发场景的一套完整的后端服务,它提供了云函数、云数据库、云存储等基本功能,开发者仅需要在项目中集成 SDK,调用简单的 API 就能完成小程序后端服务的开发。
EMAS Serverless 的云函数使用 NodeJS 作为运行环境。对于前端开发人员来说,基本没有学习成本,可以快速上手。开发者可以将代码打包提交到云端,无需搭建运维服务器。云函数自动完成机器调度与函数部署,弹性扩容,按量收费,轻松应对突发流量。
云数据库基于 MongoDB 文档型数据库,数据以 JSON 格式存储。数据库中的每条记录都是一个 JSON 格式的对象。一个数据库可以有多个集合(相当于关系型数据中的表)。
云存储支持将文本、图片、视频等文件存储到云端。开发者可以在小程序端和控制台使用云存储功能。资源上传成功后,系统会自动生成一个资源链接并返回给小程序端,以供使用。
EMAS Serverless 对基础设施进行抽象封装。
EMAS Serverless = FaaS + BaaS。FaaS 是函数即服务,BaaS 是后端即服务。在这种抽象下,计算资源作为服务而不是服务器。开发者不需要关心服务器或者是底层的运维设施,可以更加关注业务和代码本身。
EMAS Serverless 适合人群
无论是前端工程师,后端工程师,全栈工程师,只要需要开发基于 serverless 的小程序,都可以选择使用EMAS Serverless。
EMAS Serverless 的特点
主要有三个特点:
- 面向多端,EMAS Serverless 面向多端小程序场景提供服务。
- 无需运维,全托管服务将您从基础设施的管理工作中解放,专注业务领域创新。
- 弹性伸缩,实时弹性伸缩和动态负载均衡,轻松应对突发流量。
EMAS Serverless的产品功能架构图
Serverless SDK 介绍
通过安装 EMAS Serverless SDK,可以方便地在小程序中使用 EMAS Serverless 服务。
以支付宝小程序为例,需要先开通 EMAS 服务,然后本地下载并安装好开发者工具,使用开发者工具创建一个小程序项目。切换到项目根目录,安装 SDK:
npm i @alicloud/mpserverless-sdk
然后,在项目配置文件 mini.project.json
中,添加以下配置信息。
{
"enableNodeModuleBabelTransform": true,
"node_modules_es6_whitelist": [
"@alicloud/mpserverless-sdk"
]
}
最后,构造实例对象 mpserverless
并完成 SDK 的初始化:
// app.js
import MPServerless from '@alicloud/mpserverless-sdk'
const mpserverless = new MPServerless(my, {
appId: '小程序 AppID',
spaceId: '服务空间 SpaceId',
clientSecret: '服务空间 Secret',
endpoint: '服务空间 API Endpoint'
});
App({
mpserverless: mpserverless,
onLaunch() {
mpserverless.init();
},
});
之后就能在小程序代码中愉快地使用 EMAS Serverless 的服务了。
云函数的使用
使用云函数的步骤是,先在本地开发完成一个云函数,然后将其部署到 serverless 平台,然后在小程序代码中通过 SDK 提供的特定方法去调用云函数。
开发云函数
以一个简单的 hello 程序为例:
// hello/index.js
'use strict';
module.exports = async (ctx) => {
let message = 'hello';
console.log(message);
return message;
}
将其打包成一个 hello.zip
压缩包,然后上传到平台:
上传完成之后点击部署:
测试:
在小程序中调用云函数的方式:
const { result } = await mpserverless.function.invoke();
console.log(result); // 'hello'
云数据库的使用
云数据库的使用也分为两步,先在控制台创建一个集合,用于存放数据;再在云函数中编写操作云数据库的逻辑,然后在小程序代码中调用云函数。
云数据库功能群接口较多,对应了十几个功能。不仅包括基础的增删改查,也包括了 MongoDB 中去重、聚合等高级操作。
以一个简单的查询为例:
module.exports = async (ctx) => {
let res = await mpserverless.db.collection('users').find({
age: { $gt: 18 }
})
return { users: res }
}
云存储的使用
云存储主要提供了两个方法:
- uploadFile:上传文件
- deleteFile:删除文件
以在小程序中上传一张相册中的图片为例:
my.chooseImage({
chooseImage: 1,
success: res => {
const path = res.apFilePaths[0];
const options = {
filePath: path,
};
mpserverless.file.uploadFile(options)
.then(res => {
console.log(res);
})
.catch(err => {
console.log(err);
});
}
});
SDK 会将文件上传至云存储,并将文件的 URL 返回给小程序端使用。
小结
本文经过阅读《五天玩转 EMAS Serverless》和官方文档整理而成。不得不说,前者是一本优秀的技术小册子,写得通俗易懂。EMAS Serverless 也是一个十分优秀的平台,不仅好用,每月还有免费的额度,十分适合还不熟悉 serverless 的朋友们上手体验。