Terraform 配置和脚本

已完成

在本单元中,我们将介绍 Terraform 配置和脚本。

为何要使用 Terraform?

作为基础结构管理员,你需要一个用于预配和管理 Azure 基础结构的工具。 你还想在描述 Azure 资源拓扑的配置文件中使用“基础结构即代码”。

HashiCorp Terraform 非常适用于跨云提供商部署基础结构。 它为开发人员提供了一致的工具来管理每个基础结构定义。

自动化基础结构管理

使用基于模板的 Terraform 配置文件,可以通过可重复且可预测的方式定义、预配和配置 Azure 资源。 此自动化具有以下几个优点:

  • 它降低了在部署和管理基础结构时发生人为错误的可能性。
  • 它多次部署同一模板来创建相同的开发、测试和生产环境。
  • 它通过按需创建降低了开发和测试环境的成本。

在应用基础结构更改之前了解它们

随着资源拓扑变得越来越复杂,可能很难理解基础结构更改的意义和影响。

使用 Terraform,你可以在应用基础结构更改之前对其进行验证和预览。 通过在开发过程的早期阶段了解建议的更改及其影响,团队成员可以更有效地开展协作。

Terraform 配置文件

配置文件会生成一个执行计划,以及该计划为达到所需状态而需要执行的操作。 然后,Terraform 可以构建所述的基础结构。 随着配置的更改,Terraform 可以确定更改的内容并创建增量执行计划。

Terraform 配置文件使用它们自己的配置语言(类似于 YAML),该语言设计用于对基础结构进行说明。

可以使用 HashiCorp 配置语言 (HCL) 语法创建配置文件。 HCL 是声明性的,描述的是预期目标,而不是用于实现该目标的步骤。 HCL 语法允许你指定云提供商(例如 Azure)和构成云基础结构的元素。

配置文件存储为扩展名为 .tf 的纯文本文件。 它们分别是:

  • main.tf:(必需)定义主结构,直接部署完整基础结构,或通过调用模块来这么做
  • outputs.tf:标识 Terraform 模块的每个返回值
  • variables.tf:定义 main.tf 中的变量,无论它们是否是必需的

Terraform 配置结构的屏幕截图。

模块

可以将 Terraform 资源分组到一个模块中,这将创建更大的配置单元。 这些模块是存储在单个目录中的配置文件集。 简单配置由包含一个或多个 .tf 文件的单个目录构成。

模块提供了许多好处。 例如,模块具有以下特点:

  • 帮助你组织项目。
  • 封装复杂性。
  • 允许重用常见任务。
  • 提供一致性并确保你遵循良好的做法。

main.tf 文件

main.tf 文件包含模块的配置详细信息的主集。 此文件通常称为 Terraform 计划。 Terraform 计划指定所需的基础结构资源。 可以将此文件命名为所需的任何名称,但通常将其命名为 main.tf。

Terraform 工作流

Terraform 建议将其核心“初始化”、“计划”和“应用”工作流用于自动化。 此工作流针对新的和更新后的 Git 拉取请求运行 Terraform 的所有 CI/CD 操作。

Terraform 工作流的示意图,其中显示了核心操作:“初始化”、“计划”和“应用”。

此工作流的核心操作包括:

  • 初始化:使用 Terraform 配置文件初始化工作目录
  • 计划:制定计划,用于更改资源以匹配当前配置
  • 应用:应用计划所描述的更改

状态

借助“状态”,Terraform 就可以知道要添加、更新或删除哪些 Azure 资源。

Terraform 使用状态来创建计划并对基础结构进行更改。 在执行任何操作之前,Terraform 会进行刷新,以使用实际基础结构来更新状态。

状态默认存储在名为“terraform.tfstate”的本地文本文件中。 Terraform 使用你在模块中定义的工作流操作来管理此文件。

你还可以远程存储状态,这是一种在团队环境中效果更佳的方法。 若要详细了解如何远程管理状态,请参阅本模块末尾的“摘要”单元。

后续步骤

在下一个单元中,我们将讨论如何结合使用 Terraform 与 GitHub Actions 或 Azure Pipelines 来预配应用程序并对其进行部署。