写点什么

Serverless 与工具链建设

作者:刘宇
  • 2022 年 2 月 15 日
  • 本文字数:2894 字

    阅读完需:约 9 分钟

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:

# 安装npm install -g serverless# 配置密钥serverless config credentials --provider aws --key key--secret secret# 创建一个项目serverless create --template aws-python3 --path my-service# 进入项目cd my-service# 部署项目serverless deploy -v
复制代码

除了对项目的部署和发布操作之外,Serverless Framework 还支持项目的删除,回滚等更多的操作,以常见的部分云厂商和开源项目为例,Serverless Framework 的常见能力表如下:

除 Serverless Framework 之外,Serverless Devs 同样是无厂商锁定的多云开发者工具。目前按照 Serverless Devs 的官方仓库显示,其已经支持 AWS Lambda,阿里云函数计算,腾讯云云函数,华为云 Serverless 工作流以及百度智能云函数计算等产品。与 Serverless Framework 不同的是,Serverless Devs 主打的是 Serverless 应用全生命周期管理工具,如下图所示,以阿里云函数计算为例,Serverless Devs 可以支持包括脚手架、调试、发布、运维等多个流程多种功能:

图片alt


另外值得一提的是,Serverless Devs 不仅支持拥有完善的工具链产品,其在 2021 年还对外正式发布 Serverless Devs Model(Serverless 开发者工具模型:SDM):

图片alt


通过 Serverless Devs,开发者同样可以非常简单快速的使用各个厂商/平台的 Serverless 产品,以阿里云函数计算为例:

# 安装npm install -g @serverless-devs/s# 配置密钥s config add --AccessKeyID AccessKeyID --AccessKeySecret AccessKeySecret# 创建一个项目s init node.js12-http -d fc-hello-world-demo# 进入项目cd fc-hello-world-demo# 部署项目s deploy
复制代码

部署函数到阿里云

快速入门

当注册并登陆阿里云账号之后,需要找到函数计算产品,并点击进入到产品首页:

图片alt


点击新建函数,并选择事件函数:

图片alt


此时,可以进行相关的配置:

图片alt


相对于其他的云平台,阿里云函数计算不仅要为即将创建的函数设置一个函数名称,选择运行时等,还需要设置该函数所在的服务,在阿里云函数计算的体系中,是有服务的概念的。

引入服务的概念会带来一定的好处:

  • 相关联的函数可以放在一个服务下,可以有效地进行分类,这种分类实际上比标签分类更直观明了;

  • 相关联的函数在同一个服务下可以共享一定的配置,例如 VPC 的配置,NAS 的配置,甚至是某些日志仓库的配置等;

  • 通过服务,可以很好地做函数的环境的划分,例如有一个相册项目,该项目可能存在线上环境、测试环境、开发环境,那么可以在服务层面来做区分,即可以设定 album-release、album-test、album-dev 等三个服务,进而来做环境的隔离;

  • 通过服务,可以很好的收纳函数,如果项目比较大,可能会产生很多函数,如果统一放在外面会显得非常混乱,可以通过服务进行有效的收敛;

完成函数的创建之后,可以进行代码的编辑,和 AWS Lambda、Google Cloud Functions 类似,阿里云函数计算同样支持从对象存储上传代码,直接上传代码包,以及在线编辑,除此之外阿里云还支持直接上传文件夹:

图片alt


保存之后,可以选择执行按钮,进行函数的触发、测试:

图片alt


完成之后,可以看到系统已经为输出相关的日志:hello world。至此,非常简单的一个函数就创建成功了。

通过开发者工具入门

可以通过 Serverless Devs 开发者工具,并以阿里云函数计算为例进行实践,探索受如何创建、部署一个 Serverless 架构的应用。

  1. 安装 Serverless Devs 开发者工具npm install -g @serverless-devs/s

  2. 设置阿里云凭证信息:s config add --AccessKeyID AccessKeyID --AccessKeySecret AccessKeySecret --AccountID AccountID

  3. 建立模板项目:s init node.js12-http -d fc-hello-world-demo

  4. 进入项目目录:cd fc-hello-world-demo,并进行部署:s deploy

项目部署成功之后,可以进行更多操作,例如:

  • 触发函数:s invoke

  • 查看线上函数详情:s info

部署函数到 AWS

快速入门

当注册完成 AWS 账号,可以在 AWS 的控制台找到 Lambda 这款产品,进入该产品页面:

图片alt


可以点击创建函数,进行函数的创建:

图片alt


只需要填写好函数名称,并且选择一个熟悉的语言,点击创建函数,就可以完成函数的创建:

图片alt


此时点击测试,并且设置一个事件:

图片alt


创建完成事件之后,可以再次点击测试,即可看到这个程序的运行结果:

图片alt


至此,非常简单的一个函数就创建成功了。

通过开发和工具入门

可以通过 Serverless Framework 开发者工具,并以 AWS Lambda 为例进行实践,探索受如何创建、部署一个 Serverless 架构的应用。

  1. 安装 Serverless Framework 开发者工具npm install -g serverless

  2. 设置 AWS 凭证信息:serverless config credentials --provider aws --key key--secret secret

  3. 建立模板项目:serverless create --template aws-python3 --path my-service

  4. 进入项目目录:cd my-service,并进行部署:serverless deploy -v

    图片alt


项目部署成功之后,可以进行更多操作,例如:

  • 触发函数:serverless invoke -f hello -l

  • 查看部署历史:serverless deploy list

用户头像

刘宇

关注

阿里云Serverless云布道师 2020.01.04 加入

阿里云Serverless产品经理,国防科大在读博士,《Serverless架构》、《Serverless实践》、《人人都能学会的Serverless架构》等书籍作者,Serverless Devs发起人,Anycodes在线编程负责人。

评论

发布
暂无评论
Serverless 与工具链建设