为什么使用部署堆栈?

已完成

你正在评估部署堆栈是否可为资源生命周期管理提供适当的功能。 你花了一些时间了解部署堆栈的功能,以及如何使用它来管理应用程序和 Azure 资源。 你想要详细了解你为何应考虑部署堆栈及其整体优势。

在本单元中,你将了解部署堆栈的优点。

部署堆栈的优点

部署堆栈可以为你的资源预配过程带来许多好处,包括:

  • 简化预配
  • 防止未经授权的更改
  • 可靠的资源清理
  • 标准化模板
  • 增强现有进程

简化预配

假设有一个需要跨多个订阅跨多个资源组部署的应用程序。 在标准部署中,必须在每个资源组的范围内发出多个创建操作。 部署管道需要设计为处理资源依赖关系和部署顺序。

借助部署堆栈,你可以使用单个命令部署应用程序。 在此示例中,在管理组级别界定部署堆栈时,在执行时,所有资源都会部署到相应的订阅和资源组。 通过单个部署命令以相同的方式处理应用程序的更新。

此过程显著减少了部署或修改应用程序所需的操作数。

防止未经授权的更改

部署堆栈提供了额外的安全和防护层,有助于防止对 Azure 资源进行未经授权的更改。

创建部署堆栈时,可以指定应用于堆栈管理的资源的权限。 这些权限(称为拒绝设置)用于防止未经授权的用户进行修改或删除。

拒绝设置在概念上听起来可能与 Azure 基于角色的访问控制 (RBAC) 和 Azure 锁类似。 RBAC 用于将特定角色分配给特定范围内的特定用户。 例如,将参与者角色分配给资源组范围内的用户。 锁用于防止在特定范围内修改或删除资源,而不考虑执行操作的用户。 例如,将只读锁置于订阅范围会阻止对所有资源的修改或删除,即使用户具有 RBAC 权限也是如此。

部署堆栈拒绝设置允许跨范围实现对资源集合的控制,它会取代可能存在的任何 RBAC 分配或锁。

可靠的资源清理

假设有一个在订阅中跨多个资源组部署的应用程序的开发环境。 若要删除环境并删除所有资源,必须针对资源组和资源发出多个删除操作。 如果资源之间存在任何依赖项,则删除操作可能会失败。 从序列中删除的资源也可能导致删除操作失败。

部署堆栈允许通过单个 API 调用删除堆栈及其所有资源,而无需了解依赖项。 此单一操作以可靠的方式移除资源,并提高移除速度。

删除堆栈管理的资源的另一个优点是节省成本。 删除不由部署堆栈管理的应用程序及其资源在很多时候是容易出错的手动工作。 可能会意外忘记删除某些资源,从而导致继续产生成本。 部署堆栈可解决此问题,充当成本管理工具,尤其是在处理临时环境时。

删除部署堆栈时,可以使用 actionOnUnmanage 属性来确定 Azure 如何处理堆栈中包含的资源、资源组和管理组。 Azure 可以删除资源、资源组和管理组,也可以拆离它们,这意味着资源不会删除,但不再由堆栈管理。

标准化流程和模板

创建和部署部署堆栈及其资源的过程与标准 Azure 部署几乎完全相同。 例如:

将 Bicep 文件部署到资源组的 Azure CLI 命令为:

az deployment group create \
    --resource-group rg-depositsApplication \
    --template-file ./main.bicep

用于在资源组范围内创建部署堆栈的 Azure CLI 命令为:

az stack group create \
    --name stack-deposits \
    --resource-group rg-depositsApplication \
    --template-file ./main.bicep \
    --action-on-unmanage detachAll \
    --deny-settings-mode none

部署堆栈支持使用 Bicep 文件、ARM JSON 模板或模板规格来定义堆栈中的资源。 使用 Azure CLI 或 Azure PowerShell 部署部署堆栈时,可以指向特定的模板文件(Bicep 文件或 ARM JSON 模板)或模板规格。无需更改你定义资源的方式。

增强现有进程

如果你已在使用基础结构即代码来管理资源到 Azure 的部署,则部署堆栈可让你更好地控制该过程。 如上一部分所述,创建部署堆栈的过程与创建基于资源组的部署的过程差别不大。 使用单个命令跨管理组、订阅和资源组进行部署的功能在部署堆栈中要简单得多。 资源安全性现在是使用堆栈的部署过程的一部分。