跳至主要内容

什么是 Terraform?从基础设施即代码开始入门

阅读我们的分步初学者指南,了解如何使用 Terraform 高效自动化并管理您的 Azure、AWS 和 Google Cloud 基础设施。
· 10分钟 阅读

使用 AI 探索

基础设施即代码(Infrastructure as Code,IaC)是一种通过代码来自动化配置与管理基础设施的方式。虽然可以通过物理硬件配置和交互式配置工具来交付基础设施,但 IaC 具备诸多优势,例如版本控制、可重复性和可扩展性。在众多 IaC 工具中,Terraform 是其中的佼佼者。它由 HashiCorp 于 2014 年推出,现已被全球超过 50 万家组织使用。下面我们来深入了解 Terraform 的工作原理,以及如何将其用于现代 IT 运维。

在开始学习 Terraform 之前,需要说明的是:至少熟悉一家主流云服务提供商(AWS、Azure、Google Cloud 等)是前提条件,因为 Terraform 用于管理云基础设施。如果您是云计算新手,可以先学习我们的 Understanding Cloud Computing 课程打下坚实基础。

什么是 Terraform?

Terraform 是一款开源工具,允许您使用高级配置语言来定义基础设施组件及其关系。

在 Terraform 具备可读性的配置文件中,您可以声明基础设施的目标状态,Terraform 会自动计算如何到达该状态。这些文件可以进行版本管理、共享与复用,从而以一致的方式管理您的基础设施,从计算与存储资源到 DNS 和 SaaS 功能。

Terraform 可用于多种云提供商、多云架构以及本地环境。

Terraform 的关键特性

让我们更近一步,了解使 Terraform 脱颖而出的核心要点:

HashiCorp 配置语言

Terraform 使用一种名为 HashiCorp 配置语言(HCL)的高级语言,专为定义基础设施即代码而设计。高级配置语言采用声明式语法,相较于底层脚本与手动配置,更抽象也更易用。您可能已经在 YAML 或 JSON 文件中接触过类似的高级语言。

HCL 采用块结构,每个嵌套块代表资源及其配置。资源会以名称和属性显式定义。

resource "aws_instance" "example" {
  ami           = "ami-123456"
  instance_type = "t2.micro"
}

执行计划

在定义好基础设施的目标状态后,Terraform 会生成一份执行计划。该计划会列出 Terraform 为达成该状态所需采取的步骤,便于您在应用之前审查变更。应用前检查计划可以避免不必要的修改,例如误删资源。

状态管理

Terraform 维护一个状态文件,用于自动跟踪您当前的基础设施状态,并在决定需要进行哪些变更时作为权威依据。默认情况下,该文件本地存储,名称为 terraform.tfstate。

提供商

提供商是与云平台及其他服务的 API 交互的插件,允许 Terraform 管理各类资源。官方提供商由 HashiCorp 及其可信合作伙伴(如 AWS、Azure、Google Cloud、Github、Datadog 等)开发和维护。社区也有大量插件,可在 Terraform Registry 或 Github 上找到。

资源图

Terraform 会构建一张资源图,展示基础设施中的资源及其之间的关系。该图帮助 Terraform 有效生成计划、处理资源之间的依赖关系,并确保以正确的顺序创建、更新和删除资源。这张图也有助于可视化您的基础设施,并理解您计划改动所带来的影响。

Example Terraform Resource Graph, showing AWS resources and the dependency relationships between them

示例资源图。来源:HashiCorp 文档

Terraform 入门

让我们一起走完第一个 Terraform 工作流。如果您对 DevOps 或云计算尚不熟悉,建议先学习我们的 Understanding Cloud Computing 和 Introduction to DevOps 课程,再继续往下。

安装与设置

在本教程中,我们将于 AWS 上创建资源。如果您想跟着操作但尚无账户,请前往 AWS 注册。

  1. 从官方网站下载 Terraform。选择适用于您操作系统的二进制文件,并按照安装说明进行安装。
  2. 安装完成后,打开一个新的终端窗口,运行 terraform -version 以确认安装成功。
  3. 安装 AWS CLI
  4. 在终端中运行 aws configure 配置 AWS CLI。系统将提示您输入访问密钥 ID、秘密访问密钥、默认区域和默认输出格式。Terraform 应能自动访问这些配置。

第一个 Terraform 配置

创建一个新目录和您的第一个配置文件。我们将其命名为 main.tf,并告诉 Terraform 我们要创建一个 AWS EC2 实例。使用 HCL 编写的代码如下:

provider "aws" {
  region = "us-west-2"
}

resource "aws_instance" "example" {
  ami           = "ami-0c55b159cbfafe1f0"
  instance_type = "t2.micro"
}

初始化项目

现在,通过运行以下命令来初始化 Terraform 项目:

$ terraform init

该命令仅需运行一次,会下载所需的提供商插件。后续变更无需再次运行。

Plan

接下来我们要生成执行计划。请记住,计划会突出 Terraform 为达到目标状态所需进行的更改(在此示例中为一个正在运行的 EC2 实例)。运行:

$ terraform plan

您应当会看到类似如下的输出:

Terraform will perform the following actions:

  # aws_instance.example will be created
  + resource "aws_instance" "example" {
      + ami                           = "ami-0c55b159cbfafe1f0"
      + instance_type                 = "t2.micro"
      ...
    }

