跳到主要内容

Terraform 入门介绍

Terraform 是 HashiCorp 公司开发的开源基础设施即代码(Infrastructure as Code,IaC)工具。它允许你使用声明式配置语言来定义、预览和部署云基础设施,支持 AWS、Azure、Google Cloud、阿里云等主流云平台,以及 Kubernetes、Docker 等多种基础设施提供商。

什么是基础设施即代码

基础设施即代码(IaC)是一种通过代码来管理和配置基础设施的方法,而不是手动配置硬件或使用交互式配置工具。这种方式带来了以下优势:

  • 版本控制:基础设施配置可以像应用程序代码一样进行版本管理
  • 可重复性:相同配置可以在不同环境(开发、测试、生产)中重复使用
  • 协作:团队成员可以共同审查和修改基础设施配置
  • 自动化:基础设施的创建、更新和销毁可以完全自动化

Terraform 的核心概念

1. 声明式配置

Terraform 使用 HashiCorp Configuration Language(HCL)作为配置语言。与命令式编程不同,你只需要描述期望的最终状态,Terraform 会自动计算如何达到这个状态。

# 声明式配置示例:我需要一台 AWS EC2 实例
resource "aws_instance" "web" {
ami = "ami-0c55b159cbfafe1f0"
instance_type = "t2.micro"

tags = {
Name = "WebServer"
}
}

2. 执行计划(Plan)

在执行任何变更之前,Terraform 会生成一个执行计划,显示将要创建、修改或销毁的资源。这让你可以在应用变更前预览影响。

3. 资源图(Resource Graph)

Terraform 会构建所有资源的依赖关系图,并行创建没有依赖关系的资源,确保以正确的顺序创建资源。

4. 状态管理(State)

Terraform 使用状态文件来跟踪管理的资源及其属性。状态文件可以存储在本地,也可以存储在远程(如 S3、Terraform Cloud)。

Terraform 工作流程

Terraform 的基本工作流程包含三个主要步骤:

┌─────────────┐    ┌─────────────┐    ┌─────────────┐
│ Write │ -> │ Plan │ -> │ Apply │
│ 编写配置 │ │ 预览变更 │ │ 应用变更 │
└─────────────┘ └─────────────┘ └─────────────┘
  1. Write(编写):使用 HCL 编写基础设施配置
  2. Plan(计划):运行 terraform plan 预览将要执行的变更
  3. Apply(应用):运行 terraform apply 执行变更,创建或更新基础设施

Terraform 的主要特性

多平台支持

Terraform 支持超过 100 种基础设施提供商,包括:

  • 公有云:AWS、Azure、Google Cloud Platform、阿里云、腾讯云
  • 私有云:VMware vSphere、OpenStack
  • 容器编排:Kubernetes、Docker、Amazon ECS
  • SaaS 服务:GitHub、Datadog、Cloudflare

模块化设计

Terraform 支持将配置封装为可重用的模块,便于在多个项目或团队中共享基础设施模式。

# 使用模块
module "vpc" {
source = "terraform-aws-modules/vpc/aws"
version = "5.0.0"

name = "my-vpc"
cidr = "10.0.0.0/16"
}

状态管理

Terraform 通过状态文件跟踪基础设施的当前状态,支持:

  • 本地状态存储
  • 远程状态存储(S3、Azure Blob、GCS 等)
  • 状态锁定(防止并发修改)
  • 状态版本控制

工作区(Workspaces)

工作区允许你在同一配置下管理多个独立的环境(如开发、测试、生产),每个工作区有自己的状态文件。

Terraform vs 其他工具

特性TerraformAnsibleCloudFormationPulumi
类型声明式命令式声明式命令式/声明式
多云支持否(仅 AWS)
语言HCLYAMLJSON/YAMLPython/TypeScript/Go
状态管理内置内置内置
主要用途基础设施编排配置管理AWS 基础设施基础设施编排

适用场景

Terraform 特别适合以下场景:

  • 多云基础设施管理:需要在多个云平台管理资源的场景
  • 基础设施版本控制:希望将基础设施配置纳入版本控制系统
  • 自动化部署:需要自动化创建和销毁开发、测试环境
  • 基础设施标准化:需要在多个项目或团队中保持基础设施的一致性
  • 灾难恢复:通过代码快速重建整个基础设施

学习路径

本教程将按照以下路径帮助你掌握 Terraform:

  1. 环境搭建:安装 Terraform 并配置访问凭证
  2. 基础语法:学习 HCL 语言和基本配置结构
  3. 核心概念:理解 Provider、Resource、Variable、Output 等核心概念
  4. 状态管理:学习如何管理 Terraform 状态
  5. 模块开发:掌握模块的创建和使用
  6. 工作区:学习多环境管理
  7. 最佳实践:了解生产环境中的应用技巧

下一步

接下来,我们将开始 安装 Terraform 并配置环境,编写你的第一个基础设施配置。