比较 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 和其他云(s)
  • 本地工作负荷

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

CLI 工具

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

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

  • az bicep:az bicep 命令允许执行安装 Bicep 以及生成和发布 Bicep 文件等任务。
  • az deployment:有关如何使用 Bicep 和 Azure CLI 部署资源的文章介绍了如何将 Azure CLI 与 Bicep 文件配合使用,将资源部署到 Azure。

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

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

Processing

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

身份验证

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

Azure 集成

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

门户集成

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

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

带外更改

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

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

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

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

云框架

云采用框架(CAF)是一系列文档、最佳做法和工具,可在整个云旅程中加速云采用。 Azure 提供用于部署登陆区域的本机服务。 Bicep 使用基于 ARM 模板和登陆区域实现的门户体验简化了此过程。 Terraform 利用 企业规模登陆区域模块 来部署、管理和操作 Azure。

总结

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