第一部分主要介绍了无服务器Devs的多环境功能的使用。看完之后,用户可能会有一些疑问。本文将回答一些常见问题。
1.一些用户可能会问无服务器Devs和Terraform之间的关系。既然已经支持Terraform,那么无服务器Devs的作用是什么?直接用Terraform可以吗?
无服务器Devs和Terraform的定位明显不同。无服务器Devs面向应用管理和DevOps,Terraform面向云资源。它们是两个不同的领域,但并不意味着它们在某些层面上不能交叉或融合。集成和被集成的能力本来就是开源工具是否标准化的衡量标准。
Terraform解决了云资源的调配,在这个领域有非常清晰的方法论。而无服务器的dev应该强调如何利用好云资源。这两者之间的关系可以用几种情况来说明:
无服务器Devs更关注如何上传代码或者安装依赖的片段到NAS,不太关注如何创建VPC/交换机/安全组/NAS挂载点;无服务器Devs更关注如何上传文件到OSS,自动触发函数完成报表生成,较少关注如何创建OSS Bucket无服务器的Devs更关注如何构建代码/映像、做层、部署代码、发布版本和灰度来构建完整的CI/CD体验,而较少关注如何创建FC的网络、日志仓库和ACR实例。无服务器Devs更关注如何远程调试代码,如何登录在线实例,如何通过日志和监控快速发现业务异常;可见,无服务器Devs更注重应用运行状态和运维状态的操作,这也是无服务器架构的工具最重要的使命。而无服务器Devs负责无服务器应用的全生命周期管理,不可避免的需要对资源进行管理。我们在实践中发现,无论是使用云产品SDK还是Pulumi等GPLs,都需要在资源生命周期的对接上投入大量的精力,对于组件开发者来说对接更多的云产品效率非常低。
Terraform在这方面是最专业的。无论是标准化程度、认可度,还是资源丰富程度,都能够满足终端用户和开发者的需求,因此引发了将无服务器Devs和Terraform结合起来的想法。
无服务器Devs不与Terraform耦合。反而让Terraform的HCL语言在无服务器Devs的组件规范中发挥的很自然,可以认为是无服务器Devs支持多种语言的一种能力。对开发者的价值在于,可以用低代码完成基础设施建设,把精力投入到无服务器应用的生命周期管理相关的开发中,否则就要开发大量的资源CRUD代码,效率非常低。
2.多环境功能和直接使用Terraform有什么区别?既然多环境部署也要走Terraform,那和我直接用Terraform部署资源有什么区别?
Terraform是工具的个人版,需要本地管理ak/sk,本地安装Provider。多环境是多租户服务,用户不需要自己维护这些多环境功能。重要的是‘管理’的能力。比如模板有版本管理能力。当模板的新版本发布时,IaC更改不兼容,如果用户更新环境,将会导致未知问题。在这种情况下,系统会自动识别并确保对于存量环境的变化仍然使用旧版本,不会受到不兼容变化的影响。Terraform是一个纯面向资源的布局工具,与应用的连接比较弱。环境、服务、管道可以自然形成连接关系。例如,环境可以感知资源使用哪些服务,服务可以通过环境的授权获得对资源的访问,服务可以一次性部署到管道中的所有环境。Terraform做不到的Terraform,只是IaC在多种环境下的技术选择。未来还计划连接ROS、Pulumi等IaC项目。3.多个环境和环境变量之间的关系将使用CI/CD中的环境变量。VPC、NAS等将在环境变量中配置。似乎在s.yaml中引用环境变量就够了为什么还要创造一个环境概念?
和环境变量可以通过它们的名称相互区分。环境变量是一组静态配置。虽然有些资源配置可以写入环境变量,在CI/CD管道中引用,但是这种方法不具备管理资源的能力。
环境是一种物理资源,具有基础设施的生命周期管理能力。通过该环境,您可以添加、删除和检查基础设施,并且可以通过访问控制授予用户操作权限。在更新环境的时候,还可以检查一些安全性。
基础设施可以通过环境得到保护。比如多个服务共享环境,如果发起环境删除,系统会自动发现该环境依赖于其他服务,删除会被拒绝。
4.只能给企业用户用吗?个人开发者如何使用?我是个人开发者,不了解Terraform。文章中各种模板的定义有点晕,那我还适合用这个功能吗?
开发者同样适用,但这部分用户不应该被赋予编写模板的工作。而是平台提供了各种业务场景的模板,开发者可以开箱即用,这也是我们后续的主要工作。
对于个人用户来说,阿里云最复杂的概念就是RAM、VPC、ECS、SLB、NAS,学习曲线太长。这个问题在号称低门槛、低成本、低运维的无服务器架构下尤为明显。但是,无服务器入门需要了解很多概念,配置很多东西,很多用户在这个过程中被‘劝退’。环境模板和环境可以大大简化云产品的入门成本,同时可以安全运营。
比如用户选择一个模板部署环境,所有云资源都可以一键拉起,这样才算是真正的无服务器。
5.实现原理遵循无服务器Devs组件的开发规范,后端服务通过实现一个组件与后端服务连接。后端服务采用无服务器K8s的架构,模板渲染和部署任务执行由消息触发功能完成。KubeVela用于完成K8s资源的管理和Terraform任务的执行。
6.为什么多环境是组件级功能,而不是CLI功能?无服务器开发分为CLI和组件:
CLI提供最通用的功能,并且不依赖于任何组件,如init、config、verify、- template和- debug组件提供特定的功能,如deploy、build和invoke。这些是fc组件的功能。从env命令的通用性和要解决的问题来看,在CLI中也是合适的。然而,从实现的角度来看,因为需要服务器的控制平面来完成用户资源的部署,所以出于安全原因需要特定的云服务,所以这是复杂的