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

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

引言

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

名词解释

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

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

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 支持的功能和资源

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 最新的功能和特性。

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。

参考文献

附录

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

    相关实践学习
    使用ROS创建VPC和VSwitch
    本场景主要介绍如何利用阿里云资源编排服务,定义资源编排模板,实现自动化创建阿里云专有网络和交换机。
    阿里云资源编排ROS使用教程
    资源编排(Resource Orchestration)是一种简单易用的云计算资源管理和自动化运维服务。用户通过模板描述多个云计算资源的依赖关系、配置等,并自动完成所有资源的创建和配置,以达到自动化部署、运维等目的。编排模板同时也是一种标准化的资源和应用交付方式,并且可以随时编辑修改,使基础设施即代码(Infrastructure as Code)成为可能。 产品详情:https://www.aliyun.com/product/ros/
    目录
    相关文章
    |
    2月前
    |
    弹性计算 持续交付 API
    基于 ROS 的Terraform托管服务轻松部署ChatGLM-6B
    文章介绍了如何利用ROS和Terraform模板轻松自动化部署基于GLM架构、优化中文对话的ChatGLM-6B模型至阿里云,提高了部署效率与便捷性,适用于多种应用场景,且模型部署过程详细,彰显了基础设施即代码(IaC)的优势。
    46 3
    基于 ROS 的Terraform托管服务轻松部署ChatGLM-6B
    |
    2月前
    |
    弹性计算 人工智能 持续交付
    基于 ROS 的Terraform托管服务轻松部署Qwen-7B-Chat
    文章介绍了如何利用ROS和Terraform模板轻松自动化部署阿里云的Qwen-7B-Chat大语言模型服务,提高了部署效率与便捷性,是实现云资源和服务快速上线的最佳实践。
    61 2
    基于 ROS 的Terraform托管服务轻松部署Qwen-7B-Chat
    |
    4月前
    |
    安全 测试技术 API
    实战基于terraform-compliance实现IaC安全
    随着云计算的普及和企业对基础设施即代码(IaC)的采用增加,确保云基础设施的安全和合规性变得至关重要。Azure作为领先的云服务提供商之一,为企业提供了强大的基础设施和服务,而Terraform作为流行的IaC工具,则为云资源的自动化部署和管理提供了有效的解决方案。 然而,单纯依赖Terraform配置并不足以保证部署的安全性和符合性。因此,利用符合性测试工具对IaC代码进行全面的安全审计和合规性检查显得尤为重要。
    |
    3月前
    |
    XML 数据可视化 机器人
    08 ROS的其他常见工具
    本文概述了ROS(机器人操作系统)中的一些常见工具包,包括rqt工具箱、Rviz三维可视化工具、Gazebo物理仿真环境和rosbag数据记录与回放工具的使用方法和功能。
    39 0
    |
    5月前
    |
    弹性计算 API 持续交付
    基于 ROS 的 Terraform 托管服务轻松部署文本转语音系统 ChatTTS
    基于 IaC 的理念,通过定义一个模板,使用 ROS 提供的 Terraform 托管服务进行自动化部署,可以非常高效快捷地部署任意云资源和应用(比如 ChatTTS 服务)。相比于手动部署或者通过 API、SDK 的部署方式,有着高效、稳定等诸多优势,也是服务上云的最佳实践。
    66 1
    基于 ROS 的 Terraform 托管服务轻松部署文本转语音系统 ChatTTS
    |
    6月前
    |
    弹性计算 持续交付 数据中心
    一键云部署:ROS的Terraform托管服务助你轻松上线2048经典游戏
    阿里云的资源编排服务ROS提供了Terraform托管能力,用户可以直接在ROS控制台上部署Terraform脚本,本文将详细介绍如何使用ROS的Terraform托管服务一键部署经典的2048小游戏到云端,让全世界的玩家都能在线体验。
    235 1
    |
    6月前
    |
    Kubernetes Devops 数据中心
    Terraform 系列 - 什么是 IaC?
    Terraform 系列 - 什么是 IaC?
    |
    6月前
    |
    运维 数据中心 数据安全/隐私保护
    【Terraform实现云服务基础设施既代码(IaC)案例实战-3】:Terraform+Docker+Portainer+Gitlab+GitlabRunner搭建Tree项目
    前言树苗科技公司业务上云2年有余,随着技术的不断发展。运维团队支持业务变更配置、开资源、删资源等过程加班到深夜一两点已是家常便饭。为了进一步提升工作效率,运维总监张三决定对当前业务交付路径进行统一梳理,借助IaC的理念和Terraform自动化工具逐步实施运维生产自动化,改善组内成员频繁加班且重复劳...
    295 0
    【Terraform实现云服务基础设施既代码(IaC)案例实战-3】:Terraform+Docker+Portainer+Gitlab+GitlabRunner搭建Tree项目
    |
    6月前
    |
    弹性计算 运维 负载均衡
    【Terraform实现云服务基础设施既代码(IaC)案例实战-2】:通过Terraform实施基础IaC
    前言树苗科技公司业务上云2年有余,随着技术的不断发展。运维团队支持业务变更配置、开资源、删资源等过程加班到深夜一两点已是家常便饭。为了进一步提升工作效率,运维总监张三决定对当前业务交付路径进行统一梳理,借助IaC的理念和Terraform自动化工具逐步实施运维生产自动化,改善组内成员频繁加班的现状。...
    234 0
    【Terraform实现云服务基础设施既代码(IaC)案例实战-2】:通过Terraform实施基础IaC
    |
    6月前
    |
    运维 安全 数据中心
    【Terraform实现云服务基础设施既代码(IaC)案例实战-1】:树苗科技公司的自动化转型之旅
    背景树苗科技公司业务上云2年有余,随着技术的不断发展。运维团队支持业务变更配置、开资源、删资源等过程加班到深夜一两点已是家常便饭。为了进一步提升工作效率,运维总监张三决定对当前业务交付路径进行统一梳理,借助IaC的理念和Terraform自动化工具逐步实施运维生产自动化,改善组内成员频繁加班的现状。...
    119 0

    推荐镜像

    更多