Serverless 与工具链建设
前言
Serverless 正在改变未来软件开发的模式和流程,并被预测将引领云计算的下一个 10 年,但尽管如此,开发者在选择使用 Serverless 时仍有诸多担忧,这其中最受关注的无疑就是工具链体系的匮乏。所谓的工具链匮乏,一方面表现在市面上工具链不完善,这导致开发和部署难度大,进而增加成本;另一方面表现在,缺乏相关的工具链在体验层将 Serverless 体验进一步规范,优质工具链的匮乏导致本来就担心被厂商绑定的 Serverless 开发者变得更难与厂商解绑。2020 年 10 月,中国信息通信研究院发布国内首个《云原生用户调查报告》明确指出在使用 Serverless 架构之前,49% 的用户考虑部署成本,26% 的用户考虑厂商绑定情况,24% 的用户考虑相关工具集完善程度,这些数据背后透露的实际上是:开发者对于完善工具链的强烈需求。尽管,有一些开发者认为入门 Serverless 架构,通过白屏化的操作相对来说会更容易入门,在一定程度上通过各个云厂商的控制台进行函数的创建、更新也会更为方便。但是不可否定的是,Serverless 开发者工具在一定程度上却有着更为重要的价值和作用:
通过脚手架,快速创建 Serverless 架构的应用;
在开发过程中,通过开发者工具进行应用的调试等;
在开发完成之后,通过开发者工具将应用(可能包括多个函数以及相对应的 BaaS 类产品)一键部署到线上;
项目运维阶段,通过开发者工具进行项目的可观测以及问题定位等;
若需要实现科学部署,通过某些 CI/CD 平台/工具发布 Serverless 架构的应用,通常是离不开开发者工具的;
目前 Serverless 领域,工具链建设分为两类:
云厂商/Serverless 框架所提供的针对自身的开发者工具,例如 AWS 的 SAM CLI,阿里云的 Funcraft,OpenWhisk 的 Ask 等;
由第三方提供的多云开发者框架(包括不限于开源社区驱动),例如 Serverless Framework 项目,Serverless Devs 项目等;
通过 Serverless 开发者工具,开发者可以非常简单的学习和使用 Serverless 架构,也可以在生产的过程中快速的使用这些工具进行开发效能的提升。以 Serverless Framework 为例,作为拥有近 4 万 Star 的海外老牌 Serverless 工具链开源项目,目前 Serverless.com 的官方网站支持 11 个常见的 Serverless 平台产品:
可以通过 Serverless Framework 开发者工具,以 AWS Lambda 为例进行实践,可以通过几行命令快速体验 AWS Lambda:
除了对项目的部署和发布操作之外,Serverless Framework 还支持项目的删除,回滚等更多的操作,以常见的部分云厂商和开源项目为例,Serverless Framework 的常见能力表如下:
除 Serverless Framework 之外,Serverless Devs 同样是无厂商锁定的多云开发者工具。目前按照 Serverless Devs 的官方仓库显示,其已经支持 AWS Lambda,阿里云函数计算,腾讯云云函数,华为云 Serverless 工作流以及百度智能云函数计算等产品。与 Serverless Framework 不同的是,Serverless Devs 主打的是 Serverless 应用全生命周期管理工具,如下图所示,以阿里云函数计算为例,Serverless Devs 可以支持包括脚手架、调试、发布、运维等多个流程多种功能:
另外值得一提的是,Serverless Devs 不仅支持拥有完善的工具链产品,其在 2021 年还对外正式发布 Serverless Devs Model(Serverless 开发者工具模型:SDM):
通过 Serverless Devs,开发者同样可以非常简单快速的使用各个厂商/平台的 Serverless 产品,以阿里云函数计算为例:
部署函数到阿里云
快速入门
当注册并登陆阿里云账号之后,需要找到函数计算产品,并点击进入到产品首页:
点击新建函数,并选择事件函数:
此时,可以进行相关的配置:
相对于其他的云平台,阿里云函数计算不仅要为即将创建的函数设置一个函数名称,选择运行时等,还需要设置该函数所在的服务,在阿里云函数计算的体系中,是有服务的概念的。
引入服务的概念会带来一定的好处:
相关联的函数可以放在一个服务下,可以有效地进行分类,这种分类实际上比标签分类更直观明了;
相关联的函数在同一个服务下可以共享一定的配置,例如 VPC 的配置,NAS 的配置,甚至是某些日志仓库的配置等;
通过服务,可以很好地做函数的环境的划分,例如有一个相册项目,该项目可能存在线上环境、测试环境、开发环境,那么可以在服务层面来做区分,即可以设定 album-release、album-test、album-dev 等三个服务,进而来做环境的隔离;
通过服务,可以很好的收纳函数,如果项目比较大,可能会产生很多函数,如果统一放在外面会显得非常混乱,可以通过服务进行有效的收敛;
完成函数的创建之后,可以进行代码的编辑,和 AWS Lambda、Google Cloud Functions 类似,阿里云函数计算同样支持从对象存储上传代码,直接上传代码包,以及在线编辑,除此之外阿里云还支持直接上传文件夹:
保存之后,可以选择执行按钮,进行函数的触发、测试:
完成之后,可以看到系统已经为输出相关的日志:hello world。至此,非常简单的一个函数就创建成功了。
通过开发者工具入门
可以通过 Serverless Devs 开发者工具,并以阿里云函数计算为例进行实践,探索受如何创建、部署一个 Serverless 架构的应用。
安装 Serverless Devs 开发者工具
npm install -g @serverless-devs/s
设置阿里云凭证信息:
s config add --AccessKeyID AccessKeyID --AccessKeySecret AccessKeySecret --AccountID AccountID
建立模板项目:
s init node.js12-http -d fc-hello-world-demo
进入项目目录:
cd fc-hello-world-demo
,并进行部署:s deploy
项目部署成功之后,可以进行更多操作,例如:
触发函数:
s invoke
查看线上函数详情:
s info
部署函数到 AWS
快速入门
当注册完成 AWS 账号,可以在 AWS 的控制台找到 Lambda 这款产品,进入该产品页面:
可以点击创建函数,进行函数的创建:
只需要填写好函数名称,并且选择一个熟悉的语言,点击创建函数,就可以完成函数的创建:
此时点击测试,并且设置一个事件:
创建完成事件之后,可以再次点击测试,即可看到这个程序的运行结果:
至此,非常简单的一个函数就创建成功了。
通过开发和工具入门
可以通过 Serverless Framework 开发者工具,并以 AWS Lambda 为例进行实践,探索受如何创建、部署一个 Serverless 架构的应用。
安装 Serverless Framework 开发者工具
npm install -g serverless
设置 AWS 凭证信息:
serverless config credentials --provider aws --key key--secret secret
建立模板项目:
serverless create --template aws-python3 --path my-service
进入项目目录:
cd my-service
,并进行部署:serverless deploy -v
图片alt
项目部署成功之后,可以进行更多操作,例如:
触发函数:
serverless invoke -f hello -l
查看部署历史:
serverless deploy list
评论