辅以专家洞察分析的最新科技新闻
通过 Think 时事通讯,了解有关 AI、自动化、数据等方面最重要且最有趣的行业趋势。请参阅 IBM 隐私声明。
Terraform 是 HashiCorp 创建的企业级基础设施即代码 (IaC) 产品。Terraform 提供统一的基础设施生命周期管理界面和单一工作流,用于为多云(AWS、Azure 和 Google Cloud)、网络、 私有数据 中心 和 SaaS 环境配置基础设施组件。
借助 Terraform,用户可以通过编写人类可读的配置文件来创建、 更新 和销毁基础设施组件。这些配置文件使用声明式语言,而非过程式语言。用户描述基础设施 资源的期望最终状态, Terraform 处理其余部分。它自动生成执行计划、 识别 资源间依赖关系并按正确顺序部署组件。
例如,若 虚拟机 (VM) 依赖 虚拟私有云 (VPC), Terraform 将确保先创建 VPC 再部署 VM。
相比之下,使用程序语言时,开发者必须逐步编写指令来配置基础设施。
可对 Terraform 配置文件进行版本控制、 重用 和共享。Terraform 管理低级组件,如计算和存储资源及 S3 存储桶,以及高级组件,如 域名系统 (DNS) 条目和 软件即服务 (SaaS) 功能。
2025 年 2 月, IBM 收购了 HashiCorp 及其产品,包括 Terraform。
通过 Think 时事通讯,了解有关 AI、自动化、数据等方面最重要且最有趣的行业趋势。请参阅 IBM 隐私声明。
Terraform 几乎 可以与任何具有可用应用程序编程接口 (API) 的平台或服务配合使用,包括 Amazon Web Services (AWS)、Microsoft Azure、Google Cloud、GitHub、IBM Cloud 和 Docker。
Terraform 的核心工作流程包含三个阶段:
开发者编写一个人类可读的配置文件来定义他们所需基础设施的资源配置。该文件是声明式的。开发者描述了他们想要的基础设施,而不是如何配置它。
例如,开发者若想为部署云托管应用程序配置基础设施,可能需要指定在虚拟私有云中配备虚拟机,并关联安全组与 负载均衡器。
单个配置文件可管理 位于 多个云供应商和服务中的资源。
Terraform 会分析开发者提供的书面配置以及组织基础设施的当前状态。然后,它会创建一个执行计划,描述它将如何从当前状态达到期望的状态。
执行计划本身以基础设施清单形式呈现,Terraform 将通过创建、 更新 或销毁这些资源,使现实环境与开发者描述的配置保持一致。
以 先前 开发者需要在虚拟私有云中部署虚拟机应用程序为例。 Terraform 的 执行计划可能包含以下操作:
开发者可以在 Terraform 执行之前审查、 修改 和验证计划。
当计划获得批准后,Terraform 将按照正确的顺序执行建议的操作,同时考虑资源依赖关系。也就是说,如果资源 A 依赖于资源 B,则 Terraform 会确保在资源 A 之前创建资源 B。
例如,假设某开发者更新了 VPC 的属性并更改了该 VPC 中虚拟机的数量。Terraform 会在扩展虚拟机之前重新创建具有更新属性的 VPC。
Terraform 的主要组件包括:
配置文件 是开发者为本地部署和云环境定义所需资源的方式。这些文件告诉 Terraform 要使用哪些提供程序、要创建哪些基础设施以及要获取哪些数据。开发者可以修改、复用和分享配置文件。
开发者可以使用 JSON 或 HashiCorp 配置语言 (HCL) 编写配置文件。HCL 使用声明性语法:开发者描述他们想要的基础设施,而不是指定如何配置它。HCL 类似于 JSON 的键值对,但它进行了优化,更加适合人类阅读。
模块则是多个常需共同使用资源的可复用容器。例如,一个模块可集成虚拟机、数据库、网络配置与安全设置于一体。这些模块以配置文件集合的形式进行存储。
使用 Terraform 模块 ,开发者可创建复杂的基础设施,而无需每次都从头开始。相反,他们可以 使用 已经描述了他们需要的基础设施配置的模块。
Terraform 状态文件 描述基础设施的当前状态,包括组件、配置以及资源之间的关系。
Terraform 生成执行计划时,首先会比对配置文件与状态文件。这种比较使 Terraform 能够确定需要做出哪些更改,以使当前基础设施符合所需的配置。
Terraform 提供程序 是 Terraform 用于与外部服务和平台的 API 交互的插件。这些插件使 Terraform 能够管理 基础设施即服务 (IaaS)、 平台即服务 (PaaS) 及软件即服务 (SaaS) 环境中资源。每个提供商都包含 Terraform 连接服务、身份验证和调配资源所需的全部代码。
虽然开发者可以编写自己的提供程序,但他们也可以使用由 HashiCorp 和其他 Terraform 用户编写的现有提供程序。大多数主流的私有云和 公有云 服务以及数据库、网络解决方案和其他常用工具都有预先构建的提供程序。
Terraform 还可以管理现有基础设施。使用 import 块,开发者可以将 Terraform 外部创建的资源纳入其管理,从而能够对整个环境(而不仅仅是新资源)进行代码化和控制。
Terraform Registry 是提供程序、模块、策略规则和解决方案的存储库。
任何人都可以在公共 Terraform Registry 上发布和使用资源和模板。 要使用此注册表中的提供程序或模块,用户将其添加到配置中。当他们运行 terraform init 时,Terraform 会自动下载所需的一切。
组织也可以 创建私有注册中心 ,在内部共享专属模块与资源。
Terraform CLI 是用于使用 Terraform 管理基础设施的命令行界面 (CLI) 工具。开发者可使用它来运行命令、生成执行计划、应用更改并与关键 Terraform 组件交互,例如配置文件、状态文件、提供程序和模块。
组织使用 Terraform 在整个生命周期中 配置和管理基础设施 。常见用例包括:
混合云和 多云 环境可能非常复杂,因为每个云提供商都有自己的界面、工具和 工作流。在这类设置中,关键云资源可能分布在公有云、私有云和多个 数据中心。
组织可以使用 Terraform 来简化复杂、大规模云基础设施的管理和编排。具体来说,Terraform 使组织能够使用相同的配置语言,在一个统一的工作流中配置和管理跨公有云、私有云和本地环境的资源。
为了帮助大规模管理基础设施, Terraform Stacks 帮助用户自动化和优化相互依赖的 Terraform 配置的协调、部署及生命周期管理,减少管理基础设施的时间和开销。
Stacks 用基于 Terraform 模块构建的新的组件化架构取代了 Terraform 传统的根模块结构。通过使用 Stacks,用户可以大规模地配置 和协调基础设施生命周期,提供一种有组织、可复用的方法,扩展了基础设施即代码的理念。
Terraform 可以部署和管理多层应用程序的基础设施,这样,组织将能够在统一工作流程中管理每一层的资源,同时考虑依赖关系。
例如,多层应用程序可能由一个 Web 服务器池、一个 数据库 层、一个 API 层、缓存服务器和一个路由层组成。Terraform 将会先配置数据库层,然后再配置依赖该数据库层的 Web 服务器。
开发者自助服务 正从简单的基础设施配置,演进为涵盖从环境搭建到部署和持续运营的完整应用程序生命周期。
Terraform 为这种现代化的自助服务模式提供了基础。它集成了开发者门户(如 Backstage、Port 和 Cortex)、ITSM 系统(如 ServiceNow 和 Jira),以及 CI/CD 流水线平台(如 GitHub Actions 和 Jenkins)。
对于倾向于留在 Terraform 工作流中的团队,Waypoint 作为原生的 Terraform 开发者自助服务门户, 可提供一致、策略驱动的应用程序部署体验。
在 AWS、Azure 和 GCP 上,Terraform 充当统一这些入口的集成与控制层,使开发者能够更快行动,同时保持治理和运营一致性。
组织可以将 Terraform 代码和配置文件存储在版本控制系统 (VCS) 中,例如 Git 仓库。这种安排使 DevOps 团队能够协作编写代码、审查定义、跟踪基础设施变更,并在必要时回滚到以前的基础设施版本。
Terraform 和 Ansible 通常一起使用,以将自动化扩展到基础设施配置之外。Terraform 擅长配置基础设施,为云和混合环境准备和配置复杂资源。Ansible 是一款强大的配置管理工具,能够一致地修改和维护现有基础设施。
利用通过 YAML 编写的 Ansible 运行手册,可对安装软件和更新系统设置等任务进行细粒度的控制。
这两个工具处理基础设施生命周期中不同但相互关联的阶段,因此对于追求跨环境一致性的组织来说,它们是天然的搭配。
Terraform 与 Ansible 之间的集成有助于弥合资源创建和配置管理之间的差距。例如,Terraform 操作 可以分派事件,激活 Ansible Automation Platform (AAP) 的事件驱动自动化能力,从而从 Ansible 触发动态自动化工作流,而这一切只需一次 Terraform 应用即可完成。
这种互联互通有助于统一基础设施工具集,并减少 第二天运维 (如补丁管理、扩缩容和下线)中的摩擦。Terraform 和 Ansible 协同,有助于确保基础设施和应用在其生命周期的每个阶段保持一致性及可靠性。
Kubernetes 和 Terraform 是云环境的常见组件,它们都有助于自动执行与基础设施相关的任务。然而,两者之间的核心区别在于,Kubernetes 专注于容器化工作负载,而 Terraform 管理各种基础设施组件,包括 Kubernetes 集群本身。
Kubernetes 是一个开源的容器编排平台,用于调度和自动执行容器化应用程序的部署、管理和扩展。Terraform 是一种基础设施即代码工具,可自动预配和管理基础设施。
虽然这些工具各有特点且功能不同,但它们经常在云后端协同工作。例如,Terraform 可以在云平台上自动预配 Kubernetes 集群,而 Kubernetes 可管理这些集群中应用程序的部署。