3. Terraform 安装与配置

在开始使用 Terraform 管理基础设施之前,必须完成安装、环境配置和基础命令熟悉。本章将引导你完成从下载到编写第一个 .tf 文件的完整流程,为后续构建 CI/CD 自助服务管道打下坚实基础。

3.1 下载与安装

Terraform 以单一二进制文件分发,支持主流操作系统。推荐从 HashiCorp 官方发布页面 获取最新稳定版本。

操作系统 安装方式 命令 / 步骤
macOS (Homebrew) 包管理器 brew tap hashicorp/tap && brew install hashicorp/tap/terraform
Windows (Chocolatey) 包管理器 choco install terraform
Linux (Ubuntu/Debian) APT 仓库 wget -O- https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg
sudo apt-add-repository "deb [arch=$(dpkg --print-architecture)] https://apt.releases.hashicorp.com $(lsb_release -cs) main"
sudo apt-get update && sudo apt-get install terraform
手动安装 (所有平台) 下载 ZIP 下载对应平台 ZIP → 解压 → 将 terraform 二进制文件放入 PATH 目录
💡 版本管理建议: 在 CI/CD 环境中,建议使用 tfenv (macOS/Linux) 或 tenv (Windows) 管理多个 Terraform 版本,确保管道与本地开发环境版本一致。

3.2 环境变量设置

Terraform 通过环境变量控制行为、配置 Provider 认证以及传递敏感信息。以下是最核心的变量:

  • TF_VAR_<变量名>:在命令行或 CI/CD 中注入输入变量,避免硬编码。
  • TF_LOG:设置日志级别(TRACE、DEBUG、INFO、WARN、ERROR),调试时常用 TF_LOG=DEBUG。
  • TF_WORKSPACE:指定工作区名称,用于多环境隔离。
  • TF_IN_AUTOMATION:设置为 true 时,Terraform 会调整输出格式,避免交互式提示,适合 CI/CD 管道。
  • AWS_ACCESS_KEY_ID / AWS_SECRET_ACCESS_KEY:云 Provider 认证凭据(以 AWS 为例)。
⚠️ 安全警告: 永远不要将 TF_VAR_ 或云凭据硬编码在 .tf 文件中。在 CI/CD 中应使用 Secret 管理服务(如 GitHub Actions Secrets、GitLab CI Variables、HashiCorp Vault)注入环境变量。

3.3 CLI 基础命令

Terraform CLI 遵循 terraform <子命令> [选项] 结构。掌握以下命令即可完成日常操作:

命令 功能 典型使用场景
terraform init 初始化工作目录,下载 Provider 插件和模块 每次克隆仓库或添加新 Provider 后执行
terraform validate 检查配置文件语法和内部一致性 编写代码后快速验证
terraform plan 预览将要执行的操作,生成执行计划 CI/CD 中作为审核步骤
terraform apply 执行计划,创建/更新/删除资源 部署基础设施
terraform destroy 销毁所有由当前配置管理的资源 清理临时环境或测试资源
terraform fmt 自动格式化 .tf 文件为标准风格 代码审查前统一格式
terraform output 查看定义的输出变量值 CI/CD 中获取资源属性(如 IP 地址)
terraform state list 列出当前状态文件中管理的所有资源 排查状态与配置不一致问题
🔧 CI/CD 管道核心命令链:
terraform init -input=false → terraform validate → terraform plan -out=tfplan → terraform apply tfplan → terraform output -json

3.4 Terraform 配置文件结构 (.tf 文件)

Terraform 使用 HashiCorp Configuration Language (HCL) 编写配置文件,文件扩展名为 .tf。一个典型的 Terraform 项目包含以下文件结构:

project-root/
├── main.tf          # 核心资源定义
├── variables.tf     # 输入变量声明
├── outputs.tf       # 输出值定义
├── terraform.tfvars # 变量赋值(敏感值应使用 .auto.tfvars 或环境变量)
├── providers.tf     # Provider 配置(云平台、版本)
└── versions.tf      # Terraform 和 Provider 版本约束

每个 .tf 文件由 块 (Block) 和 参数 (Argument) 组成。以下是各文件的核心内容示例:

providers.tf — 定义云平台连接

terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 5.0"
    }
  }
}

provider "aws" {
  region = var.aws_region
}

main.tf — 声明基础设施资源

resource "aws_instance" "web_server" {
  ami           = var.ami_id
  instance_type = var.instance_type

  tags = {
    Name        = "CI-CD-Demo-Server"
    Environment = var.environment
  }
}

variables.tf — 定义可复用输入

variable "aws_region" {
  description = "AWS 部署区域"
  type        = string
  default     = "us-east-1"
}

variable "instance_type" {
  description = "EC2 实例规格"
  type        = string
}

outputs.tf — 暴露资源属性

output "instance_public_ip" {
  description = "Web 服务器的公网 IP"
  value       = aws_instance.web_server.public_ip
}
📁 文件组织最佳实践: 在 CI/CD 自助服务场景中,建议按环境拆分目录(如 envs/dev/、envs/prod/),每个环境目录内包含独立的 terraform.tfvars 和 backend.tf,实现配置与环境的完全解耦。
Terraform 配置文件结构与执行流程 .tf 配置文件 main.tf (资源定义) variables.tf (输入变量) outputs.tf (输出值) providers.tf (Provider) terraform.tfvars (赋值) CLI 执行流程 terraform init terraform validate terraform plan terraform apply terraform destroy 环境变量 & 状态 TF_VAR_* (变量注入) TF_LOG (调试级别) TF_IN_AUTOMATION terraform.tfstate .terraform.lock.hcl 状态文件不提交 Git terraform init 内部流程 读取 .tf 文件 解析 Provider 需求 下载 Provider 插件 初始化状态后端 生成 .terraform.lock.hcl 创建 .terraform 目录 ✅ init 完成

3.5 验证安装与快速测试

完成安装后,执行以下命令验证环境:

# 检查版本
terraform --version

# 创建一个测试目录
mkdir terraform-test && cd terraform-test

# 创建最小配置文件
cat > main.tf <<EOF
terraform {
  required_version = ">= 1.5"
}

resource "null_resource" "hello" {
  provisioner "local-exec" {
    command = "echo 'Terraform 安装配置成功!'"
  }
}
EOF

# 初始化并应用
terraform init
terraform apply -auto-approve
✅ 验证成功标志: 终端输出 Terraform 安装配置成功!,且 .terraform 目录和 .terraform.lock.hcl 文件已生成。

3.6 常见安装问题与排查

问题现象 可能原因 解决方案
command not found: terraform 二进制文件未加入 PATH 将 Terraform 所在目录添加到 ~/.bashrc 或 ~/.zshrc 的 PATH 中
Error: Inconsistent dependency lock file .terraform.lock.hcl 与当前 Provider 版本不匹配 删除 .terraform.lock.hcl 并重新执行 terraform init
Error: No valid credential sources found 云 Provider 认证环境变量未设置 检查 AWS_ACCESS_KEY_ID 等变量是否已导出,或配置 ~/.aws/credentials
Error: Failed to query available provider packages 网络无法访问 registry.terraform.io 配置 HTTP 代理或使用 terraform providers mirror 离线同步 Provider
⚠️ CI/CD 环境特别提醒: 在管道中执行 terraform init 时,务必添加 -input=false 和 -upgrade=false 参数,避免因交互式输入或意外升级 Provider 导致管道挂起或行为不一致。