Ansible 与 Terraform 对比:怎么选、怎么配合
Ansible 管配置(过程式 YAML、无 Agent、SSH 直达),Terraform 管供给(声明式 HCL、状态文件、多云)。两者不是竞争而是分工:Terraform 把基础设施建出来,Ansible 把系统配置好。本文讲清架构差异与协作模式。
直接回答:Ansible 与 Terraform 解决 IaC 的两个不同层面——Terraform 声明式供给云资源(VPC、虚拟机、数据库),Ansible 用有序任务结合声明式模块配置系统内部(装软件、改配置、部应用)。现代流水线的标准组合:Terraform 建基础设施 → 输出主机清单 → Ansible 接手配置。
Ansible:配置管理
- 有序任务与状态型模块:playbook 描述"按什么步骤达到什么状态"
- 无 Agent:SSH 直达目标机,零预装
- 强项:系统配置、应用部署、临时编排任务
Terraform:基础设施供给
- 声明式 HCL:描述"我要什么",引擎算出怎么达到
- 状态文件:记录资源现状,plan 预览变更、apply 执行
- 强项:多云资源供给、网络拓扑、资源生命周期管理
分工与协作
Terraform: 建 VPC → 起 3 台 ECS → 建 RDS → 输出 IP 列表
↓
Ansible: 拿到清单 → 装 Nginx/Docker → 部应用 → 配监控
可通过受控流水线将 terraform output -json 转成清单,或用云动态清单插件;二者不是自动连通,需做好敏感 output、凭证与状态文件保护。配置完成后应核对新主机是否进入预期清单、服务能否访问、采集器是否正常上报;不要把 apply 或 playbook 的退出成功当作运行检查的结果。 若流水线同时部署了观测云 DataKit,应先检查上报是否正常,并用已有的 HTTP 拨测验证业务入口。
什么时候单用一个
- 纯云资源管理(不开虚拟机内的箱):Terraform 就够
- 纯存量机器的配置统一(无云资源供给需求):Ansible 就够
- 一旦两者都要,别用一个硬撑另一个的活——Terraform 的 provisioner 只适合做交接引导,不是配置管理
常见问题(FAQ)
Q:Terraform 的 remote-exec 能替代 Ansible 吗?
A:不建议。provisioner 是"最后手段"设计——不提供状态型配置管理的完整模型;它仍有退出码和失败处理,是否使用由生命周期需求决定而非命令条数。
Q:小团队值得两个都上吗?
A:按需求引入:只管存量机器不必额外引入 Terraform;只用托管云资源也不一定需要 Ansible。新增工具会增加学习与维护成本。
Q:Pulumi 算哪一派?
A:Terraform 同派(供给层),差别在用通用编程语言写声明式定义。与 Ansible 的分工逻辑不变。
官方参考
本文依据官方文档整理,示例未在本文中进行运行验证。生产部署需按所用版本、权限和实际负载验证。