了解阿里云Terraform
阿里云推荐使用 Terraform 作为 IaC 工具来管理云上基础设施。在开始使用前,先了解 Terraform 是什么、能做什么,以及如何与阿里云协同工作。
什么是 Terraform
Terraform 是 HashiCorp 开源的声明式 IaC 工具。“声明式”意味着只需在配置文件中描述资源的期望状态(例如“一台 2 核 4G 的 ECS 实例,位于华东 1 地域”),Terraform 自动处理 API 调用、依赖关系和执行顺序。
这与通过控制台操作的方式有本质区别:
控制台操作 | Terraform | |
操作方式 | 在界面上逐项点击和填写参数 | 在配置文件中描述资源的期望状态 |
执行过程 | 手动逐个创建资源,手动处理依赖顺序 | 自动解析依赖关系,自动完成创建 |
环境复制 | 重复操作,难以保证一致性 | 同一份配置文件可重复部署多套环境 |
变更记录 | 依赖操作审计日志 | 配置文件纳入版本控制(如 Git),变更可追溯、可回滚 |
团队协作 | 依赖文档和口头约定 | 配置文件可审查、可共享、可复用 |
Terraform 将基础设施管理从“手动操作”变为“编写和维护代码”,适合管理多个资源、多套环境或需要团队协作的场景。如果只是临时创建少量资源,控制台操作更直接。
Terraform 与阿里云
Terraform 通过 Provider 插件与云平台交互。每个云服务商提供各自的 Provider,将配置文件中的资源定义转化为对应平台的 API 调用。
阿里云是国内第一家与 Terraform 集成的云服务商,提供官方维护的 Terraform Provider(alicloud)。该 Provider 覆盖阿里云上的绝大多数资源类型,包括但不限于:
计算与容器:ECS 云服务器、ACK 容器服务、函数计算、弹性伸缩
网络:VPC 专有网络、负载均衡(SLB/ALB/NLB)、NAT 网关、云企业网
存储与数据库:OSS 对象存储、NAS 文件存储、RDS、PolarDB、Redis、MongoDB
安全与管理:RAM 访问控制、密钥管理、Web 应用防火墙
大数据与 AI:MaxCompute、PAI
Terraform 如何管理资源
Terraform 的核心逻辑是对比期望状态与实际状态,自动计算需要执行的操作。
整个过程分为三步:
编写:在配置文件中描述云资源及其属性,例如 ECS 的规格、镜像、所属网络等。
预览:Terraform 对比配置文件与实际资源状态,生成变更计划,列出将要创建、修改或删除的资源。资源发生实际变化之前,可以先审查这份计划。
执行:确认计划无误后,Terraform 通过阿里云 OpenAPI 自动完成所有操作,并记录资源的最新状态。
后续每次修改配置文件并重新执行时,Terraform 只处理差异部分——新增的资源创建、变更的属性更新、移除的资源销毁,未变更的资源不受影响。
使用 Terraform 的优势
执行前可预览:每次执行前,Terraform 生成变更计划,列出将要创建、修改或删除的资源,避免意外变更。
增量更新:只处理发生变化的部分,不重建未变更的资源。
多云统一管理:支持多个云平台的 Provider,可在同一套工作流中管理阿里云、AWS 等不同平台的资源。
模块化复用:将常用的资源组合(如 VPC + 子网 + 安全组)封装为模块,在不同项目和环境中复用。
状态持续追踪:通过状态文件持续记录每个资源与实际云资源的对应关系,确保管理的一致性。
常见问题
Terraform 是否收费?
Terraform 开源版免费。通过 Terraform 创建的云资源按阿里云标准计费,与控制台创建的资源计费规则相同。
使用 Terraform 需要编程基础吗?
不需要。Terraform 使用专用的 HCL(HashiCorp Configuration Language)配置语言,语法简洁,以声明方式描述资源属性,无需传统编程经验。如果希望免代码操作,可使用 Terraform Explorer 介绍通过图形界面生成和执行配置。
Terraform 操作对已有云资源有什么影响?
Terraform 只管理配置文件中定义的资源,不影响未纳入管理的已有资源。需要注意的是,Terraform 执行的创建、修改、删除操作直接作用于真实云资源,执行前建议审查变更计划。
已经在控制台创建的资源能纳入 Terraform 管理吗?
可以。通过 import 功能将已有资源导入 Terraform 管理范围,导入后编写对应的配置文件描述这些资源,即可通过 Terraform 统一管理。
通过 Terraform 管理的资源还能在控制台操作吗?
技术上可以,但不推荐。Terraform 通过状态文件追踪资源状态,在控制台手动修改会导致状态文件与实际状态不一致,下次执行时可能覆盖手动修改或产生冲突。建议 Terraform 管理的资源统一通过 Terraform 操作。
Terraform 和 ROS 有什么区别?
两者都是声明式 IaC 工具。Terraform 是开源的第三方工具,支持多云管理;ROS(资源编排服务)是阿里云原生服务,与阿里云控制台深度集成。需要多云管理或已有 Terraform 经验时推荐 Terraform;主要管理阿里云资源且倾向原生工具时可选择 ROS。详情参阅什么是资源编排服务。