云平台适配
Malagu 框架是平台无关的,可以部署在各种 Serverless 平台、传统服务器之上。Malagu 框架抽象了一套统一的后端接口,不同平台只需要适配统一的后端接口即可。
正常情况,一个平台对应着一个适配器组件(可以多个),使用不同平台的适配组件,适配并部署到不同的平台。适配器组件屏蔽掉平台底层细节,让平台的学习成本几乎为零。目前框架已经适配的平台:
express-adapter
传统服务器scf-adapter
和scf-plugin
腾讯云函数fc-adapter
和fc-plugin
阿里云函数计算lambda-adapter
和lambda-plugin
AWS Lambdavercel-adapter
Vercel 平台
使用方法
首先,确定我们需要运行和部署的平台,选择合适的适配器组件添加到项目依赖中。比如 @malagu/express
、 @malagu/fc-adapter
、@malagu/fc-plugin
、 @malagu/scf-adapter
、@malagu/scf-plugin
、@malagu/lambda-adapter
、@malagu/lambda-plugin
、 @malagu/vercel-adapter
。Malagu 组件是一个普通的 npm 包,可以通过以下命令安装:
# 安装腾讯云函数计算适配器组件
yarn add @malagu/scf-adapter
yarn add -D @malagu/scf-plugin
# 或者
npm i @malagu/scf-adapter
npm i -D @malagu/scf-plugin
安装好后,默认不需要任何配置,我们也不必知道该组件与函数计算的底层细节。当我们使用 malagu deploy
命令进行部署的时候,该组件会按照约定的部署规则将我们的代码部署到对应的平台。
对于腾讯云函数计算,约定的部署规则是创建的服务名为项目名称,函数名为项目的名称,别名为 test 等等。约定的部署规则可以通过组件之间的属性覆盖自定义。
智能适配
如上一节所述,框架通过不同包适配不同的平台,用起来比较繁琐,我们需要事先知道需要什么包,并安装好所需的包,切换到其他平台的时候,还需要重新安装相关的包。
在框架的 2.0 版本中,我们手动安装适配平台的包,我们只需通过模式属性指定我们需要部署到什么平台,框架会自动全局安装相关的包,并且这些包全局共享,其他项目可以复用,避免重复下载。我们也无需担心全局共享的这些包版本升级的问题,框架会在正确的时机自动升级,并且不同版本的包可以共存,框架保证使用的包版本是正确的。
malagu deploy -m scf # 部署到腾讯云函数
malagu deploy -m fc # 部署到阿里云函数计算
malagu deploy -m lambda # 部署到亚马逊云 Lambda
malagu deploy -m vercel # 部署到 Vercel 平台
malagu build -m server # 构建部署到传统服务器产物
malagu config -m scf # 配置腾讯云账号信息
malagu config -m lambda # 配置亚马逊云账号信息
malagu config -m fc # 配置阿里云账号信息
首次部署
当我们首次部署应用到平台,框架自动判断并提示我们输入平台账号相关的信息,对于阿里云函数计算、腾讯云函数等云计算厂商平台,我们需要输入 AKSK 信息,告诉框架部署到平台哪个账号下。
下次部署的时候,我们不需要再次输入账号相关信息,这些账号相关的信息会持久化在合适的位置。
适配器组件职责
一个适配器组件往往包含两个主要职责:应用入口文件适配。不同的平台,应用入口的定义往往是不同的,比如阿里云函数计算与腾讯云函数的入口是不一样,甚至阿里云函数计算自身的 API 网关与 HTTP 函数对应的入口定义也是不一样。
不同平台的部署实现也不一样,使用框架提供的 Deploy
插件能力,结合平台提供的 SDK 或者工具实现部署功能。
任意平台适配器组件,框架都是基于约定大于配置原则,在尽量保证不同平台风格统一的情况下,零配置,开箱即用,且无需关心平台底层细节。
平台部署插件
腾讯云函数的部署插件是 @malagu/scf-plugin
;阿里云函数计算的部署插件是 @malagu/fc-plugin
;AWS Lambda 的部署插件是 @malagu/lambda-plugin
。部署插件主要应用部署相关逻辑。它不关心平台函数入口细节差异,它只负责将构建的代码部署到相应的平台。