ROS Terraform 托管服务与原生 Terraform 对比:选择最适合你的 IaC 工具

简介: 本文详细介绍了阿里云资源编排服务(ROS)提供的Terraform托管服务,对比了ROS与Terraform的原生能力,帮助用户根据需求选择合适的IaC工具。

1. 引言

本文将详细介绍阿里云资源编排服务(Resource Orchestration Service 简称 ROS) 提供的 Terraform 托管服务,并对比 ROS 与 Terraform 的原生能力,帮助用户根据自身需求选择合适的 IaC 工具。

2. 名词解释

  • ROS:是阿里云一方的 IaC 工具,基于 IaC 理念的自动化部署服务。ROS 提供了 Terraform 托管服务,用户可以直接在 ROS 控制台使用 Terraform 模板进行部署。
  • Terraform:由 HashiCorp 开发的基础设施即代码( IaC)工具,支持多云环境,可以管理阿里云、AWS、Azure 等多个云提供商的资源。


ROS 与 Terraform 原生能力的详细对比,请见附录。

3. ROS 对 Terraform 的支持

ROS 提供了 Terraform 托管服务,因此用户可以直接在 ROS 中使用 Terraform 模板进行部署。

通过 ROS 使用 Terraform 相较直接使用 Terraform CLI,增加了很多额外的能力,让用户拥有更好的体验,具体有以下几点:

  1. 和 ROS 模板一致的控制台体验
  • 统一界面:ROS 控制台提供了一致的用户体验,与 ROS 模板的管理方式相同,使用户能够在一个集中化的平台上管理所有资源。下图中展示了在 ROS 控制台和本地 Terraform CLI 中部署同一个 Terraform 模板的对比图:





  • 可视化操作:ROS 提供了一种直观的拖拽方式,让用户能够轻松构建云上应用架构。目前,ROS 支持通过可视化界面生成对应的 ROS 模板进行资源的部署,这种方式有效降低了用户学习和使用 IaC 工具的门槛。近期,ROS 可视化编辑器将进一步增强,新增根据用户设计的架构图自动生成对应的 Terraform 模板的能力,为用户提供多种资源部署管理的方式。



  1. 支持参数/属性的动态查询和选择

ROS 可以在模板参数配置中指定 AssociationProperty 以获取所选地域下对应的资源,指定 AssociationPropertyMetadata 对不同参数添加筛选条件,以便在控制台动态选择参数配置


  1. 根据模板询价:在部署前,ROS 可以根据您的 Terraform 模板自动计算并显示预计的成本,帮助您更好地进行预算规划。支持询价的 Terraform 资源可参考文档:Terraform 支持的功能和资源


  1. 产品开通和角色检查
  • 自动检查:ROS 会自动检查 Terraform 模板中涉及的产品是否已开通,所需的角色和权限是否存在,确保部署前的准备工作完善。


  • 提示引导:如果发现未开通的产品或缺失的角色,ROS 会提供明确的提示和引导,帮助用户快速完成必要的配置。


  1. 风险检查:比如在删除资源(如安全组)时,ROS 会自动检查可能带来的风险,帮助您避免潜在的问题。



  1. 支持模板版本管理和共享

image.png


  1. 标签和资源组传递:可将标签、资源组一次性传递给模板中所有资源。支持标签传递的 Terraform 资源可参考文档:Terraform 支持的功能和资源

4. Terraform 托管服务的限制

相比于本地 Terraform CLI,ROS 提供的 Terraform 功能由于安全原因设定了一些限制,主要限制如下:

  1. 只允许特定可信的Provider:只允许使用云厂商官方的provider,如alicloud、AWS、Azure等
  2. 对可能造成危害的函数方法做了强限制例如能够执行任意命令或访问敏感数据的一些功能函数,如Provisioner功能
  3. 文件读取路径校验:只能允许用户读取自己传入的文件路径,这样做可以防止恶意用户读取系统中的敏感文件或目录,从而保护系统的安全性和隐私


在 2023 年 8 月 10 日,HashiCorp 将 Terraform 的许可证从 MPL 切换为商业源代码许可证 (v1.1)(BSL)。BSL的目标是限制商业化使用,可以复制修改,但是不允许商业用途,导致集成了Terraform的产品会受到影响。

为了保持 Terraform 的开源,Gruntwork、Spacelift 等人提出了 OpenTofu 计划,创建了一个名为 OpenTofu 的 Terraform 分支,来实现真正意义上的开源 Terraform。


目前 ROS 提供的 Terraform 托管服务版本为 Terraform v1.5.7(MPL 2.0许可下的最后一个官方版本)。

近期 ROS 会逐步升级到 OpenTofu 的最新版本 v1.8,以支持 Terraform 最新的功能和特性。

5. IaC 选型建议

针对不同的云资源部署场景,选择合适的部署方式才能达到事半功倍的效果。

以下场景推荐用户选择 ROS 提供的 Terraform 托管服务:

  1. Terraform 入门体验:可视化的界面能够让小白更快体验的 IaC 工具的乐趣,界面化的直观操作可以显著降低学习曲线。
  2. 对部署成功率要求较高的场景:Terraform 部署时需要动态地进行参数查询和选择,确保部署不会因为库存、资源属性不正确等问题失败。
  3. 需要对成本预估和预算规划:在部署前,ROS 可以根据 Terraform 模板自动计算并显示预计的成本,帮助用户更好地进行预算规划。
  4. 成熟的 Terraform 方案:一些经过验证的 Terraform 模版可以沉淀为 ROS 的一键部署方案,使得用户能够快速体验和应用这些方案。

