Ansible 和 Terraform – 您听说过这些 DevOps 工具吗?在本文中,我们将解释它们及其差异。
基础设施即代码(IaC)是DevOps领域的核心部分,也是DevOps工程师必须具备的核心技能。 IaC 用于使用配置代码配置和管理 IT 基础设施,配置代码是机器可读的定义文件。这种软件工程操作方法允许您使用编程脚本实现 IT 基础设施的自动化。
当 DevOps 工程师考虑使用代码实现 DevOps 自动化时,总会想到两种 DevOps 工具:Terraform 和 Ansible。两者都是 DevOps 领域最受尊敬和广泛使用的工具。然而,许多人对这些工具不熟悉,不知道它们之间的重要区别。在本文中,我们将讨论 Terraform、Ansible 以及它们的主要区别。

什么是地形?
Terraform是由 HashiCorp 创建的开源基础设施即代码软件工具。您可以使用 Terraform 极其易于使用的声明性语言来编排完整的 IT 基础设施。 Terraform 要求您声明和配置基础设施所需的资源。然后它会处理所有必需的依赖关系并构建基础设施。
Terraform 于几年前的 2014 年发布,该工具的采用率令人印象深刻。考虑到大型组织中整体基础架构配置的复杂性,它提供了有助于 IT 基础架构完整编排的强大功能。您还可以将此工具与所有流行的云提供商(例如 AWS、GCP 等)集成。
大多数 IT 组织为不同的团队提供不同的工作环境,因此开发团队、暂存团队或 QA 团队和生产团队各自拥有单独的环境。一段时间后,管理生产环境变得困难。为了便于管理,组织使用 Terraform 来组织生产环境中的所有内容。使用 terraform,您可以非常快速地轮换开发和暂存环境,使其看起来与生产环境非常相似。这有助于您在类似于生产环境的平台上开发和测试应用程序。
许多大型组织(例如星巴克、Slack 和 Uber)都在利用 Terraform 功能。
Terraform 的优势包括:
- 使用简单的 GUI 管理您的服务。
- 使用易于理解的(声明性)语言描述 GCP、AWS 和 Azure 等基础设施。
- 支持基于角色的访问控制 (RBAC) 以确保安全。
- 使用 OpenStack、Azure、AWS 和 GCP API 轻松配置。
- 它遵循无主架构,因此没有主节点来跟踪所有配置更新。
- 您组织内的团队可以使用 Terraform Registry 轻松地在您的基础设施上进行协作。
- 与 GitLab、Jenkins 和 Travis 等持续集成平台轻松集成,以部署 DevOps 管道。
什么是 Ansible?
Ansible是 DevOps 领域中的一个配置管理工具,用于自动化所有 IT 任务。 Ansible也是一个开源工具,使用声明式和过程式语言进行配置管理。该工具得到了所有流行云提供商的出色支持,可实现应用程序、网络、基础设施、安全、容器等的自动化。许多 DevOps 工程师更喜欢使用此工具,因为它可以显着降低 DevOps 流程的复杂性。
Ansible 使用简单的 YAML 配置文件(人类可读)轻松自动化最复杂的基础设施。使用以 YAML 编写的代码文件执行配置管理。该代码文件称为 Ansible playbook。 Ansible 是无代理的,并且有一个主站,可以推送在远程服务器上管理和更新应用程序所需的所有配置。
Ansible 需要使用 SSH 连接到 IT 基础设施中的节点。与节点成功连接后,Ansible 使用 Ansible 模块推送最新配置并安装、更新或删除您的应用程序。您还可以选择在 Ansible 中运行临时命令来快速执行小任务。
以下是 Ansible 的一些优点和功能。
- Ansible 是无代理的,因此您不需要在节点上安装和运行代理来执行任务。
- 由于 Ansible 是基于 Python 构建的,因此 Python 中有大量可用的库,这使得它对开发人员非常友好。
- 使用 SSH 提供安全身份验证。
- Ansible Tower 提供企业级可视化功能。
- 主服务器支持基于推送的模型,因为它将最新配置发送到远程服务器以执行基础架构更改。
- 配置管理使用人类可读的 YAML 文件,因此不需要额外的编码技能。

