比较 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 以下命令,例如:

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

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

Bicep 还提供一项功能,可轻松地将 Bicep 与 Azure Pipelines 集成。 Terraform 有类似的功能,但必须下载并安装 适用于 Visual Studio 的 Azure 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 功能,例如Azure Policy,以及每个功能如何与其他工具和语言交互。 Bicep 的预检验证功能可以确定策略是否拒绝资源,并在部署前失败。 因此,开发人员可以使用提供的 ARM 模板通过策略修正资源。 ARM 模板可用于为另一个资源创建策略分配,以便自动修正。 但是,部署策略不允许的资源时,Terraform 将失败。

门户集成

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

尽管 Terraform 不提供与 Bicep 相同的门户集成,但可以使用 Azure Terrafy 在 Terraform 管理下使用现有 Azure 基础结构。 (Azure Terrafy 是 Microsoft.) 拥有和维护的开源工具

带外更改

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

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

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

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

云框架

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

摘要

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