背景:
随着软件复杂化,仅仅管理软件自身已不能满足软件开发需求,对基础设施的管理愈发受重视。IaC 应运而生,其核心思想是将计算设施当作代码来管理,这样可以迁移在软件上的一些管理经验到基础设施上。
困惑:
![]() | 1 adoal 2022-04-08 11:18:39 +08:00 “基础设置中也有选项概念吗?”那反问一句,你理解的基础设施是什么呢? 最基础的虚拟机、存储、网络、安全策略显然都是有配置选项的。往上一层,关系数据库、键值数据库、缓存、负载均衡也都是有配置选项的。 |
![]() | 2 fire2y 2022-04-08 11:32:23 +08:00 我的理解大概就是把创建资源用代码实现,所以就有 terraform 这种 |
3 Davic1 2022-04-08 12:32:49 +08:00 基础设施(Infrastructure) 大多指网络(VPC 安全组) 虚拟机(EC2) 以及云提供商提供的一切资源.(IAM RDS 等等) 通常使用一个云提供商的这些资源,是在 Console 上(Web 界面)用鼠标点点点, 当你点的太多次就会觉得很乏味, 自然而然就会想要用代码来自动化这些事情. 云提供商也明白用户会有这些需求, 所以会有 API 接口, 会提供账号的 AK/SK(Access Key Secret Key)让你通过有权限访问这些资源. 会有相应的 SDK 让你去使用. 你要做的就是写代码. 过程中必然会涉及 VPC 怎么划分, 安全组开哪些端口, EC2 用什么规格... 久而久之就会发现, 用代码来调用开通这个动作其实大同小异. 花心思更多的是在设计和资源选取上. Terrafrom 就是帮你做了开通动作这件事情, 所以你要做的就是按照 Terrafrom 规定的格式去填写你想要开通的资源配置情况. IaC 是一项一劳永逸的工作, 虽然一开始真的很"劳" 上面只是涉及到单个云厂商, 现实情况可能还会涉及到多云, 甚至自己的 IDC 机房. 当然自己可以写代码来处理这些情况, 但是 Terrafrom 已经帮你做好了基础工作(这时候就要抛出一个 Why not 了.) OP 想要了解的配置, 指的是广泛意义上的应用程序的配置. 针对不同的软件, 所指的配置是不同的. 举例来说, 我要用 Ansible 做一些服务器优化的事情, 这时候配置就是 Ansible 的 Playbook, 我要开通新资源, 如果使用 Terrafrom 那么配置就是 Terrafrom 的配置文件(xxx.yaml 或者说 xxx.hcl) 另外 Terrafrom 是可以结合 Ansible 一起使用的. (啊, HashiCrop 的官网 UI 设计的真漂亮) |
4 ly879 OP @adoal 老哥角度不错。我理解的基础设施是软件开发相关的软硬件组合。从这个意义上讲,某个与开发、部署、运维相关的软件也可以作为基础设施,从而使基础设施有了选项概念。对于网络、存储、防火墙这类应该是属于软硬件结合体,它们的选项可能属于软件部分,也可能属于硬件部分。但 IaC 中的配置也是这么具体到每个基础设施的选项吗? |
6 ly879 OP @Davic1 “举例来说, 我要用 Ansible 做一些服务器优化的事情, 这时候配置就是 Ansible 的 Playbook, 我要开通新资源, 如果使用 Terrafrom 那么配置就是 Terrafrom 的配置文件(xxx.yaml 或者说 xxx.hcl)” 是否可以理解为:这里的配置本质上是用于执行自动化任务的操作指令,这些指令通过调用基础设施的 API 来实现。那么,和我理解的配置是用于控制某个实体(如软件)的特性,好像是不同的。除非这些 API 本质上就是通过操作,基础设施提供的用于控制特性的选项来实现。谢谢! |
7 Davic1 2022-04-08 13:29:01 +08:00 "是否可以理解为:这里的配置本质上是用于执行自动化任务的操作指令" 好像不太准确, 我觉得把配置理解为参数的集合就行. |
8 joesonw 2022-04-08 13:49:32 +08:00 via iPhone ![]() 就是和代码一样有版本的概念,能做到有错快速回滚。 |