什么是 Terraform?

Terraform 是由 HashiCorp 创建的“基础架构即代码”开源工具,让程序员可以安全高效地构建、更改基础架构并标示其版本。

Terraform 是一款声明性编码工具,使开发人员能够使用名为 HashiCorp 配置语言 (HCL) 的高级配置语言来描述用于运行应用程序的云端或本地部署基础架构所需的“最终状态”。然后,该工具会生成达到该最终状态的计划,并运行该计划以预配基础架构。

Terraform 使用简单的语法,预配多个云端和本地部署数据中心的基础架构,并根据配置变化安全高效地重新预配基础架构。因此,它是目前最常用的基础架构自动化工具之一。如果贵企业计划部署混合云多云环境,很可能希望或需要了解 Terraform。

为何选择基础架构即代码 (IaC)?

首先了解基础架构即代码 (IaC) 的优点将有助于更好地了解 Terraform 的优势。开发人员可以利用 IaC,以更快和可重复的自动化方式对基础架构进行编码。它是敏捷和 开发运维 (DevOps) 实践(例如版本控制、持续整合持续部署)的关键组成部分。

基础结构即代码有助于实现以下目标:

  • 提升速度:当需要部署或连接资源时,自动化比手动浏览界面更快。

  • 提高可靠性:如果企业的基础架构规模较大,则很容易错误配置资源或以错误的顺序提供服务。可以借助 IaC,始终按照声明的方式提供和配置资源。

  • 防止配置偏差:当预配的环境配置不再与实际环境相匹配时,就会出现配置偏差。(请参阅《不可变基础架构》一文)

  • 支持实验、测试和优化:由于“基础架构即代码”能够加快和简化新基础架构的预配流程,因此可以在不投入大量时间和资源的情况下进行试验性更改并加以测试;如果对相关结果感到满意,可以迅速在正式上线环境中扩展新基础架构。
为何选择 Terraform?

出于下列几点关键原因,开发人员选择使用 Terraform 而非其他基础架构即代码工具:

  • 开源:Terraform 有庞大的参与开发者社区作为后盾,他们为平台构建了各种插件。无论使用哪家云供应商,都能轻松找到插件、扩展功能和专业支持。这也意味着 Terraform 发展迅速,不断增加新的优势和改进功能。

  • 不受平台限制:这意味着可以将其用于任何云服务供应商。大多数其他 IaC 工具均针对单一云供应商而设计。

  • 不可变基础架构:大多数基础架构即代码工具都会创建可变基础架构,这意味着可以更改相关基础架构,以适应中间件升级或新存储服务器等变化。可变基础架构的危险在于配置偏差。这意味着,随着更改持续累积,不同服务器或其他基础架构元素的实际预配会进一步“偏离”原始配置,从而导致难以发现和纠正错误或性能问题。Terraform 提供不可变基础架构,这意味着每当环境发生变化,当前的配置都会被适应该变化的新配置所取代,并重新预配相关基础架构。更胜一筹的功能则是之前的配置可以保留为版本,以便在必要或需要时进行复原。
Terraform 模块

Terraform 模块是可以重复使用的小型 Terraform 配置,适用于一起使用的多项基础架构资源。Terraform 模块很有用,因为它们允许通过可重复使用、可配置的构造来自动化复杂的资源。即使编写非常简单的 Terraform 文件也会生成一个模块。一个模块可以调用其他模块(称为“子模块”),从而加快和精简配置组装流程。此外,还可以在同一配置或不同配置中多次调用模块。

Terraform 提供程序

Terraform 提供程序是用于实施资源类型的插件。提供程序包含代表用户验证和连接服务(通常由公共云供应商提供)所需的全部代码。可以查找所使用云平台和服务的提供程序,将其添加到配置中,然后使用其资源来预配基础架构。几乎所有主要云供应商、SaaS 产品等都有提供程序,由 Terraform 社区或个别组织开发或提供支持。详细列表请参阅 Terraform 文档(ibm.com 外部链接)。

Terraform 与 Kubernetes 的对比

有时候,Terraform 和 Kubernetes 及其用途会被混淆。它们其实并非替代品,而且可以有效地协同运作。

Kubernetes 是一种开源容器编排系统,让开发人员可以为计算集群中的节点安排部署,并主动管理容器化工作量,以确保其状态符合用户的意图。

Terraform 是一款基础架构即代码工具,其覆盖范围更广,可让开发人员自动运作涵盖多个公有云和私有云的完整基础架构。

Terraform 可以自动执行和管理基础架构即服务 (IaaS)平台即服务 (PaaS) 甚至软件即服务 (SaaS) 级别的功能,并行构建涵盖所有这些提供程序的全部相关资源。可以使用 Terraform 自动预配 Kubernetes(特别是在云平台托管的 Kubernetes 集群),并自动将应用程序部署到集群中。

Terraform 与 Ansible 的对比

Terraform 和 Ansible 都是基础架构即代码工具,但两者之间存在一些显著差异:

  • 虽然 Terraform 纯粹是一款声明性工具(见上文),但 Ansible 结合了声明性和程序性配置。在程序性配置中,需指定将基础架构调配到所需状态的步骤或确切方式。程序性配置工作量更大,但控制能力更强。

  • Terraform 是开源工具;Ansible 则由 Red Hat 开发和销售。
相关解决方案
IBM Cloud Schematics

IBM Cloud Schematics 通过提供面向所需云基础架构的声明性 Terraform 模板来实现自动化。

深入了解 IBM Cloud Schematics
采取后续步骤

您准备好实施 DevOps 了吗?要按照市场需求的速度交付软件和服务,团队必须快速迭代和试验,并在反馈和数据的驱动下频繁部署新版本。最成功的云开发团队通过现代 DevOps 文化和实践,采用云原生架构,并使用一流的工具组装工具链,实现了生产力的大幅提升。

探索 DevOps 解决方案 免费试用