Terraform vs Ansible:有什么区别,你应该使用哪一个?

DevOps 作为一种文化的方式正在获得动力,Ansible 和 Terraform 等工具见证了巨大的需求和普及。

这两种工具都被视为 基础设施即代码 (IAC) 有助于部署代码和基础设施的解决方案。 Ansible 充当配置管理解决方案,通常缩写为“CM”,而 Terraform 是一种服务编排或供应工具。

请注意,存在重叠,这些术语不一定相互排斥。 这让人们感到困惑,这就是我要比较 Ansible 和 Terraform 的原因。

我将解释这些工具的用途,它们的优缺点。 这将帮助您决定是否应该在项目中使用 Ansible 或 Terraform。

Ansible 和 Terraform:这些工具是什么?

我们先来简单看看这些流行的 DevOps 工具都有哪些。

什么是 Ansible?

Ansible 是一个 IT 自动化工具。 它可以配置系统、部署软件并执行更高级的 IT 任务,例如持续部署或零停机滚动更新。

什么是 Terraform?

地形 是用于安全有效地构建、更改和版本控制基础架构的工具。 Terraform 可以管理现有和流行的服务提供商以及定制的内部解决方案。

在强调这两个工具之间的区别之前,让我们首先了解什么是配置管理和编排。

配置管理与编排

图片来源: 冥王星

配置管理 是一套流程和程序,可确保始终满足包括服务器和软件在内的基础架构的所需和一致状态。 换句话说,这是一种确保系统随着时间的推移进行更改时按预期执行的方法。

CM 工具可确保 IT 部署更快、增量、可重复、可扩展、可预测,并保持所需状态,从而使托管资产进入预期状态。

Ansible 等工具用于进行配置管理。

什么是 DevOps 中的编排

到那个时刻 编排 您不仅可以使用编排工具来配置服务器,还可以配置数据库、缓存、负载均衡器、队列、监控、子网配置、防火墙设置、路由规则、SSL 证书以及基础架构的几乎所有其他方面,主要是公共云基础架构.

Terraform 是一个编排工具。 它旨在自行配置服务器实例,将配置这些服务器的工作留给其他工具。

程序与声明性语言

DevOps 工具可以根据它们在应用时执行操作的方式分为程序性或声明性。

程序 描述了需要在代码中列出确切步骤的应用程序,而 声明式 准确地“声明”需要什么,而不是实现结果的过程。

Ansible 使用程序风格,您可以在其中编写指定分步任务的代码,以实现所需的最终状态。

而 Terraform、AWS CloudFormation 等工具在定义您编写代码以指定所需最终状态的过程时都是声明性的。 为了 example,如果您需要 5 个 EC2 实例,这正是代码执行后您将拥有的数量。

Ansible 和 Terraform:比较

让我们看看使用 Terraform 的优缺点是什么:

Terraform 的优点

  • Terraform 维护整个云基础架构并将这些资源作为代码提供。 这使得增量更改过程非常容易。
  • 模块化设计。
  • 简单易学
  • 它维护所创建资源的状态。 Terraform 创建的所有对象如果被任何其他进程删除,则应重新创建。
  • 与 CI/CD 管道无缝集成。
  • 它允许导入现有资源以将它们带入 Terraform 状态。
  • 当你跑 terraform plan,它显示即将应用于已存在资源的更改。 这使 DevOps 工程师可以深入了解他们将要进行的更改,尤其是在更改不符合预期的情况下。

Terraform 的缺点

  • 没有回滚。 您需要销毁所有内容并重新运行 tf 脚本。
  • 错误处理还不成熟。 从 Terraform 开始 v.12.20 有两个新功能可供消费者使用 try()can().
  • 不允许直接从状态文件创建 Terraform 脚本。
  • Terraform 工具仍处于开发阶段,并经历了许多 beta 每个月发布。
  • 并非每个项目都可以导入。 terrafom import 命令一次只能导入一个资源。 这意味着您还不能将 Terraform 导入指向整个资源集合(例如 AWS VPC)并将其全部导入。

使用 Ansible 的优缺点

现在,让我们来看看 Ansible 的优点和缺点。

Ansible 的优点

  • 简单易学
  • 无代理
  • 使整个部署过程自动化并且对开发人员友好
  • 基于 YAML 的简单易读脚本(Ansible Playbooks)
  • 庞大的模块支持
  • 一个名为 Ansible galaxy 的中央存储库的可用性,用于查找和重用 Ansible 内容。

Ansible 的缺点

  • 缺乏 UI 产品。 最终演变成 Ansible 塔的 AWX 仍有很大的改进空间。
  • 无状态维护。 Ansible 不跟踪依赖关系。 它只是执行一系列顺序任务,在完成、失败或遇到错误时停止。
  • 在 Windows 操作系统支持方面达不到标准。 Ansible 仍处于扩展对 Windows 的支持的早期阶段。
  • 如果您必须在剧本中编写具有广泛逻辑的复杂脚本,那就不是那么简单了。
  • 企业支持尚未成熟/可靠。
  • 在调试复杂的剧本时缺乏描述性的错误消息。

Terraform 还是 Ansible? 哪一个更适合你?

相信我,这不是一个简单的问题要回答。 因为这在很大程度上取决于您的要求。

在现实世界中,在 IT 组织中,您永远不会依赖一种工具,而是使用不同工具的组合来实现所需的结果。

Ansible 和 Terraform 工具都可以很好地完成很多事情。 我个人的偏好是使用 Terraform 进行编排/配置,使用 Ansible 进行配置管理。

Terraform 在用于基础架构编排(管理云资源)时会发挥其最佳性能,因为这就是它的创建目的。

另一方面,Ansible 最适合和优化配置管理任务(供应软件和机器)。 编排任务也可以用它来执行,但这只是它的一部分。

我的建议 – 使用最好的和最初为您要执行的任务创建的内容。

但这也不是经验法则,因为您可能会发现有人喜欢使用一种工具来处理所有事情并且它对他们有用!

结论

在设计基础架构即代码环境以实现自动化时,这两种工具都有其自身的优势和局限性。 是的,成功完全取决于知道哪些工具用于哪些工作。

我希望我对 Ansible 和 Terraform 做了一些让你更清楚的事情。 如果您仍有问题或建议,请在评论部分告诉我。