Compartilhar via

什么是 ARM 模板?

在迁移到云端的过程中,许多团队采用了敏捷开发方法。 这些团队快速迭代。 他们需要反复将其解决方案部署到云,并需要知道其基础结构处于一种可靠的状态。 随着基础结构成为迭代流程的一部分,运营和开发之间的划分消失了。 团队需要通过统一的过程来管理基础结构和应用程序代码。

为了应对这些挑战,实施自动化部署,并采用基础设施即代码的实践。 在代码中定义需要部署的基础结构。 基础设施代码是项目的一部分。 与应用代码一样,将基础结构代码存储在源存储库中并对其进行版本控制。 团队中的任何人都可以运行该代码并部署类似的环境。

若要为Azure解决方案实现基础结构即代码,请使用Azure Resource Manager模板(ARM 模板)。 该模板是一个 JavaScript 对象表示法(JSON)文件,用于定义project的基础结构和配置。 该模板使用声明性语法,使你可以指明要部署的内容,而不需要编写一系列编程命令来创建内容。 在该模板中,指定要部署的资源以及这些资源的属性。 还可以指定在哪个资源组中部署那些资源。

提示

我们引入了一种名为 Bicep 的新语言,它提供与 ARM 模板相同的功能,但语法更易于使用。 在部署过程中,每个 Bicep 文件都将自动转换为 ARM 模板。 如果您正在考虑基础设施即代码选项,我们建议您查看 Bicep。 有关详细信息,请参阅 什么是 Bicep?

为什么选择 ARM 模板?

如果要尝试在使用 ARM 模板和其他基础结构即代码服务之间做出选择,请考虑使用模板的以下优点:

  • 声明性语法:ARM 模板允许以声明方式创建和部署整个Azure基础结构。 例如,您不仅可以部署虚拟机,还可以部署网络基础设施、存储系统以及您所需的任何其他资源。

  • 可反复效果:在整个开发生命周期内反复部署基础结构,并确保以一致的方式部署资源。 模板是幂等的,这意味着,可以多次部署同一模板,并获得处于相同状态的相同资源类型。 可以开发一个模板来表示所需的状态,而无需开发大量的独立模板来表示更新。 例如,以下文件创建一个存储账户。 如果部署此模板和具有指定属性的storage帐户已存在,则不会进行更改。

    {
      "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
      "contentVersion": "1.0.0.0",
      "parameters": {
        "location": {
          "type": "string",
          "defaultValue": "[resourceGroup().location]"
        }
      },
      "resources": [
        {
          "type": "Microsoft.Storage/storageAccounts",
          "apiVersion": "2025-06-01",
          "name": "mystorageaccount",
          "location": "[parameters('location')]",
          "sku": {
            "name": "Standard_LRS"
          },
          "kind": "StorageV2"
        }
      ]
    }
    
  • 编排:您无需担心操作顺序的复杂性。 Resource Manager协调相互依赖资源的部署,以便按正确的顺序创建它们。 如果可能,Resource Manager并行部署资源,因此部署的完成速度比串行部署更快。 通过一个命令部署模板,而无需使用多个强制性命令。

    关系图显示了命令式部署和声明式部署之间的差异。

  • 模块化文件:可将模板分解为较小的可重用组件,并在部署时将其链接到一起。 还可以在一个模板中嵌套另一个模板。

  • 创建任何Azure资源:可以立即在模板中使用新的Azure服务和功能。 一旦资源提供程序引入了新资源,你就可以通过模板立即部署这些资源。 在使用新服务之前,无需等待工具或模块完成更新。

  • 扩展性:使用部署脚本时,可以将 PowerShell 或 Bash 脚本添加到模板。 使用部署脚本可扩展在部署过程中设置资源的功能。 可以在模板中包含脚本,也可以将其存储在外部源中并在模板中引用。 使用部署脚本,可以在单一 ARM 模板中完成端到端环境设置。

  • 测试:为确保模板遵循建议的准则,请使用 ARM 模板工具包 (arm-ttk) 进行测试。 此测试工具包是可从 GitHub 下载的 PowerShell 脚本。 使用此工具包,可以更轻松地使用模板语言开发专门技术。

  • 预览更改:在部署模板之前,请使用 What-if 操作来预览更改。 通过 What-if,可以看到要创建、更新或删除哪些资源,以及要更改的任何资源属性。 假设性操作检查您环境的当前状态,从而消除了对状态管理的需求。

  • 内置验证:只有在通过验证后才会部署模板。 Resource Manager在开始部署之前检查模板,以确保它成功。 你的部署不太可能会在半完成状态时停止。

  • 跟踪部署:在Azure portal中,可以查看部署历史记录并获取有关模板部署的信息。 可以查看已部署的模板、已传入的参数值,以及任何输出值。 其他基础结构即代码服务不是通过门户跟踪的。

    Azure portal 上的屏幕截图显示了部署历史记录。

  • 策略即代码:Azure Policy 是一个策略即代码框架,用于自动化治理。 如果使用 Azure 策略,通过模板部署时,将对不合规资源执行策略修正。

  • CI/CD 集成:可以将模板集成到持续集成和持续部署 (CI/CD) 工具中。 此集成自动化您的发布流水线,以快速和可靠地更新应用程序和基础设施。 通过使用 Azure DevOps 和Resource Manager模板任务,可以使用Azure Pipelines来持续生成和部署 ARM 模板项目。 若要了解详细信息,请参阅 VS project with pipelines教程:使用 Azure Pipelines 实现 Azure 资源管理器模板的持续集成

  • 可导出的代码:可以通过导出资源组的当前状态或查看特定部署所用的模板,来获取现有资源组的模板。 查看导出的模板是了解模板语法的有用方法。

  • 创作工具:可以使用 Visual Studio CodeVisual Studio 创作模板。

