比较 Terraform 和 Bicep

为了实现规模化,DevOps 团队始终正在寻找使用受信任且可重复的过程快速部署代码的方法。 在云和基础结构方面,此过程越来越多地通过基础结构即代码(IaC)完成。 IaC 工具的范围从常规用途工具到适用于特定环境的工具。 Terraform 是前者的示例,而 Bicep 旨在处理与 Azure 相关的任务。

在本文中,我们将比较 Bicep 和 Terraform 的 9 个基础结构和集成功能。 了解这些差异有助于确定哪种工具最能支持基础结构和进程。

状态和后端

Terraform 和 Bicep 都是所需的状态配置 (DSC),因此可以轻松地将 IT 和开发基础结构作为代码进行管理。 Terraform 存储托管基础结构和配置的状态。 Terraform 使用此信息将实际资源映射到配置、跟踪元数据并提高大型基础结构的性能。 状态存储在命名 terraform.tfstate的本地文件中,但也可以 远程存储。 备份和保护状态文件至关重要。 和 Terraform 一样,Bicep 是声明性的,也是目标导向的。 但是,Bicep 不存储状态。 相反,Bicep 依赖于增量部署。

基础结构目标

将 Bicep 与用于管理云基础结构的 Terraform 进行比较时,请务必考虑目标云环境:

  • 仅 Azure
  • 多云或混合云

Bicep 是特定于 Azure 的,不适用于其他云服务。

如果目标是自动部署到以下任何环境,Terraform 可能是更好的选择:

  • 虚拟化环境
  • 多云环境 - 例如 Azure 和其他云服务
  • 本地工作负荷

Terraform 使用称为 提供程序的插件与其他云提供程序或 API 进行交互。 有几个 Terraform Azure 提供程序 可用于管理 Azure 基础结构。 在编写 Terraform 配置时,需要指定所需的提供程序。 运行 terraform init 时,将从代码中安装和使用指定的提供程序。

CLI 工具

命令行接口(CLI)工具通过自动化技术的实现和管理在业务流程中发挥关键作用。 Bicep 和 Terraform 都提供 CLI 工具。

Bicep 与 Azure CLI 集成,允许开发人员使用 az 以下命令,例如:

使用 Terraform CLI 可以执行验证和格式化 Terraform 代码等任务,并创建并应用执行计划。

Bicep 还提供一项功能,可轻松地将 Bicep 与 Azure Pipelines 集成。 Terraform 提供类似的功能,但必须下载并安装 适用于 Visual Studio 的 Azure Pipelines Terraform Tasks 扩展。 安装后,可以从 Azure Pipelines 运行 Terraform CLI 命令。 此外,Terraform 和 Bicep 都支持 GitHub Actions 来自动执行软件生成、测试和部署。

处理中

Bicep 和 Terraform 在部署效率和优化方面存在一些重要差异。 使用 Bicep 时,处理在核心 Azure 基础结构服务端进行。 此功能提供了诸多优势,包括预先检查处理,以确保策略的合规性或确认在一个区域中部署多个实例的可用性。 使用 Terraform 时,处理在 Terraform 客户端中完成。 因此,预处理不涉及对 Azure 的调用,因为它使用状态和 HCL(HashiCorp 语言)来确定所需的更改。

身份验证

Azure 身份验证功能在 Bicep 和 Terraform 之间有所不同。 通过 Bicep,在请求提交 Bicep 文件和 ARM 模板时需要提供授权令牌。 ARM 可确保你有权在指定的模板中创建部署和部署资源。 Terraform 会根据提供程序凭据(如 Azure CLI、服务主体或 Azure 资源的托管标识)验证每个 API。 此外,在单个配置中可以利用多个提供商的凭证。

Azure 集成服务

还应考虑使用 Azure Policy 等 Azure 功能,以及每个功能如何与其他工具和语言交互。 Bicep 的预检验证可确定资源是否不符合策略,从而导致其在部署之前失败。 因此,开发人员可以使用提供的 ARM 模板通过策略修正资源。 ARM 模板可用于为另一个资源创建策略分配,以便自动修正。 但是,当实施被策略禁止的资源时,Terraform 会失败。

门户集成

Bicep 相对于 Terraform 的一个主要优势是能够自动化门户操作。 使用 Bicep,可以使用 Azure 门户导出模板。 导出模板有助于了解部署资源的语法和属性。 可以通过从导出的模板开始,并对其进行修改以满足你的需求来自动执行将来的部署。 在支持 Terraform 模板之前,需要手动翻译导出的模板。

尽管 Terraform 不提供与 Bicep 相同的门户集成,但可以使用 Azure Export for Terraform 在 Terraform 管理下接管现有的 Azure 基础结构。 适用于 Terraform 的 Azure 导出是一个由 Microsoft 拥有和维护的开源工具,位于 GitHub 的 Azure/aztfexport 存储库上

带外更改

带外配置更改是在工具上下文之外对设备配置所做的更改。 例如,假设你使用 Bicep 或 Terraform 部署虚拟机规模集。 如果通过门户更改虚拟机规模集,则该更改将是“带外”的,并且不会被您的 IaC 工具监测到。

如果正在使用 Bicep,则带外更改应与 Bicep 和 ARM 模板代码协调,以避免在下次部署时覆盖这些更改。 这些更改不会阻止部署。

如果使用 Terraform,则需要将带外更改导入 Terraform 状态并更新 HCL。

因此,如果环境涉及频繁的带外更改,Bicep 会更加用户友好。 在使用 Terraform 时,应该尽量减少带外更改。

云框架

云采用框架(CAF)是一系列文档、最佳做法和工具,可在整个云旅程中加速云采用。 Azure 提供用于部署登陆区域的原生服务。 Bicep 通过基于 ARM 模板和登陆区域实现的门户体验简化了这一过程。 Terraform 利用 Enterprise-Scale 着陆区模块 来部署、管理和运营 Azure。

概要

Bicep 和 Terraform 提供了许多用户友好的基础结构和集成功能。 这些功能使实现和管理自动化技术变得更加容易。 在确定最适合你的环境时,请务必考虑是部署到多个云,还是基础结构由多云环境或混合云环境组成。 此外,请务必考虑本文中讨论的 9 项功能,以便为组织做出最佳选择。