Terraform 和 Ansible:差异
编排和配置管理
Ansible 是一个配置管理工具,Terraform 是一个编排工具。这是 Terraform 和 Ansible 之间最根本的区别。尽管这些工具之间的某些功能是相同的,但它们仍然彼此不同。
Ansible 用于添加、更新、删除和管理 IT 基础设施配置,而 Terraform 用于声明基础设施组件并在多个云提供商之间协调它们。
过程式与声明式
Terraform 使用声明性配置语言来声明您的 IT 基础设施资源。 Ansible 使用过程式和声明式语言进行配置管理。 Ansible 使用这种过程方法来执行临时命令以达到所需的基础设施配置。 Ansible 模块使用声明性方法。
可变和不可变的基础设施
Ansible 可用于创建可修改的基础设施,而 Terraform 可用于创建不可修改的基础设施。 Ansible 在同一服务器上管理和配置您的基础设施软件。推送更多的配置更新会使生产环境变得复杂,并引入许多难以识别和修复的错误。
Terraform 主要对服务器上的每个部署使用新的 Docker 映像。 Terraform 创建一个新的 Docker 映像来更新基础设施上的软件,将该映像部署到所有服务器,并删除旧的配置 Docker 映像。因此,即使多次更新配置,环境仍然保持稳定。
主控与无主控
Ansible 拥有一个主机架构,可以存储基础设施的完整状态并将新的配置更新推送到远程服务器。这就是 Ansible 将其称为基于推送的部署模型的原因。
Terraform 没有单独的主系统。但是,如果您想通过 API 与 GCP 或 AWS 等云提供商集成,那么 API 服务器就是主机。
社区
相比之下,Ansible 的社区比 Terraform 的社区更强大。例如,Ansible 在 GitHub 上有 45 个分支、49.7,000 个 star、51,836 个提交和 21,000 个 fork,而 Terraform 有 183 个分支、28.7,000 个 star、28,778 个提交和 6.9,000 个 fork。目前,这两种工具的社区正在快速增长。

您会选择哪个:Ansible 或 Terraform?
我认为这不是同类比较。这个问题的答案取决于您的业务需求。您可以使用 Ansible 进行配置管理并添加 Terraform 来调整您的 IT 基础设施。如果您的组织与云提供商合作,Terraform 是更好的选择。这两种工具都有其局限性和优点,并且都是 DevOps 领域中的流行工具。因此,您可以根据您要解决的问题陈述选择其中一种工具。
这是一个比较表,总结了 Ansible 和 Terraform 之间的差异。
| 标准 | 安西布尔 | 地形 |
| 成立日期 | 2012年 | 2014年 |
| 开发者 | Ansible 公司/红帽公司 | 桥商社 |
| 它写在 | Python | 去 |
| 类型 | 配置管理工具 | 编排工具 |
| 语言 | 使用过程性和声明性语言 | 使用声明性语言 |
| 基础设施 | 支持可变基础设施 | 支持不可变的基础设施 |
| 生命周期管理 | 不 | 是的 |
| 包装和模板 | 完全支持 | 部分的 |
| VM配置和网络 | 部分的 | 完全支持 |
社区和支持 | 49,000+ 颗星 | 超过 28,000 颗星 |
结论👩💻
这就是关于 Ansible、Terraform 以及它们之间的差异的全部内容。这两种 DevOps 工具都在生产环境中大量使用,并且通常存在于大多数大型组织中。你要买什么?选择更适合您组织的业务需求的工具。您可以从学习任一工具开始,但了解这两种工具将为您在各个行业带来优势。
您可能喜欢:
DevOps 项目的最佳包托管存储库。




![2021 年如何设置 Raspberry Pi Web 服务器 [指南]](https://i0.wp.com/pcmanabu.com/wp-content/uploads/2019/10/web-server-02-309x198.png?w=1200&resize=1200,0&ssl=1)