模板文件

在模板中,可以编写模板表达式来扩展 JSON 的功能。 这些表达式使用Resource Manager提供的 函数

模板包含以下节:

  • 参数 - 在部署期间提供使用相同模板时为不同环境自定义的值。

  • 变量 - 定义在模板中重用的值。 可以从参数值构造它们。

  • 用户定义的函数 - 创建自定义函数用于简化模板。

  • 资源 - 指定要部署的资源。

  • 输出 - 从已部署的资源返回值。

模板部署过程

部署模板时,Resource Manager将模板转换为 REST API作。 例如,当Resource Manager收到具有以下资源定义的模板时:

"resources": [
  {
    "type": "Microsoft.Storage/storageAccounts",
    "apiVersion": "2025-06-01",
    "name": "mystorageaccount",
    "location": "chinanorth",
    "sku": {
      "name": "Standard_LRS"
    },
    "kind": "StorageV2"
  },
]

它将定义转换为以下 REST API 操作,并将其发送到 Microsoft Storage 资源提供程序:

PUT
https://management.chinacloudapi.cn/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Storage/storageAccounts/mystorageaccount?api-version=2022-09-01
REQUEST BODY
{
  "location": "chinanorth",
  "sku": {
    "name": "Standard_LRS"
  },
  "kind": "StorageV2",
  "properties": {}
}

请注意,在资源模板中设置的 apiVersion 将用作 REST 操作的 API 版本。 可以重复部署模板,并相信它会继续工作。 通过使用相同的 API 版本,你就无需担心可能在更高版本中引入的破坏性变更。

若要部署模板,请使用以下任一选项:

模板设计

根据所需的解决方案管理方式来定义模板和资源组。 例如,可以通过单一模板将三层应用部署到单一资源组。

关系图显示了使用单个模板的三层应用程序部署。

无需在单一模板中定义整个基础结构。 通常,合理的做法是将部署要求划分成一组有针对性的模板。 可以轻松地将这些模板重复用于不同的解决方案。 要部署特定的解决方案,请创建链接所有所需模板的主模板。 下图显示了如何通过包含三个嵌套模板的父模板来部署三层解决方案。

关系图显示了使用嵌套模板的三层应用程序部署。

如果希望层具有不同的生命周期,可将这三个层部署到不同的资源组。 资源仍可以链接到其他资源组中的资源。

关系图显示了具有单独资源组的三层应用程序部署。

有关嵌套模板的信息,请参阅 使用 Azure Resource Manager 的链接模板。

共享模板

创建模板后,可能会希望与组织中的其他用户共享它。 模板规格使你能够将模板存储为资源类型。 使用基于角色的访问控制来管理模板规格访问权限。对模板规格拥有读取权限的用户可以部署模板,但不能更改模板。

此方法意味着可以安全地共享符合组织标准的模板。

获取支持

下面是为Azure Resource Manager(ARM)模板相关问题开具支持票证的步骤:

  1. 打开 Azure portal

  2. 选择右上角的“支持 + 故障排除”图标

  3. 在“简要描述问题”中输入 ARM 模板,然后选择“前往”

  4. 哪个服务出现问题?中,选择监视和管理中的门户,然后选择下一步

  5. 选择一个订阅,然后选择“下一步”。

  6. 选择“ARM 模板问题”,然后选择“下一步”

    请求 ARM 模板支持的屏幕截图。

后续步骤