Terraform是一个开源的自动化资源编排工具。资源编排服务ROS(Resource Orchestration Service)为Terraform提供了托管的能力,您可以创建Terraform类型的模板和资源栈,编排阿里云、AWS或Azure的资源。Terraform功能兼容ROS API,您只需创建Terraform类型模板,即可调用ROS API实现相应功能。
使用限制
关于Terraform对ROS功能和资源的支持情况,请参见Terraform支持的功能和资源。
开发方式
建议您使用熟悉的开发方式编写和测试Terraform代码。您可以采用以下开发方式:
-
本地开发。
-
使用Terraform在线调试工具开发(仅支持阿里云)。
-
(推荐)使用ROS创建Terraform类型资源栈,然后根据需求继续创建或更新资源栈。更多信息,请参见创建Terraform类型资源栈、继续创建资源栈和更新资源栈。
通过ROS使用Terraform的优势
通过ROS使用Terraform相较直接使用Terraform CLI,增加了很多额外的能力,让用户拥有更好的体验,具体有以下几点:
-
和ROS模板一致的控制台体验
ROS 控制台提供了一致的用户体验,与ROS模板的管理方式相同,使用户能够在一个集中化的平台上管理所有资源。以下对比了通过ROS控制台和本地Terraform CLI部署同一Terraform模板的操作方式:
在 ROS 控制台的创建资源栈页面中,填写资源栈名称,选择地域(如华东1(杭州)),并在模板配置区域加载 Terraform 模板。
控制台会将 Terraform 模板中的变量自动转化为可视化参数配置表单,支持按需设置 VPC 配置、交换机、实例规格、安全组等资源参数,并提供下拉选项和默认值供选择。
$ terraform plan Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols: + create # alicloud_vpc.default will be created + resource "alicloud_vpc" "default" { + cidr_block = "10.0.0.0/8" + vpc_name = (known after apply) } Plan: 6 to add, 0 to change, 0 to destroy.$ terraform apply alicloud_vpc.default: Creating... alicloud_vpc.default: Creation complete after 6s [id=vpc-bp1...] alicloud_vswitch.default[0]: Creating... alicloud_vswitch.default[0]: Creation complete after 5s [id=vsw-bp1...] Apply complete! Resources: 6 added, 0 changed, 0 destroyed. -
支持参数/属性的动态查询和选择
-
支持动态查询参数可选值
-
支持同参数被多属性引用的综合查询
例如,在配置参数时,专有网络 VPC 和安全组等字段会自动展示当前地域下可用资源的下拉列表,支持根据已选参数动态筛选关联资源。
ROS可以在模板参数配置中指定
AssociationProperty以获取所选地域下对应的资源,指定AssociationPropertyMetadata对不同参数添加筛选条件,以便在控制台动态选择参数配置。配置完成后,各参数字段均可通过下拉列表直接选择已有资源,无需手动输入资源 ID。
-
-
根据模板询价
在部署前,ROS 可以根据您的 Terraform 模板自动计算并显示预计的成本,帮助您更好地进行预算规划。
ROS 会弹出费用明细对话框,按资源类型(如 ECS 实例、RDS 数据库实例)、规格、地域、数量和计费方式逐项列出预估费用,并在顶部汇总显示预付包月费用总额。
-
产品开通和角色检查
-
自动检查:ROS会自动检查Terraform模板中涉及的产品是否已开通,所需的角色和权限是否存在,确保部署前的准备工作完善。例如,若检测到 TransitRouter 等产品未开通,会弹出依赖检查对话框,提示异常项数量并提供开通链接,单击即可跳转至对应产品的开通页面。
-
提示引导:如果发现未开通的产品或缺失的角色,ROS会提供明确的提示和引导,帮助用户快速完成必要的配置。
单击开通链接后,将跳转至对应产品的开通页面(如转发路由器),勾选服务协议后即可完成产品开通。
-
-
风险检查
比如在删除资源(如安全组)时,ROS会自动检查可能带来的风险,帮助您避免潜在的问题。
例如,在删除资源栈时,系统会弹出删除资源栈对话框,顶部显示红色风控警告,风险提示区域列出存在依赖关系的资源(如安全组被 ECS 实例引用),用户需选择删除方式(保留资源或释放资源)并确认资源栈名称后才能执行删除操作。
-
支持模板版本管理和共享
ROS 支持对 Terraform 模板进行版本管理,可查看模板详情(模板 ID、共享状态、创建和更新时间),通过版本选择器切换不同模板版本,在线浏览模板内容(如 main.tf 文件的 HCL 代码),并可通过共享模板按钮将模板共享给其他用户,或直接单击创建资源栈进行部署。
-
标签和资源组传递
可将标签、资源组一次性传递给模板中所有资源。
应用场景
创建Terraform类型资源栈
如果您希望在多个云平台(例如AWS、Azure等)或非云平台上创建并管理资源,Terraform可以帮助您实现跨云平台的资源编排和管理,您可以通过创建Terraform类型资源栈统一管理不同云平台上的资源。具体操作,请参见创建Terraform类型资源栈。
创建Terraform类型模板
如果您希望在阿里云平台上创建并管理多云平台(AWS、Azure等)的资源,您可以在模板中定义多云平台的资源以及资源之间的依赖关系,方便您进行多云环境下的资源管理。具体操作,请参见创建Terraform类型模板。
模板结构
Terraform类型模板是资源编排服务ROS(Resource Orchestration Service)托管Terraform后支持的模板,用于编排阿里云、AWS或Azure的资源。您可以在模板中定义资源、参数以及资源间的依赖关系。更多信息,请参见Terraform类型模板结构。关于如何定义模板中的参数,请参见了解阿里云Terraform。
开发建议
资源编排为Terraform提供了托管能力,当您了解了Terraform和Terraform托管方式,需要开发Terraform代码并在ROS中使用时,可以采用以下建议。更多信息,请参见Terraform代码开发方式和建议。
-
细化变量定义。
-
建议指定Provider版本。
-
通过伪参数获取资源栈信息。
-
控制参数(变量)在控制台的输入方式。
-
建议使用Aliyun::Terraform-v1.0及其以上版本。
-
使用Metadata控制参数(变量)在控制台的显示。
-
把仅供本地使用的代码放入以.debug.tf结尾的文件。
-
不建议在.tf文件中声明阿里云(alicloud)Provider。
-
不建议使用.tfvars文件,而是通过ROS参数传递变量值。
Terraform模板示例
关于Terraform的更多模板示例,请参见Terraform模板示例。