ROS 的Terraform 托管服务提供了对阿里云的原生支持,省去了用户下载、安装、配置 Terraform 的繁琐步骤,具有完善的模版管理系统,为用户提供了更加安全、成熟、高效的资源管理方式,是企业实现基础设施自动化管理的理想选择。


以下场景推荐用户直接使用本地 Terraform CLI:

  1. Terraform 深入学习:本地 Terraform CLI 能够让用户更快掌握 Terraform 知识,通过本地快速调试加速学习过程。
  2. 多云环境管理:如果需要管理多个云提供商(如 AWS、Azure、Google Cloud 和阿里云)的资源,本地 Terraform CLI 是更好的选择。
  3. 高级定制和特殊功能需要:如果需要用到 Provisioner功能Backend功能时,需要使用本地 Terraform CLI。

6. 参考文献

7. 附录

7.1 ROS 与 Terraform 的横向对比

注1:白底为核心能力,灰底为增强能力

注2:数据截止至 2024.10.31

图例:

✅ 支持 ☑️ 部分支持 ❌ 不支持

ROS

Terraform

资源覆盖度

  • 100+ 产品
  • 600+ 普通资源
  • 通用资源包
  • 兼容 Terraform 阿里云、Azure、AWS 的所有资源
  • 支持阿里云、AWS、Azure、GCP等 4000+ Provider
  • 其中,阿里云资源:
    • 100+ 产品 
    • 800+ 普通资源

    产品开通

    产品开通&角色检查

    自动检查产品开通状态及角色权限

    生命周期管理

    • 创建、更新、删除
    • 取消进行中的操作
    • 继续操作
    • 失败回滚
    • 创建、更新、删除
    • 取消进行中的操作
    • 继续操作

    界面

    • Terraform Cloud 提供 UI
    • 开源工具如 gaia提供 UI
    • Cloudcraft针对 AWS

    询价

    Terraform Cloud提供费用估算能力,支持AWS、Azure、GCP但不支持阿里云

    可视化参数/属性动态查询和选择

    • 支持动态查询参数(被资源属性引用)可选值
    • 支持同参数被多属性引用的综合查询
    • 支持可视化界面参数和属性的动态选择

    ☑️

    支持 data source 动态查询参数

    但不支持可视化参数的选择

    预校验

    • 基本校验(如常见属性的校验)
    • 库存综合校验
    • Quota 综合校验

    • 基本校验(如常见属性的校验)
    • 库存综合校验
    • Quota 综合校验

    语法能力

    相比ROS提供多的语法能力,比如:

    模板/架构RAM策略查询

    • 支持根据 ROS、Terraform 模板生成 RAM 策略
    • 支持检查用户是否具备上述权限

    风险检查

    支持检查删除资源(如安全组)时可能造成风险

    可视化架构

    支持根据模板生成架构图,也支持拖拽架构图生成模板

    但不支持对 Terraform 模板的可视化

    • terraform graph 命令生成静态架构图
    • 开源项目 Blast Radiusinframap、生成静态架构图
    • 开源项目 rover生成交互式静态架构图
    • Cloudcraft针对 AWS

    资源导入

    ROS资源栈:通过资源场景、资源导入纳管现有资源至资源栈,支持核心云产品

    Terraform资源栈:通过资源导入纳管现有资源至资源栈,支持度与Terraform一致。

    通过 terraform import导入

    资源导出

    (资源生成模板/架构)

    通过资源场景生成ROS模板

    GCP支持导出 TF 模板

    模板/架构管理

    模板版本管理

    模板共享

    ☑️ 

    原生没有版本管理,可结合 git 进行管理

    更改预览

    terraform apply

    偏差检查、纠正

    • terraform refresh+plan 进行偏差检查
    • 不支持纠正模板

    标签、资源组传递

    可将标签、资源组一次性传递给模板中所有资源

    资源复制、迁移

    通过资源场景复制、迁移一组资源

    动态多资源

    指定 Count 创建多个相似资源

    指定 count、for_each 创建多个相似资源

    模块化

    支持模块嵌套资源栈

    支持模块

    跨地域、跨账号一致性部署

    资源栈组功能允许使用同一个模板跨账号、跨地域部署

    需模板里显式声明地域、角色,并结合 Count 实现

    监控大盘

    自定义资源

    允许基于FC、MNS、HTTP实现自定义资源

    自行实现 provider

    第三方公共资源

    Terraform Registry

    云原生鉴权

    多云支持

    一般通过 Terraform 模板实现,也可通过自定义资源从 0 实现

    测试套件

    开源测试工具 iact3

    开源工具 terratest

    资源合规预检

    控制台集成配置审计

    开源工具 terraform-compliance

    安全性

    使用临时AK或STS Token编排,有时效性,用户不感知。

    用户主要通过环境变量中的 AK 配置身份认证,设置的AK大多数是永久性的明文AK,安全风险较高。

    GuestOS 命令执行

    GuestOS notify

    ros-notify 机制能够实现 GuestOS 任务完成后通知 ROS





    作者介绍
    目录