Plan: 1 to add, 0 to change, 0 to destroy.

Apply

我们已经审查了计划,现在决定执行它并交付资源。在终端中运行:

$ terraform apply

系统会要求您确认操作。输入“yes”以继续。

Do you want to perform these actions? 
Terraform will perform the actions described above. 
Only 'yes' will be accepted to approve. 
Enter a value: yes 

 随后您应当会看到如下输出:

aws_instance.example: Creating... 
aws_instance.example: Still creating... [10s elapsed] aws_instance.example: 
Creation complete after 15s [id=i-0abcdef1234567890] 

Apply complete! Resources: 1 added, 0 changed, 0 destroyed.

 恭喜,您已使用 Terraform 在 AWS 上交付了第一个 EC2 实例!

使用 Terraform 的优势

我们之前提到,使用 Terraform 带来诸多好处,例如一致性与可重复性,以及通过执行计划降低人为错误率。

其他优势包括:

  • 快速交付:Terraform 可以并行创建和更新资源,这对于快速搭建开发、测试和预发布环境尤为有用。
  • 提升协作:与 Git 等版本控制系统配合使用,Terraform 能大幅提升基础设施管理的协作与透明度。变更可以像应用代码一样被审查、批准和追踪。
  • 高效灾难恢复:如果出现问题,Terraform 可以使用同一套配置文件,从零开始快速重建整套基础设施。
  • 社区支持:Terraform 倡导使用模块(module),即可复用的配置,能够在基础设施管理中推广最佳实践。Terraform 还拥有活跃的社区与庞大的提供商和模块生态,这意味着无论您的技术栈多么小众,通常都能找到合适的支持。

Terraform 的常见用例

无论您是构建数据管道的数据工程师,还是希望将解决方案部署到生产环境的数据科学家,Terraform 都是满足基础设施管理需求的优秀工具。以下是一些常见用例:

多云管理

跨多个云提供商管理基础设施并不容易。Terraform 允许您用一套工具做到这一点。此外,Terraform 还能管理本地资源,非常适合在混合环境中运营的组织。

CI/CD 工作流

Terraform 能很好地融入 CI/CD 工作流,这意味着您可以将基础设施的部署纳入软件交付流程。您也可以按需自动创建和销毁预览、开发、测试或预发布环境。

Kubernetes 集群

Terraform 可以管理不同云提供商上的 Kubernetes 集群,如 AWS(EKS)、Azure(AKS)或 GCP(GKE)。这包括搭建所需的底层基础设施、管理集群内的 Kubernetes 资源,以及根据负载需求扩缩集群。

Terraform 与其他 IaC 工具对比

其他流行的 IaC 工具包括 Ansible、Chef、Puppet 和 AWS CloudFormation。每种工具都有各自的长处与短板。请看下表:

FeatureTerraformAnsibleChefPuppetCloudFormation
Open SourceYesYesYesYesNo
Declarative SyntaxYesNoNoYesYes
Multi-Cloud SupportYesYesYesYesNo, AWS only
State ManagementYesNoNoYesYes
Execution PlansYesNoNoNoNo
Dependency ManagementYesLimitedLimitedYesYes

正如我们所见,尽管这些工具各有强大之处,但 Terraform 以其全面的功能集脱颖而出。当然,这份清单并不详尽,而且每种工具会根据需求服务于略有不同的用例。例如,Ansible 的过程式特性非常适合配置管理与临时性任务。

结语

在过去 10 年里,Terraform 帮助成千上万家组织管理其 IT 基础设施。凭借其声明式方法、自动化能力以及对多云环境的支持,Terraform 已成为最受欢迎的 IaC 工具之一。随着云的持续普及,它无疑将继续在基础设施管理领域扮演重要角色。

现在,您已经了解了 Terraform 的基础知识,可以进一步探索更高级的配置和真实场景。前往 HashiCorp Terraform 教程,学习如何用 Terraform 完成常见任务与用例,或查阅我们的博文 2024 年 14 款必备数据工程工具,了解 Terraform 在数据工程师工具箱中的定位。

Marie Fayard

作者

Marie Fayard

我是一名具有产品思维的技术负责人,专注于帮助早期初创公司从首个原型成长到实现产品与市场匹配,并持续向前发展。我对人们如何使用技术充满好奇,热爱与创始人及跨职能团队紧密合作,将大胆的想法变为现实。不在打造产品的时候,我会在世界的新角落寻找灵感,或在瑜伽馆放松减压。

常见问题解答

Terraform 适合小型项目吗,还是主要用于企业级场景?

无论项目规模大小,Terraform 都非常有用!无论您需要管理 5 个资源还是 1000 个,都会切实感受到它带来的益处。

使用 Terraform 需要多少钱?

Terraform 是开源且可免费使用的,但请注意,您的云提供商会对通过 Terraform 交付和管理的资源向您收费。

Terraform 能管理数据库和其他有状态服务吗?

可以。Terraform 能管理数据库和其他有状态服务。您可以在 IaC 文件中定义实例、集群和相关配置。

Terraform 如何在配置文件中处理密钥与敏感信息?

Terraform 鼓励以最佳实践处理机密信息,支持使用环境变量、加密变量,并可与 HashiCorp Vault 或 AWS Secrets Manager 等密钥管理服务集成。

主题