Terraform 和 Pulumi 是两个流行的基础设施即代码(IaC) 工具,用于配置和管理虚拟环境。这两种工具都是开源的,被广泛使用,并提供类似的功能。但是,如果没有详细的比较,要在 Pulumi 和 Terraform 之间进行选择并不容易。以下是对 Pulumi 和 Terraform 之间主要区别的检查。本文分析了哪种工具在实际用例中表现更好,并为高效的软件开发生命周期提供了更多价值。
Pulumi 和 Terraform 之间的主要区别
- Pulumi 没有特定领域的软件语言。开发人员可以使用 Go、.NET、JavaScript 等通用语言在 Pulumi 中构建基础设施。另一方面,Terraform 使用其 Hashicorp 配置语言。
- Terraform 遵循严格的代码准则。Pulumi 在这方面更加灵活。
- Terraform 有据可查,并拥有一个充满活力的社区。Pulumi 有一个较小的社区,并且没有记录。
- Terraform 更容易进行状态文件故障排除。
- 由于不使用特定领域的语言,Pulumi 提供了卓越的内置测试支持。
什么是普鲁米?
Pulumi 是一个开源 IaC 工具,用于设计、部署和管理云基础设施上的资源。该工具支持众多公共、私有和混合云提供商,例如 AWS、Azure、Google Cloud、Kubernetes、phoenixNAP Bare Metal Cloud 和 OpenStack。
Pulumi用于创建传统的基础设施元素,例如虚拟机、网络和数据库。该工具还用于设计现代云组件,包括容器、集群和无服务器功能。
虽然 Pulumi 具有命令式编程语言,但请使用该工具进行声明式 IaC。用户定义基础设施的期望状态,Pulumi 构建请求的资源。
什么是 Terraform?
Terraform 是一种流行的开源 IaC 工具,用于构建、修改和版本化虚拟基础架构。
该工具与所有主要的云提供商一起使用。Terraform 用于配置从低级组件(如存储和网络)到高端资源(如 DNS 条目)的所有内容。使用 Terraform 构建环境用户友好且高效。用户还可以使用此工具管理多云或多产品环境。
Terraform 是一个声明式 IaC 工具。用户编写配置文件来描述 Terraform 所需的组件。然后,该工具会生成一个计划,描述达到所需状态所需的步骤。如果用户同意大纲,Terraform 将执行配置并构建所需的基础架构。
Pulumi 与 Terraform 比较
虽然这两种工具的用途相同,但 Pulumi 和 Terraform 在几个方面有所不同。以下是两种基础设施即代码工具之间最显着的区别:
1. 与 Terraform 不同,Pulumi 没有 DSL
要使用 Terraform,开发人员必须学习一种称为 Hashicorp 配置语言 (HCL) 的领域特定语言 (DSL)。HCL 以易于上手但难以精通而著称。
相比之下,Pulumi 允许开发人员使用通用语言,例如 JavaScript、TypeScript、.Net、Python 和 Go。熟悉的语言允许熟悉的构造,例如 for 循环、函数和类。所有这些功能也可通过 HCL 获得,但它们的使用需要使语法复杂化的变通方法。
缺乏特定领域的语言是 Pulumi 的主要卖点。通过允许用户坚持他们所知道的,Pulumi 减少了样板代码并鼓励最佳编程实践。
2. 不同类型的状态管理
使用 Terraform,状态文件默认存储在本地硬盘的terraform.tfstate文件中。使用Pulumi,用户在官网注册一个免费账户,状态文件在线存储。
通过使用户能够通过免费帐户存储状态文件,Pulumi 提供了许多功能。所有资源都有详细的概述,用户可以深入了解他们的部署历史。每个部署都提供了对配置详细信息的分析。这些功能可实现高效的管理、查看和监控活动。
要使用 Terraform 享受类似的好处,您必须摆脱默认的本地硬盘驱动器设置。为此,请使用 Terraform Cloud 帐户或依赖第三方云存储提供商。最多五个用户的小型团队可以获得免费版本的 Terraform Cloud。
Pulumi 需要付费帐户才能与多个开发人员进行任何设置。Pulumi 的付费版本提供额外的好处。其中包括团队共享功能、Git 和 Slack 集成,以及对将 IaC 工具集成到 CI/CD 部署中的功能的支持。团队帐户还启用状态锁定机制。
3. Pulumi 提供更多代码通用性
定义基础架构后,Terraform 将引导用户进行所需的声明性配置。代码总是干净而简短。当您尝试实现某些条件情况时会出现问题,因为 HCL 在这方面受到限制。Pulumi 允许用户使用标准编程语言编写代码,因此可以使用多种方法来达到所需的参数。
4. Terraform 更擅长构建大型项目
Terraform 允许用户将项目拆分为多个文件和模块以创建可重用的组件。Terraform 还使开发人员能够为不同的环境和目的重用代码文件。
Pulumi 将基础设施构建为单一项目或微型项目。不同的堆栈充当不同的环境。当使用映射到多个资源的更高级别的 Pulumi 扩展时,没有办法将堆栈引用反序列化回资源。
5. Terraform 提供更好的状态文件故障排除
使用 IaC 工具时,不可避免地会遇到损坏或不一致的状态。崩溃通常会导致更新期间的不一致状态、错误或由错误的手动更改引起的漂移。
Terraform 提供了几个用于处理损坏或不一致状态的命令:
refresh
通过使用真实的基础设施状态调整已知状态来处理漂移。state {rm,mv}
用于手动修改状态文件。import
找到现有的云资源并将其导入您的状态。taint/untaint
将单个资源标记为需要娱乐。
Pulumi 还提供了几个 CLI 命令以防损坏或不一致的状态:
refresh
与 Terraform 的刷新方式相同。state delete
从状态文件中删除资源。
Pulumi 没有taint/untaint
. 对于任何失败的更新,用户需要手动编辑状态文件。
6. Pulumi 提供更好的内置测试
由于 Pulumi 使用通用编程语言,该工具支持使用用户选择的软件语言支持的任何框架进行单元测试。对于集成,Pulumi 仅支持在 Go 中编写测试。Terraform 不提供官方测试支持。要测试 IaC 环境,用户必须依赖第三方库,例如Terratest和Kitchen-Terraform。
7. Terraform 有更好的文档和更大的社区
与 Terraform 相比,Pulumi 官方文档仍然有限。该工具的最佳资源是在 GitHub 和 Pulumi Slack 上找到的示例。
社区的规模在有用的资源方面也起着重要作用。多年来,Terraform 一直是一种广泛使用的 IaC 工具,因此它的社区随着它的流行而发展壮大。Pulumi 的社区还远没有达到这个规模。
8. 部署到云端
Pulumi 允许用户从本地设备将资源部署到云端。默认情况下,Terraform 需要使用其 SaaS 平台将组件部署到云中。
如果用户希望使用 Terraform 从本地设备进行部署,AWS_ACCESS_KEY
则AWS_SECRET_ACCESS_KEY
需要将变量添加到 Terraform Cloud 环境中。此过程不适合 Amazon Web Services (AWS) 的联合 SSO 帐户。对有权访问您的云的第三方系统的安全问题也值得注意。
常见的解决方法是仅使用 Terraform Cloud 来存储状态信息。但是,此选项是以牺牲其他 Terraform Cloud 功能为代价的。
缅甸语 | 地形 | |
---|---|---|
出版商 | 缅甸语 | 哈希公司 |
方法 | 推 | 推 |
IAC 方法 | 声明式 | 声明式 |
价钱 | 一个用户免费,团队三个付费套餐 | 最多五个用户免费,大型团队两个付费套餐 |
写在 | 打字稿,Python,围棋 | 走 |
资源 | 打开 | 打开 |
领域特定语言 (DSL) | 不 | 是(Hashicorp 配置语言) |
主要优势 | 以熟悉的编程语言编写代码,出色的开箱即用 GUI | 纯声明式 IaC 工具,可与所有主要云提供商合作,让您创建基础架构构建块 |
主要缺点 | 仍然未完善,缺少文件的地方 | HCL 限制了编码自由度,需要掌握才能使用高级功能 |
状态文件管理 | 状态文件通过免费帐户存储 | 状态文件默认存储在本地硬盘上 |
社区 | 中号 | 大 |
便于使用 | JavaScript、TypeScript、.Net、Python 和 Go 的使用让 IaC 变得熟悉 | HCL 是一种复杂的语言,尽管语法简洁 |
模块化 | 高级 Pulumi 扩展存在问题 | 可重复使用的组件是理想的选择 |
文档 | 有限,在 Pulumi Slack 和 GitHub 上有最好的资源 | 优秀的官方文档 |
代码通用性 | 当用户用不同的语言编写代码时,有多种方法可以达到所需的状态 | HCL 几乎没有多功能性的空间 |
部署到云端 | 可以从本地设备完成 | 必须通过SaaS平台完成 |
测试 | 使用支持所用编程语言的任何框架进行测试 | 必须通过第三方工具执行 |
一起使用 Pulumi 和 Terraform
可以同时使用 Pulumi 和 Terraform 运行 IaC。但是,使用这两种工具需要一些解决方法。Pulumi 支持从 Pulumi 程序中使用本地或远程 Terraform 状态。如果您决定继续使用 Terraform 管理虚拟基础架构的子集,这种支持有助于逐步采用 Pulumi。
例如,您可能决定将您的 VPC 和低级网络定义保留在 Terraform 中,以避免中断基础设施。使用状态参考支持,您可以使用 Pulumi 设计高级基础设施,并且仍然使用 Terraform 支持的 VPC 信息。在这种情况下,Pulumi 和 Terraform 的共存很容易管理和自动化。
结论:两者都是伟大的基础设施作为代码工具
Terraform 和 Pulumi 都提供类似的功能。Pulumi 是一个不太严格的工具,专注于功能。Terraform 更成熟,文档更完善,并拥有强大的社区支持。然而,Pulumi 的不同之处在于它与 DevOps 文化的契合。
通过用流行的编程语言表达基础设施,Pulumi 弥合了 Dev 和 Ops 之间的差距。它在开发和运营团队之间提供了一种通用语言。相比之下,Terraform 加强了跨部门的孤岛,使用其特定领域的语言将开发和运营团队进一步分开。从这个角度来看,Pulumi 更适合在整个开发生命周期中标准化DevOps 管道。该工具增强了一致性,并导致更快的软件开发和更少的错误空间。