研发管理知识库(8)Terraform 简介
Terraform 是一款由 HashiCorp 公司推出的开源 基础设施即代码(IaC)工具,它允许您使用易于理解的配置文件来定义、预配和管理云基础设施资源。
HashiCorp 公司是一家在云计算和 DevOps 领域极具影响力的美国加州的开源软件公司,2025年初,IBM完成了对 HashiCorp 的收购。
特性维度 | 核心说明 |
核心范式 | 声明式语法:您只需定义基础设施的“最终期望状态”,Terraform 会自动规划并执行如何达到该状态。 |
核心流程 | 编写 → 规划 → 应用:先编写配置文件,然后生成一个可视化的执行计划,确认无误后再自动应用变更。 |
核心概念 | Provider, Resource, State:通过提供商与云平台交互,通过资源定义组件,通过状态文件追踪现有资源。 |
关键优势 | 多云/混合云支持:使用同一套工具和语法管理不同云平台(如 AWS、Azure、GCP)甚至本地数据中心的资源。 |
工作原理与核心流程
Terraform 的核心工作流可以清晰地分为三个步骤,这使得基础设施变更变得可预测且安全:
- 编写:您使用 HashiCorp 配置语言(HCL)或 JSON 编写配置文件(通常以 .tf结尾),描述您需要哪些资源(例如虚拟机、网络、数据库)。HCL 是一种对人类友好且可读性高的语言。
- 规划:执行 terraform plan命令。Terraform 会将您的配置与当前基础设施的状态(记录在一个名为 terraform.tfstate的状态文件中)进行比对,然后生成一份详细的执行计划。这份计划会明确列出它将创建、修改或销毁哪些资源,而不会真正执行,让您有机会在变更发生前进行确认。
- 应用:在审核计划确认无误后,执行 terraform apply命令。Terraform 会开始执行计划,并自动处理资源之间的依赖关系,以正确的顺序进行所有操作。
主要组成部分
要理解 Terraform,需要了解几个关键组件:
- Provider:这是一个插件,让 Terraform 能够通过 API 与特定的云平台或服务(如 AWS、Azure、Kubernetes 甚至 DNS 服务)进行交互。它是 Terraform 扩展性的基石。
- Resouce:在配置文件中,每个需要管理的基础设施组件(如一台虚拟机、一个安全组规则)都定义为一个“资源”。
- State:Terraform 会维护一个状态文件(terraform.tfstate),它相当于 Terraform 所管理基础设施的“真实来源”。Terraform 通过对比配置文件和状态文件来确定需要执行哪些变更。
- Module:模块是封装好的、可重用的 Terraform 配置集合。您可以使用社区或云服务商预制的模块快速部署复杂但标准化的基础设施(例如一个完整的 Kubernetes 集群),这极大地提升了效率和代码的规范性。
主要应用场景
Terraform 的灵活性使其适用于多种场景:
- 多云和混合云部署:使用同一套工作流统一管理分布在多个云平台上的资源,避免被单一云厂商“锁定”。
- 应用基础设施管理:轻松部署和管理为多层应用(如 Web 服务器、数据库、负载均衡器)服务的完整基础设施栈,并自动处理层与层之间的依赖关系。
- 标准与自助服务:大型组织可以创建经过审核和标准化的 Terraform 模块,允许产品团队以自助服务的方式快速、安全地部署合规的基础设施。
- CI/CD 集成:将 Terraform 集成到持续集成/持续部署流水线中,实现基础设施变更与应用程序代码部署的同步自动化。
与相关工具的简单对比
为了更好地定位 Terraform,可以简单了解它与一些常见工具的区别:
- Terraform vs. Ansible:Ansible 更侧重于配置管理和软件部署(例如在已有的服务器上安装并配置软件),通常被认为是“手序型”的。而 Terraform 专注于基础设施资源本身的声明式生命周期管理。两者经常协同工作,例如用 Terraform 创建虚拟机,然后用 Ansible 在虚拟机上配置应用。
- Terraform vs. Kubernetes:这两者并非竞争关系。Kubernetes 是一个容器编排平台,用于管理容器化应用在集群内的部署和运行。而 Terraform 是一个基础设施调配工具,它经常被用来创建和配置运行 Kubernetes 集群本身所需的基础设施(如虚拟机、网络、存储等)。
