「译文」什么是 Terraform?

本文最后更新于:2022年2月20日 晚上

👉️原文链接: https://www.ibm.com/cloud/learn/terraform

📝原文作者:IBM Cloud Education

本指南强调了您需要了解的关于 Terraform 的一切——一个允许程序员安全有效地构建、更改和管理基础设施版本的工具。

什么是 Terraform?

Terraform 是一个开源的「基础设施即代码」(IaC)工具,由 HashiCorp 创建

Terraform 是一种 声明性 编码工具,开发人员可以使用一种名为 HCL (HashiCorp 配置语言)的高级配置语言来描述运行应用程序所需的「终端状态」云或内部基础设施。然后,它生成一个达到最终状态的计划(plan),并执行该计划来提供基础设施。

由于 Terraform 使用了简单的语法,可以跨多个云和本地数据中心提供基础设施,并且可以安全有效地根据配置更改重新提供基础设施,因此它是目前最流行的基础设施自动化工具之一。如果您的组织计划部署混合云或多云环境,您可能希望或需要了解 Terraform。

为什么需要「基础设施即代码」(IaC)?

为了更好地理解 Terraform 的优势,首先要理解基础设施即代码 (IaC) 的优势。IaC 允许开发人员以一种使供应自动化、更快和可重复的方式对基础设施进行编码。它是敏捷和 DevOps 实践的关键组件,比如版本控制、持续集成和持续部署。

基础设施即代码可以帮助以下:

  • 提高速度:当您需要部署和 / 或连接资源时,自动化比手动导航界面更快
  • 提高可靠性: 如果您的基础设施很大,那么很容易以错误的顺序配置资源或提供服务。使用 IaC 时,资源总是按照声明的方式进行分配和配置。
  • 防止配置漂移: 当配置您的环境不再与实际环境匹配时,就会发生配置漂移。(请参阅下面的「不可变的基础设施」。)
  • 支持实验、测试和优化: 因为基础设施即代码使得提供新的基础设施变得更快更容易,你可以在不投入大量时间和资源的情况下进行和测试实验性的更改;如果您喜欢结果,您可以快速扩大新的基础设施的生产规模。

参见「什么是基础设施即代码?」仔细看看下面视频:

视频链接截图,可以通过原文链接观看

为什么选择 Terraform?

有一些关键原因,开发人员选择在其他基础设施上使用 Terraform 作为代码工具:

  • 开源:Terraform 得到了大量社区贡献者的支持,他们为平台构建插件。无论您使用哪种云提供商,都很容易找到插件、扩展和专业支持。这也意味着 Terraform 会快速进化,不断添加新的优点和改进
  • 平台无关: 这意味着您可以在任何云服务提供商中使用它。大多数其他 IaC 工具都是为单一云提供商而设计的。
  • 不可变基础设施 : 大多数基础设施即代码工具创建 可变 的基础设施,这意味着基础设施可以更改以适应中间件升级或新的存储服务器等更改。可变基础设施的危险在于配置漂移——随着更改的堆积,不同服务器或其他基础设施元素的实际供应与原始配置「漂移」得更远,使得错误或性能问题难以诊断和纠正。Terraform 规定是 不可变 的基础设施,这意味着随着环境的每次更改,当前配置将被替换为解释更改的新配置,并重新配置基础设施。更好的是,可以将以前的配置保留为版本,以便在必要或需要时支持回滚

Terraform 模块(Modules)

Terraform 模块是小型的、可重用的 Terraform 配置,用于一起使用多个基础设施资源。Terrform 模块非常有用,因为它们允许使用可重用的、可配置的结构来自动化复杂的资源。即使是编写一个非常简单的 Terraform 文件也会生成一个模块。一个模块可以调用其他模块(称为子模块 - child modules),这可以使组装配置更快、更简洁。模块也可以被多次调用,可以在相同的配置中,也可以在不同的配置中。

Terraform 供应商(Providers)

Terraform providers 是实现资源类型的插件。Providers 包含代表用户进行身份验证并连接到服务(通常来自公共云提供者)所需的所有代码。您可以为您使用的云平台和服务找到 providers,将它们添加到您的配置中,然后使用它们的资源来提供基础设施。Terraform 社区或个人组织开发和 / 或支持的 providers 几乎可以为所有主要的云提供商、SaaS 产品和更多服务提供服务。有关详细列表,请参阅 Terraform 文档(链接位于 IBM 之外)。

Terraform vs. Kubernetes

有时候,Terraform 和 Kubernetes 以及他们的实际工作之间会有混淆。事实是,它们不是替代方案,实际上是一起有效地工作。

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

另一方面,Terraform 是一个覆盖范围更广的基础设施代码工具,允许开发人员自动完成跨越多个公共云和私有云的基础设施。

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

Terraform vs. Ansible

Terraform 和 Ansible 都是作为基础设施即代码工具,但两者之间有几个显著的区别:

  • Terraform 纯粹是一个声明性工具(见上文),而 Ansible 将声明性和过程性配置结合在一起。在过程配置中,您可以指定将基础设施提供到所需状态的步骤或精确的方式。过程配置需要更多的工作,但它提供了更多的控制

  • Terraform 是开源的,Ansible 是由红帽公司开发和销售的。

Terraform vs. Crossplane

Crossplane - 比 Terraform 更先进的云基础架构管理平台?