📝 配置层 (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 CloudSaaS版本,提供协作和自动化功能
-
Terraform Enterprise企业级私有部署版本
-
Provisioners资源创建后的自定义配置脚本
-
Sentinel Policies基于策略的合规性检查
最佳实践
-
Module Registry公共和私有模块仓库
-
Version ConstraintsProvider和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集成
自动化流水线设计、安全实践、审批流程、多环境部署策略和回滚机制