🚀 Terraform知识图谱

Infrastructure as Code 核心概念

📝 配置层 (Configuration Layer)

📄
Configuration Files

.tf, .tfvars

📥
Variables

输入参数

🔄
Locals

本地值计算

📤
Outputs

输出值

⬇️

🧩 抽象层 (Abstraction Layer)

📦
Modules

可重用配置块

🔌
Providers

API接口定义

🔍
Data Sources

查询现有资源

⬇️

🏗️ 资源层 (Resource Layer)

🏢
Resources

实际基础设施对象

🔗
Dependencies

隐式/显式依赖

⬇️

⚙️ 执行层 (Execution Layer)

📊
DAG Analysis

依赖图构建

📋
Plan Phase

执行计划生成

🚀
Apply Phase

实际执行变更

⬇️

💾 存储层 (Storage Layer)

📊
State File

资源状态记录

☁️
Backend

远程状态存储

🔒
State Lock

并发保护

核心工作流程

1
Init 初始化

下载Providers和Modules
配置Backend

2
Plan 规划

构建依赖图DAG
生成执行计划

3
Apply 应用

按照DAG顺序
执行资源变更

4
State 状态

更新状态文件
记录实际状态

⚔️ Terraform vs Ansible 技术对比
Terraform
  • 基础设施即代码 (IaC)
  • 声明式配置
  • 状态管理和依赖追踪
  • 多云提供商支持
  • 资源生命周期管理
  • Plan-Apply 工作流
Ansible
  • 配置管理和自动化
  • 过程式执行
  • 无代理架构
  • 应用部署和配置
  • 任务编排和自动化
  • Playbook 工作流
对比维度 Terraform Ansible
主要用途 基础设施创建和管理 配置管理和应用部署
配置方式 声明式 (What) 过程式 (How)
状态管理 有状态 (State File) 无状态
幂等性 内置支持 需要编写idempotent任务
学习曲线 中等 (HCL语法) 较低 (YAML)
适用场景 云资源创建、网络拓扑 软件安装、服务配置
组合使用 Terraform创建基础设施 → Ansible配置应用和服务
🏗️ 基础概念

核心组件

  • Provider
    定义目标环境接口,如AWS、Azure、Docker
  • Resource
    实际管理的基础设施对象
  • Data Source
    查询现有资源信息,只读不修改
  • Module
    可重用的资源配置包

配置元素

  • Variables
    输入参数,支持默认值和类型约束
  • Outputs
    暴露资源属性给外部使用
  • Local Values
    本地计算和复用的中间变量
🔗 依赖管理

依赖类型

  • 隐式依赖
    通过引用其他资源属性自动建立
  • 显式依赖
    使用depends_on强制指定依赖关系
  • DAG (有向无环图)
    Terraform根据依赖关系构建执行顺序

高级特性

  • Count & For Each
    批量创建资源的不同方式
  • Dynamic Blocks
    动态生成配置块内容
  • Conditional Expressions
    基于条件的资源配置
💾 状态管理

状态文件

  • terraform.tfstate
    记录Terraform管理资源的当前状态
  • Remote Backend
    将状态文件存储在S3、Consul等远程存储
  • State Locking
    防止并发修改导致状态不一致
  • Workspace
    管理多环境的状态隔离

状态操作

  • State Migration
    在不同backend之间迁移状态
  • Import
    将现有资源导入Terraform管理
  • Refresh
    同步实际资源状态到状态文件
🔧 企业特性

高级功能

  • Terraform Cloud
    SaaS版本,提供协作和自动化功能
  • Terraform Enterprise
    企业级私有部署版本
  • Provisioners
    资源创建后的自定义配置脚本
  • Sentinel Policies
    基于策略的合规性检查

最佳实践

  • Module Registry
    公共和私有模块仓库
  • Version Constraints
    Provider和Module版本锁定
  • Terraform Testing
    配置验证和集成测试
⚡ 核心命令
terraform init
初始化工作目录,下载providers和modules
terraform plan
生成执行计划,预览将要进行的更改
terraform apply
执行计划,创建或修改基础设施
terraform destroy
删除Terraform管理的所有资源
terraform validate
验证配置文件语法和逻辑
terraform import
导入现有资源到Terraform状态
terraform state
状态文件操作命令集合
terraform workspace
工作区管理,支持多环境
面试核心考点
💾
状态管理精通
深度理解Remote Backend配置、状态锁定机制、状态文件结构和安全性实践
🔗
依赖关系分析
能够分析复杂的资源依赖图,理解并行执行和串行执行的场景和优化策略
📦
模块设计原则
模块化设计思路、版本管理、参数传递、输出设计等企业级最佳实践
🌍
多环境管理
Workspace vs 目录结构 vs Git分支策略的优劣对比,环境隔离最佳实践
🔧
故障排查能力
常见错误处理、状态不一致修复、资源导入、循环依赖解决等实战经验
🚀
CI/CD集成
自动化流水线设计、安全实践、审批流程、多环境部署策略和回滚机制