Terraform 提供了一个资源和服务商的灵活的抽象层。该模型允许可以表示从物理硬件,虚拟机和容器到邮件和DNS提供商的所有信息。因为灵活性,Terraform 可以被用于解决许多不同的问题。这意味着许多已存在的工具与Terraform功能重叠。我们对比了Terraform和大量此类工具,但是需要注意到Terraform与其他系统并不是互斥的。它可以被用来管理单个应用程序或整个数据中心。
使用左边的导航来阅读Terraform与其他特定系统对比。
Terraform与Chef,Puppet等
配置管理工具在已存在的机器上安装和管理软件。Terraform不是一个配置管理工具,并且它允许现有的工具专注于自己的优势:引导和初始化资源。
使用provisioners,在资源被创建以后,Terraform可以使任意配置管理工具可以被用于配置和初始化资源。Terraform专注于数据中心和相关服务的更高层次的抽象,而不牺牲配置管理工具来做他们最擅长事情的能力。它也拥抱这些工具所负责的成功编排,使整个基础设施的部署简单可靠。
Terraform与CloudFormation, Heat等
像 CloudFormation, Heat这样的工具。允许将基础设施的细节编写为配置文件。配置文件允许基础设施被弹性创建,修改和销毁。Terraform 受其所解决问题的启发。
Terraform同样使用配置文件配置基础设施细节,但是它更进一步与云平台无关并且能够结合多provider和多服务编排。例如:Terraform可以同时编排AWS和OpenStack集群,开启第三方provider像Cloudflare和DNSimple集成CDN和DNS服务。这使Terraform可以利用其支持的服务来表现和管理整个基础设施,而不是仅仅已存在于单个provider里的子集。它提供一种统一的语法,而不是需要运维为每个平台和服务使用独立且不可相互交互的工具。
Terraform通过使用执行计划的概念将计划语法和执行阶段分开。通过执行terraform plan
,更新当前状态并查询配置文件生成新的执行计划。该计划包含所有将要被执行的动作:将被创建,销毁和变更的资源。运维可以检查其状态以确保其符合预期。使用terraform graph
,该计划将被可视化并按顺序输其出依赖关系。一旦计划被获取,执行语法会被限制在计划中的动作内。其他工具将计划和执行阶段结合在一起,这意味着运维人员被迫在心里推断变更带来的影响,这在一个大型基础架构中会很快变得难以追溯。Terraform让运维人员有信心应用变更,因为他们事前可以确切知道将会发生什么。
Boto,Fogd等
像Boto, Fog这样的库,被用于原生访问云提供商和服务所提供的API。一些库强制专注于特定的云,有些则尝试打通所有的云并隐藏于以上的不同。使用客户端工具仅提供对于API的低级访问,需要应用程序开发者创建他们自己的工具来构建和管理他们的基础设施。
Terraform不打算提供对于提供商的低级编程访问,而已提供一个高级语法来描述云资源和服务如何被创建,制备和结合。Terraform非常灵活,使用一个基于插件的模型支持providers和provisioners,赋予它支持几乎所有服务API的能力。
自定义解决方案
Terraform的设计旨在解决这些挑战。它提供了一个简单,统一的语法,允许管理几乎任意资源而不需要学习一个新工具。通过捕获所有资源,他们之间的依赖关系可以被自动解决,所以运维人员不需要记住和推理。消除构建工具的负担使运维人员专注于他们的基础设施而不是工具。
此外,Terraform是一款开源工具。除了HashiCorp公司,Terraform社区也在帮助扩展它的功能,修复bug,完善文档和使用案例。Terraform帮助解决每个组织都存在的一个问题并提供一种适用的标准以避免不同组织间重复造轮子。它的开源特性确保它可以长远发展。
<!– more –>
<!–//
硬啃官方文档产物,若有不妥之处,欢迎指正,请以官方文档为准!
//–>