Terraform

menu icon

Terraform

本指南重点说明了 Terraform 工具需知,以便程序员可以安全高效地构建和更改基础架构并对其进行版本控制。

什么是 Terraform?

Terraform 是由 HashiCorp 创立的开源“基础架构即代码”工具。

Terraform 是一种声明式编码工具,可以让开发人员用 HCL(HashiCorp 配置语言)高级配置语言来描述用于运行应用程序的“最终状态”云或本地基础架构。 它随后会生成用于达到该最终状态的计划,并执行该计划以供应基础架构。

由于 Terraform 使用的语法很简单,能够跨多个云和本地数据中心供应基础架构,并且能够安全高效地重新供应基础架构以响应配置更改,因此它是目前最受欢迎的基础架构自动化工具之一。 如果贵组织计划部署混合云多云环境,那么您很可能想要或需要了解 Terraform。

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

为了更好地了解 Terraform 的优势,首先需要了解基础架构即代码 (IaC) 的优势。 IaC 允许开发人员以让供应自动化、更快速和可重现的方式来整理基础架构。 它是 Agile 和 DevOps 实践的关键组件,这些实践包括版本控制、持续集成持续部署等。

基础架构即代码可帮助实现以下效果:

  • 提高速度:在需要部署和/或连接资源时,自动化比手动浏览界面更快。
  • 提高可靠性:如果基础架构庞大,那么很容易错误配置资源或以错误顺序供应服务。 借助 IaC,资源始终完全按声明进行供应和配置。
  • 防止配置偏离:当用于供应环境的配置不再与实际环境匹配时,便会出现配置偏离。(请参阅下面的“不可变基础架构”。)
  • 支持实验、测试和优化:因为使用“基础架构即代码”可以更快更轻松地供应新基础架构,因此可在不投入大量时间和资源的情况下进行和测试实验性更改;如果得到有利的结果,便可以快速扩展新的基础架构以投入生产。

请参阅“什么是基础架构即代码?”以进一步了解:

为何选择 Terraform?

开发人员之所以选择使用 Terraform 而不是其他“基础架构即代码”工具,有以下几个理由:

  • 开源:Terraform 由很多社区提供支持,这些社区中的贡献者为该平台构建了大量插件。 无论使用哪家云提供商,都可以轻松找到插件、扩展和专业支持。 这也意味着 Terraform 发展迅速,不断引入新的优势和改进。
  • 与平台无关:它可以配合任何云服务提供商使用。 大多数其他 IaC 工具都是面向单一云提供商使用。
  • 不可变基础架构:大多数的“基础架构即代码”工具都会创建可变基础架构,即基础架构可以变动以适应诸如中间件升级或新存储服务器之类的更改。 可变基础架构的缺点在于配置偏离。随着更改的叠加,实际供应的不同服务器或其他基础架构元素可能“偏离”原始配置,从而导致很难诊断并纠正错误或性能问题。 Terraform 提供的是不可变基础架构,即,随着环境的每次更改,当前配置将替换为负责该次更改的新配置,并将重新供应基础架构。 更妙的一点是,先前的配置可以保留为版本,以便在需要时进行回滚。

Terraform 模块

Terraform 模块是可协同使用的多个基础架构资源的小型可复用 Terraform 配置。 Terraform 模块很实用,因为它可以通过可复用且可配置的构造来自动使用复杂资源。 甚至编写一个非常简单的 Terraform 文件,也可作为模块。 模块可调用其他模块(称为子模块),因此可以更快、更简练地组装配置。 也可以在同一配置或不同配置中多次调用模块。

Terraform 提供程序

Terraform 提供程序是实现资源类型的插件。 提供程序包含代表用户认证和连接到服务(通常从公有云提供商进行连接)所需的全部代码。 您可以查找适用于所用云平台和服务的提供程序,并将其添加到配置中,然后使用其资源来供应基础架构。 为几乎所有主流云提供商、SaaS 产品以及由 Terraform 社区或单个组织开发和/或支持的产品都提供了相应的提供程序。 请参阅 Terraform 文档 (IBM 外部链接),以获取详细列表。

Terraform 与 Kubernetes

有时候,很容易混淆 Terraform 与 Kubernetes 以及它们的实际用途。 事实上,这二者并非竞争关系,而是可以高效地协同工作。

Kubernetes 是开源的容器编排系统,允许开发人员在计算集群的节点上安排部署,并主动管理容器化工作负载以确保其状态符合用户期望。

另一方面,Terraform 是一款基础架构即代码工具,覆盖范围更广,让开发人员可以自动完成跨越多个公有云和私有云的基础架构。

Terraform 可以自动化和管理基础架构即服务 (IaaS)平台即服务 (PaaS),甚至软件即服务 (SaaS) 级别的功能,并在所有提供商之间并行构建所有此类资源。 您可以使用 Terraform 来自动供应 Kubernetes,特别是云平台上管理的 Kubernetes 集群,并自动将应用程序部署到集群中。

Terraform 与 Ansible

Terraform 和 Ansible 都是“基础架构即代码”工具,但两者之间存在几处明显差异:

  • Terraform 纯粹是一种声明式工具(见上文),而 Ansible 则将声明式和程序式配置结合。 在程序式配置中,您可以指定步骤或精确方式,以用于供应基础架构来使其达到期望的状态。 程序式配置的工作量 更大,但控制能力更强。
  • Terraform 是开源的,而 Ansible 则是由 Red Hat 开发和销售。

IBM 和 Terraform

IBM Cloud Schematics 是 IBM 推出的基于 Terraform 的免费云自动化工具。 IBM Cloud Schematics 可让您全面管理基于 Terraform 的基础架构自动化,以便您可以投入更多的时间来构建应用程序,并减少构建环境的时间。

详细了解如何使用 IBM Cloud Schematics

有关 Terraform 的更多信息,请注册一个 IBMid 并创建 IBM Cloud 帐户