浏览 Azure 资源管理器模板结构

已完成

在此单元中,你将了解如何使用 Azure 资源管理器模板(ARM 模板)实现基础结构即代码。 你将探索 ARM 模板的各个部分,了解如何将 ARM 模板部署到 Azure,并深入探究 ARM 模板的资源细节。

什么是基础结构即代码?

“基础结构即代码”允许你通过代码描述应用程序所需的基础结构。

通过基础结构即代码,你可以维护应用程序代码和在中央代码存储库中部署应用程序所需的所有内容。 基础结构即代码的优点是:

  • 一致的配置
  • 改进的可伸缩性
  • 更快的部署
  • 更好的可跟踪性

此视频介绍了基础结构即代码:

什么是 ARM 模板?

ARM 模板是 JavaScript 对象表示法 (JSON) 文件,定义部署的基础结构和配置。 此模板使用声明性语法。 声明性语法是一种构建结构和元素的方法,这些结构和元素概述了资源的外观,而不是描述控制流。 声明性语法不同于“命令性语法”,后者使用命令让计算机来执行。 命令性脚本侧重于指定部署资源过程中的每个步骤。

ARM 模板使你能够声明要部署的内容,而无需编写创建它的编程命令序列。 在 ARM 模板中,可以指定资源和这些资源的属性。 然后,Azure 资源管理器使用这些信息以有组织且一致的方式部署资源。

使用 ARM 模板的益处

ARM 模板使你能够实现部署自动化并使用基础结构即代码 (IaC) 的做法。 模板代码将成为基础结构和开发项目的一部分。 与应用程序代码一样,你可以将 IaC 文件存储在源存储库中并对它进行版本控制。

ARM 模板是幂等的,这意味着你可以多次部署同一模板并获取处于相同状态的相同资源类型。

资源管理器协调资源的部署操作,以便按正确的顺序创建资源。 如果可能,还会并行创建资源,因此 ARM 模板部署会比脚本部署更快完成。

示意图显示了模板处理过程的映射,其中只采用了一个调用来处理模板,而不是采用多个调用来处理脚本。

资源管理器还有内置验证。 它会在开始部署之前检查模板以确保部署成功。

如果部署变得更复杂了,可以将 ARM 模板拆分为更小的可重用组件。 然后在部署时将这些较小的模板链接在一起。 此外,还可以在其他模板中嵌套模板。

在 Azure 门户中,可以查看部署历史记录并获取有关部署状态的信息。 门户显示所有参数和输出的值。

还可以将 ARM 模板集成到诸如 Azure Pipelines 等持续集成和持续部署 (CI/CD) 工具中,这些工具可以自动执行发布管道,从而实现快速可靠的应用程序和基础结构更新。 通过使用 Azure DevOps 和 ARM 模板任务,可以持续构建和部署项目。

ARM 模板文件结构

在编写 ARM 模板时,你需要了解组成模板的所有部分以及它们的作用。 ARM 模板文件由下列元素组成:

元素 说明
架构 一个必需的部分,用于定义描述 JSON 数据结构的 JSON 架构文件的位置。 所用版本号取决于部署范围和 JSON 编辑器。
contentVersion 一个必需的部分,用于定义模板的版本(例如 1.0.0.0)。 可以使用此值记录模板中的重大更改,从而确保部署正确的模板。
apiProfile 一个可选部分,用于定义资源类型的 API 版本集合。 使用此值即可不必为模板中的每个资源指定 API 版本。
parameters 一个可选部分,可在其中定义部署期间提供的值。 可以在参数文件中、命令行参数或 Azure 门户中提供这些值。
variables 一个可选部分,可在其中定义用于简化模板语言表达式的值。
functions 一个可选部分,可在其中定义模板中可用的用户定义函数。 当在模板中重复使用复杂表达式时,用户定义函数可以简化模板。
resources 一个必需的部分,用于定义要在资源组或订阅中部署或更新的实际项。
output 一个可选部分,可在其中指定将在部署结束时返回的值。

将 ARM 模板部署到 Azure

可以通过以下方法之一将 ARM 模板部署到 Azure:

  • 部署本地模板
  • 部署已链接的模板
  • 在持续部署管道中进行部署

本模块重点介绍如何部署本地 ARM 模板。 在将来的 Learn 模块中,你将了解如何部署更复杂的基础结构以及如何与 Azure Pipelines 集成。

若要部署本地模板,需要在本地安装 Azure PowerShellAzure CLI

首先,使用 Azure CLI 或 Azure PowerShell 登录到 Azure。

az login

接下来,定义资源组。 可以使用已定义的资源组或使用以下命令创建新的资源组。 可以从以下位置获取可用位置值:az account list-locations (CLI) 或 Get-AzLocation (PowerShell)。 可以使用 az configure --defaults location=<location> 配置默认位置。

az group create \
  --name {name of your resource group} \
  --location "{location}"

若要在资源组中启动模板部署,请使用 Azure CLI 命令 az deployment group create 或 Azure PowerShell 命令 New-AzResourceGroupDeployment

提示

az deployment group createaz group deployment create 之间的区别在于,az group deployment create 是一个将被弃用的旧命令,将被 az deployment group create 替换。 因此,建议使用 az deployment group create 在资源组范围下部署资源。

这两个命令都需要资源组、区域和部署名称,以便你可以在部署历史记录中轻松识别它。 为方便起见,练习将创建一个用于存储模板文件路径的变量。 此变量使你能够更轻松地运行部署命令,因为无需在每次部署时都重新键入路径。 下面是一个示例:

若要运行此部署命令,必须具有 Azure CLI 的 最新版本

templateFile="{provide-the-path-to-the-template-file}"
az deployment group create \
  --name blanktemplate \
  --resource-group myResourceGroup \
  --template-file $templateFile

使用链接模板部署复杂的解决方案。 可以将一个模板拆分为许多模板,并通过一个主模板来部署这些模板。 在你部署主模板时,会触发链接的模板的部署。 可以使用 SAS 令牌来存储和保护已链接的模板。

CI/CD 管道自动创建和部署开发项目,其中包括 ARM 模板项目。 用于模板部署的两个最常见的管道是 Azure PipelinesGitHub Actions

有关这两种部署类型的更多信息,请参阅其他模块。

将资源添加到模板

若要将资源添加到模板中,你需要知道资源提供程序及其资源类型。 此组合的语法的形式为 {resource-provider}/{resource-type}。 例如,若要将存储帐户资源添加到模板中,你需要 Microsoft.Storage 资源提供程序。 此提供程序的类型之一是 storageAccount。 因此,资源类型显示为 Microsoft.Storage/storageAccounts。 可以使用 Azure 服务的资源提供程序列表来查找所需的提供程序。

定义了提供程序和资源类型后,需要了解要使用的每个资源类型的属性。 有关详细信息,请参阅在 Azure 资源管理器模板中定义资源。 若要查找资源,请查看左侧列中的列表。 请注意,属性是按 API 版本排序的。

屏幕截图显示了 Microsoft 文档页,其中显示了所选的存储帐户文档。

以下是“存储帐户”页中列出的一些属性的示例:

屏幕截图显示了 Microsoft 文档页,其中显示了一些存储帐户属性。

对于我们的存储示例,模板可能如下所示:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.1",
  "apiProfile": "",
  "parameters": {},
  "variables": {},
  "functions": [],
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2023-05-01",
      "name": "learntemplatestorage123",
      "location": "westus",
      "sku": {
        "name": "Standard_LRS"
      },
      "kind": "StorageV2",
      "properties": {
        "supportsHttpsTrafficOnly": true
      }
    }
  ],
  "outputs": {}
}