什么是 Azure 资源管理器?

已完成

你和你的团队花了一些时间来了解基础结构即代码的优点以及可用的不同方法。 你所在的公司正在快速发展,你的团队知道它会将大量资源部署到 Azure。 作为一个团队,你已决定将声明性基础结构即代码作文适用于资源预配的方法。 团队不希望维护列出每个部署步骤的脚本。 在开始生成第一个模板的过程之前,需要了解 Azure 资源管理器的工作原理。 调查可用于 Azure 的模板的类型,将帮助你确定基础结构即代码策略中的后续步骤。

在本单元中,你将了解资源管理器和两种类型的资源管理器模板。

Azure 资源管理器概念

Azure 资源管理器是用于部署和管理 Azure 中的资源的服务。 可以使用资源管理器来创建、更新和删除 Azure 订阅中的资源。 可以使用许多工具(包括 Azure 门户)与资源管理器进行交互。 资源管理器还提供一系列其他功能(如访问控制、审核和标记)来帮助在部署后管理资源。

术语

使用资源管理器开始云之程时,必须了解一些术语和概念:

  • 资源:可在 Azure 平台上使用的可管理项。 资源的示例包括虚拟网络、虚拟机、存储帐户、Web 应用和数据库。

  • 资源组:用于保存 Azure 解决方案相关资源的逻辑容器。 资源组包括你想要作为组进行管理的资源。 大多数 Azure 资源包含在资源组中。 根据最适合解决方案的分组方式,确定哪些资源属于同一资源组。

    注意

    少数资源未包含在资源组中。 这些资源类型用于特定目的,例如管理访问控制和强制执行策略。 你将在后面的模块中详细了解这些资源。

  • 订阅:资源和资源组的逻辑容器和计费边界。 每个 Azure 资源和资源组仅与一个订阅关联。

  • 管理组:用于管理多个订阅的逻辑容器。 可以定义管理组,订阅,资源组和资源的层次结构,以便通过继承有效地管理访问、策略和符合性。

  • Azure 资源管理器模板(ARM 模板):一个模板文件,用于定义一个或多个要部署到资源组、订阅、管理组或租户的资源。 可以使用模板以一致且可重复的方式部署资源。 有两种类型的 ARM 模板文件:JSON 和 Bicep。 本模块重点介绍 Bicep。

优点

资源管理器提供许多与基础结构即代码资源预配相关的优点和功能:

  • 可以以组的形式部署、管理和监视解决方案中的资源,而不是单独处理这些资源。
  • 可以在整个开发生命周期内重复部署解决方案,并确保以一致的状态部署资源。
  • 可以通过声明性模板(而不是使用脚本)来管理基础结构。
  • 可以指定资源依赖关系,以确保按正确的顺序部署资源。

操作:控制平面和数据平面

可以在 Azure 中执行两种类型的操作:控制平面操作和数据平面操作。 使用控制平面可管理订阅中的资源。 使用数据平面可访问资源公开的功能。

例如,使用控制平面操作创建虚拟机,但使用数据平面操作通过远程桌面协议 (RDP) 连接到虚拟机。

控制面板

从任意 Azure 工具、API 或软件开发工具包 (SDK) 发送请求时,资源管理器将会接收该请求,并对其进行身份验证和授权。 然后,它会将请求发送到 Azure 资源提供程序,后者将执行请求的操作。 由于所有请求是通过同一个 API 处理的,因此在 Azure 中提供的所有不同的工具中会看到一致的结果和功能。

下图显示了资源管理器在处理 Azure 请求中发挥的作用:

显示 Azure 资源管理器如何接受来自所有 Azure 客户端和库的请求的关系图。

所有控制平面操作请求都发送到资源管理器 URL。 例如,用于虚拟机的创建或更新操作是控制平面操作。 下面是此操作的请求 URL:

PUT https://management.azure.com/subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.Compute/virtualMachines/{virtualMachineName}?api-version=2022-08-01

控制平面了解需要创建哪些资源以及已存在哪些资源。 资源管理器了解这些请求之间的差异,因此不会创建相同的资源或删除现有资源,但有多种方法可替代此行为。

数据平面

启动数据平面操作时,会将请求发送到 Azure 订阅中的特定终结点。 例如,Azure AI 服务中的检测语言操作是一项数据平面操作,因为请求 URL 是:

POST https://eastus.api.cognitive.microsoft.com/text/analytics/v2.0/languages

资源管理器功能(如访问控制和锁定等)并不总是适用于数据平面操作。 例如,用户可能没有使用控制平面管理虚拟机的权限,但用户可以登录到操作系统。

什么是 ARM 模板?

Azure 资源管理器模板是用于定义部署的基础结构和配置的文件。 编写 ARM 模板时,需要对资源预配采用声明性方法。 这些模板介绍部署中的每个资源,但不介绍如何部署资源。 将模板提交到资源管理器进行部署时,控制平面可以有组织且一致的方式部署定义的资源。 在上一单元中,你了解了命令性代码和声明性代码之间的差异。

为什么使用 ARM 模板?

对于资源预配,使用 ARM 模板(JSON 或 Bicep)有很多好处。

  • 可重复的结果:ARM 模板是幂等的,这意味着你可以重复部署同一模板并获取相同的结果。 该模板不复制任何资源。

  • 业务流程:将模板部署提交到资源管理器时,将并行部署模板中的资源。 此过程可使部署更快完成。 如果一个资源依赖于另一个资源,则资源管理器按正确的顺序协调这些部署。

  • 预览:借助 Azure PowerShell 和 Azure CLI 提供的假设工具,可以在模板部署之前预览对环境所做的更改。 此工具详细说明了你的模板要进行的任何创建、修改和删除。

  • 测试和验证:你可以在部署之前使用 Bicep Linter 之类的工具来检查模板的质量。 提交到资源管理器的 ARM 模板在部署过程之前进行验证。 在预配资源之前,此验证会提醒你模板中出现的任何错误。

  • 模块化:可将模板分解为较小的组件,并在部署时将其链接到一起。

  • CI/CD 集成:ARM 模板可以集成到多个 CI/CD 工具中,例如 Azure DevOps 和 GitHub Actions。 可以使用这些工具通过源代码管理对模板进行版本控制并生成发布管道。

  • 扩展性:使用部署脚本,可以从 ARM 模板中运行 Bash 或 PowerShell 脚本。 这些脚本在部署时执行数据平面操作等任务。 通过扩展性,可以使用单个 ARM 模板来部署完整的解决方案。

JSON 和 Bicep 模板

目前可以使用两种类型的 ARM 模板:JSON 模板和 Bicep 模板。 JavaScript 对象表示法 (JSON) 是多种语言可以使用的开放标准文件格式。 Bicep 是一种特定于域的新语言,最近开发用于使用更简单的语法创作 ARM 模板。 可以将任一模板格式用于 ARM 模板和资源部署。