在上篇《为 Serverless Devs 插上 Terraform 的翅膀,完结企业级多环境布置(上)》中,首要介绍了 Serverless Devs 多环境功用的运用,用户读完可能会些疑问,本文会就一些常见问题进行答复。

Serverless Devs 和 Terraform 的关系

可能有些用户会问,已然你们已经支持了 Terraform,那 Serverless Devs 还有什么作用,是不是直接用 Terraform 就可以了?

Serverless Devs 和 Terraform 的定位还是显着不同的。Serverless Devs 面向运用办理及 DevOps,Terraform 面向云资源,是两个不同的领域,但并不表明不能在某些层面有交集或者不能集成,集成和被集成才能本来便是开源东西是否标准化的一个衡量标准。

Terraform 处理的是云资源的 Provisioning,这个领域是有十分清晰的方法论的。而 Serverless Devs 更应该着重怎样运用好云资源,两者的关系可以用几个场景说明:

  • Serverless Devs 更多重视怎样把代码或者安装依靠分片上传到 NAS 上,更少重视 VPC/交换机/安全组/NAS 挂载点怎样创立出来;

  • Serverless Devs 更多重视怎样把文件上传到 OSS,并且主动触发函数完结报表的生成,更少重视 OSS Bucket 怎样创立;

  • Serverless Devs 更多重视怎样构建代码/镜像、制作 Layer、布置代码、发布版别、灰度放量来构造完好的 CI/CD 体会,更少重视 FC 的网络、日志仓库、ACR 实例怎样创立出来;

  • Serverless Devs 更多重视怎样远程调试代码,怎样登陆到线上实例,怎样经过日志以及监控快速发现事务的反常;

可以看到 Serverless Devs 更加要点重视的是运用运行态以及运维态的操作,这也是 Serverless 架构的东西最重要的使命,但 Serverless Devs 负责的是 Serverless 运用全生命周期办理,必然少不了资源的办理,咱们在实践过程中发现,无论是用云产品 SDK 还是 Pulumi 这类 GPLs 都需求投入很大精力在资源生命周期的对接上,这关于组件开发者对接更多云产品来说是十分低效的。而 Terraform 在这方面是最专业的,无论是标准化程度、受认可程度以及资源的丰厚度都能很好满足终端用户及开发者的需求,因此才触发 Serverless Devs 和 Terraform 结合这一主意。

Serverless Devs 没有和 Terraform 耦合,相反的是让 Terraform 的 HCL 言语天然的在 Serverless Devs 的组件标准里玩转起来,可以认为是 Serverless Devs 支持多言语的一种才能。对开发者的价值是可以比较低代码的完结基础设施的建立,把精力投入到和 Serverless 运用生命周期办理相关的开发上,不然就得开发大量的资源 CRUD 代码,这个是十分低效的。

多环境功用和直接用 Terraform 有什么不同

已然多环境布置也走的是 Terraform,那和我直接用 Terraform 布置资源有什么区别?

  • Terraform 是个人版的东西,需求本地办理ak/sk、本地安装 Provider;而多环境是个多租的服务,不需求用户自己来保护这些;

  • 多环境功用重要的是”办理”的才能,比方模板有版别办理才能,当模板发布了新版别并且 IaC 的改变是不兼容的,此刻用户假如更新环境会导致不知道问题,这种情况下体系会主动识别并且保证存量环境的改变还运用旧版别,不受不兼容改变带来的影响;

  • Terraform 是纯面向资源的编列东西,和运用的关联很弱;而环境和服务、流水线可以天然地构成衔接关系,比方经过环境可以感知到资源被哪些服务所运用、服务可以经过环境的授权来获取拜访资源的权限、可以在流水线中将服务一次性布置到一切环境上,而这些是 Terraform 做不了的;

  • Terraform 只是多环境完结 IaC 的一个技能选型,未来还方案对接 ROS、Pulumi 等 IaC 项目。

多环境和环境变量的关系

在 CI/CD 中运用环境变量,环境变量中装备 VPC、NAS 啥的,s.yaml 中引证环境变量好像就可以了,为什么还要造一个环境概念?

环境和环境变量从姓名就能区分出定位的差异,环境变量便是一组静态装备,虽然可以将一些资源装备写到环境变量内并在 CI/CD 流水线中引证,但这种方法不具备资源纳管的才能。

而环境是个实体资源,具备基础设施的生命周期办理才能,经过环境可以完结基础设施的增删改查,并可以经过拜访操控的方法授予用户的操作权限,更新环境时还可以对接一些安全检查的才能。

经过环境可以让基础设施受到保护,比方当多个服务共享环境时,假如建议环境删去,体系会主动发现环境被其他服务所依靠,此刻删去会被回绝。

只能企业用户运用吗?个人开发者怎样用?

我是个人开发者,不懂 Terraform,文章中各种模板界说看的有点晕,那我还适合用这个功用么?

个人开发者相同适用,但不应该让这部分用户承担写模板的作业,而是由渠道供给各种事务场景化的模板,开发者开箱即用,这也是咱们后续的首要作业。

对个人用户来说,上阿里云最复杂的某过于 RAM、VPC、ECS、SLB、NAS 这些复杂的概念,学习曲线太长。在 Serverless 架构下这个问题尤为显着,Serverless 宣称低门槛、低成本、低运维,但是上手 Serverless 需求了解一大堆概念,装备一大堆东西,很多用户在这过程中就被”劝退”了,而环境模板和环境可以极大地简化云产品的上手成本,同时又能很安全地操作。举个例子,用户选择一个模板布置环境,就可以一键拉起一切云资源,这样才算是真正的 Serverless。

完结原理

  • 遵从 Serverless Devs 组件开发标准,经过完结一个组件来完结和后端服务的对接

  • 后端服务选用 Serverless + K8s 的架构,经过消息触发函数,来完结模板的渲染以及布置使命的履行

  • 选用KubeVela [ 1] 来完结 K8s 资源的办理以及 Terraform 使命的履行

为 Serverless Devs 插上 Terraform 的翅膀,解耦代码和基础设施,实现企业级多环境部署(下)

多环境为什么是组件级的才能而不是 CLI 的才能

Serverless Devs 分为CLI [ 2] 和组件 [ 3]

  • CLI 供给最通用的才能,不依靠任何组件,比方:s init、s config、s verify、–template、–debug

  • 组件供给特定的功用,比方 s deploy、s build、s invoke 这些是 fc 组件的才能

从 env 指令的通用性以及要处理的问题上看,做到 CLI 内也是合适的。但从完结上看,由于需求一个服务端的操控平面来完结用户资源的布置,出于安全性考虑必需要特定的云服务来完结,所以才经过一个组件来完结。

参考链接:

[1]KubeVela :

kubevela.io/

[2] CLI:

docs.serverless-devs.com/serverless-…

[3] 阿里云函数核算组件:

docs.serverless-devs.com/fc/readme

往期回忆

为 Serverless Devs 插上 Terraform 的翅膀,完结企业级多环境布置(上)


极速上手 Serverless

为了让开发者快速定位 Serverless 开发问题,找到对应处理办法,阿里如此原生 Serverless 团队推出2022 《Serverless 开发速查手册》 ,现在已敞开下载,咱们期望给 Serverless 开发者供给一本可以速查、速懂的东西书,实实在在帮助开发者快速处理 Serverless 开发遇到的实际问题,让大家可以踏踏实实享用 Serverless 带来的技能红利!点击阅读原文,即刻下载手册!

为 Serverless Devs 插上 Terraform 的翅膀,解耦代码和基础设施,实现企业级多环境部署(下)