部署资源时,可以指定部署为增量更新还是完整更新。 这两种模式之间的区别在于资源管理器如何处理资源组中不在模板中的现有资源。
对于这两种模式,资源管理器都会尝试创建模板中指定的所有资源。 如果资源组中已存在资源并且其设置保持不变,则不会对该资源执行任何作。 如果更改资源的属性值,则会使用这些新值更新资源。 如果尝试更新现有资源的位置或类型,部署将失败并显示错误。 相反,部署一个具有您所需位置或类型的新资源。
默认模式为增量模式。
在增量模式下,资源管理器保留资源组中存在但未在模板中指定的 未更改 的资源。 模板中的资源 将添加到 资源组。
重要
在增量模式下重新部署现有资源时,将重新应用所有属性。 不会以增量方式添加属性。 常见的误解是认为模板中未指定的属性保持不变。 如果未指定某些属性,资源管理器会将部署解释为覆盖这些值。 模板中不包含的属性将重置为默认值。 指定资源的所有非默认值,而不仅仅是要更新的那些值。 模板中的资源定义始终包含资源的最终状态。 它不能表示对现有资源的部分更新。
警告
在极少数情况下,可以在资源或某个子资源上指定属性。 两个常见示例是 虚拟网络上的子网 和 Web 应用的站点配置值。 在这些情况下,必须仔细处理增量更新。
对于子网,请通过 subnets
Microsoft.Network/virtualNetworks 资源上的属性指定值。 请勿通过子资源 定义值Microsoft.Network/virtualNetworks/subnets。 只要子网在虚拟网络上定义,就可以重新部署虚拟网络,不会丢失子网。
对于站点配置值,这些值在子资源类型 Microsoft.Web/sites/config
中实现。 如果重新部署 Web 应用并为站点配置值指定空对象,则不会更新子资源。 但是,如果提供新的站点配置值,则会更新子资源类型。
在完整模式下,资源管理器 删除 资源组中存在但未在模板中指定的资源。
注意
在完全模式下部署模板之前,请始终使用 what-if 操作。 What-if向您展示将被创建、删除或修改的资源。 使用 what-if 以避免意外删除资源。
如果模板包含未部署的资源,因为 条件 的计算结果为 false,则结果取决于用于部署模板的 REST API 版本。 如果使用的版本早于 2019-05-10, 则不会删除该资源。 使用 2019-05-10 或更高版本时,资源 将被删除。 最新版本的 Azure PowerShell 和 Azure CLI 会删除资源。
请谨慎使用包含 复制循环的完整模式。 解析复制循环后未在模板中指定的任何资源将被删除。
如果部署到模板中的多个资源组,则可以删除部署操作中指定的资源组中的资源。 辅助资源组中的资源不会被删除。
资源类型处理完整模式删除的方式存在一些差异。 当父资源不在以完整模式部署的模板中时,将自动删除该资源。 某些子资源在不出现在模板中时不会被自动删除。 但是,如果删除父资源,则会删除这些子资源。
例如,如果资源组包含 DNS 区域(Microsoft.Network/dnsZones
资源类型)和 CNAME 记录(Microsoft.Network/dnsZones/CNAME
资源类型),则 DNS 区域是 CNAME 记录的父资源。 如果使用完整模式进行部署,并且未在模板中包含 DNS 区域,则同时删除 DNS 区域和 CNAME 记录。 如果在模板中包含 DNS 区域,但不包括 CNAME 记录,则不会删除 CNAME。
有关资源类型如何处理删除的列表,请参阅针对完全模式部署的 Azure 资源删除。
如果资源组 已锁定,则完整模式不会删除资源。
若要说明增量模式与完整模式之间的差异,请考虑以下方案。
资源组 包含:
- 资源 A
- 资源 B
- 资源 C
模板 包含:
- 资源 A
- 资源 B
- 资源 D
以 增量 模式部署时,资源组具有:
- 资源 A
- 资源 B
- 资源 C
- 资源 D
在 完整 模式下部署时,将删除 Resource C。 资源组具有:
- 资源 A
- 资源 B
- 资源 D
若要使用 PowerShell 进行部署时设置部署模式,请使用参数 Mode
。
New-AzResourceGroupDeployment `
-Mode Complete `
-Name ExampleDeployment `
-ResourceGroupName ExampleResourceGroup `
-TemplateFile c:\MyTemplates\storage.json
若要使用 Azure CLI 进行部署时设置部署模式,请使用 mode
参数。
az deployment group create \
--mode Complete \
--name ExampleDeployment \
--resource-group ExampleResourceGroup \
--template-file storage.json
以下示例显示了一个设置为增量部署模式的链接模板:
"resources": [
{
"type": "Microsoft.Resources/deployments",
"apiVersion": "2020-10-01",
"name": "linkedTemplate",
"properties": {
"mode": "Incremental",
<nested-template-or-external-template>
}
}
]
- 若要了解如何创建资源管理器模板,请参阅了解 ARM 模板的结构和语法。
- 若要了解如何部署资源,请参阅 使用 ARM 模板和 Azure PowerShell 部署资源。
- 若要查看资源提供程序的操作,请参阅 Azure REST API。