Terraform 是由 HashiCorp 创建的开源“基础架构即代码”工具。
Terraform 是一种声明式工具,支持开发人员使用 HCL(HashiCorp 配置语言)高级配置语言,描述用于运行应用的“最终状态”的云端或本地基础架构。 它随后会生成用于达到该最终状态的计划,并执行该计划以部署基础架构。
由于 Terraform 使用的语法很简单,能够部署覆盖多个云端和本地数据中心的基础架构,并且能够安全高效地重新部署基础架构以应对配置变更,因此它是目前最受欢迎的基础架构自动化工具之一。 如果贵组织打算部署混合云或多云环境,那么您可能希望或需要了解 Terraform。
为何选择基础架构即代码 (IaC)?
为了更好地了解 Terraform 的优点,首先需要了解基础架构即代码 (IaC) 的优点。 IaC 支持开发人员以自动化和可重复的方式,更迅速地部署基础架构。 它是版本控制、持续集成和持续部署等敏捷和DevOps实践的关键组成部分。
基础架构即代码有助于实现以下优点:
- 提高速度:需要部署和/或连接资源时,自动化方式比人工寻找接口速度更快。
- 改进可靠性:如果基础架构庞大,那么很容易错误配置资源或以错误顺序部署服务。 借助 IaC,资源始终完全按声明进行部署和配置。
- 防止配置偏差:当用于部署环境的配置与实际环境不再匹配时,就会出现配置偏差。 (请参阅下文“不可改变的基础架构”。)
- 支持试验、测试和优化:因为"基础架构即代码"能够更迅速更方便地部署新的基础架构,因此无需投入大量时间和资源即可执行和测试试验性变更。如果对试验结果感到满意,便可快速扩展新的基础架构以投入生产。
为何选择 Terraform?
开发人员之所以选择使用 Terraform 而不是其他"基础架构即代码"工具,有以下几个理由:
- 开源:Terraform 由庞大社区提供支持,这些社区中的贡献者构建了大量平台插件。 无论使用哪家云提供商的平台,都可以轻松找到插件、扩展和专业支持。 这也意味着 Terraform 在迅速发展,不断引入新的优势和改进。
- 独立于平台:这意味着您可以在任何云服务提供商的平台上使用 Terraform。 大多数其他 IaC 工具都是面向单一云提供商而设计的。
- 不可改变的基础架构:大多数"基础架构即代码"工具都会创建可改变的基础架构,即基础架构可以变动以适应诸如中间件升级或新存储服务器之类的变更。 可改变基础架构的危险之处在于配置偏移。随着变更的积累,实际部署的不同服务器或其他基础架构元素可能""偏移""原始配置,使缺陷或性能问题难以诊断和纠正。 Terraform 部署的是不可改变的基础架构,即随着环境的每次变更,当前配置将替换为适合该次变更的新配置,并将重新部署基础架构。 更妙的一点是,先前的配置可以保留为版本,以便在需要时进行回滚。
Terraform 模块
Terraform 模块是可复用的小型 Terraform 配置,可结合使用以组成多个基础架构资源。 Terraform 模块非常有用,因为它们通过可复用且可配置的构造,自动部署复杂的资源。 甚至编写一个非常简单的 Terraform 文件,也可形成模块。 模块可调用其他模块,称为子模块,从而更迅速更简便地组装配置。 也可以在同一配置或不同配置中多次调用模块。
Terraform 提供程序
Terraform 提供程序是实现资源类型的插件。 提供程序包含代表用户认证和连接服务(通常是来自公有云提供商的服务)所需的全部代码。 您可以查找适用于所用云平台和服务的提供程序,并将其添加到配置中,然后使用其资源来部署基础架构。 为几乎所有主流云提供商、SaaS 产品以及由 Terraform 社区或各个组织开发和/或支持的产品都提供了相应的提供程序。 请参阅 Terraform 文档 (链接位于 外部)以获取详细列表。
Terraform 与 Kubernetes
有时候,很容易混淆 Terraform 与 Kubernetes 以及它们的实际用途。 事实上,这二者并非竞争关系,而是可以高效地协同工作。
Kubernetes 是开源容器编排系统,帮助开发人员将部署安排到计算集群中的节点上,并主动管理容器化工作负载,以确保其状态符合用户的预期。
另一方面,Terraform 是基础架构即代码工具,覆盖范围更广,支持开发人员自动完成覆盖多个公有云和私有云的基础架构。
Terraform 可以自动执行和管理基础架构即服务 (IaaS)、平台即服务 (PaaS),甚至软件即服务 (SaaS) 级别的功能,并可以并行构建涉及所有这些提供商的所有这些资源。 您可以使用 Terraform 来自动部署 Kubernetes - 特别是云平台上管理的 Kubernetes 集群,并自动将应用部署到集群中。
Terraform 与 Ansible
Terraform 和 Ansible 都是"基础架构即代码"工具,但两者之间存在几处明显差异:
- Terraform 是纯粹的声明式工具(见上文),而 Ansible 则将声明式和程序式配置结合。 在程序式配置中,您可以指定步骤或精确方式,以用于部署基础架构,使其达到期望的状态。 程序式配置工作量 更大,但提供更高的控制权。
- Terraform 是开源的,而 Ansible 则是由 Red Hat 开发和销售。