使用BICEP部署资源时,能否追加标签而非替换现有标签?
在BICEP中实现资源组标签追加的方法
直接设置tags属性会覆盖资源组的现有标签,要实现追加(保留旧标签+新增/更新指定标签),可以通过引用现有资源组并合并标签的方式纯BICEP实现,无需额外脚本。
实现代码
param resourceGroupName string param location string param lastDeployedBy string = 'deliverypl' param deploymentDateTime string = utcNow('dd-MM-yyyy HH:mm') // 引用已存在的资源组,获取当前的标签集合 resource existingResourceGroup 'Microsoft.Resources/resourceGroups@2021-04-01' existing = { name: resourceGroupName } // 合并现有标签与新标签:保留所有旧标签,新增/更新指定的追踪标签 var mergedTags = union(existingResourceGroup.tags, { LastDeployedBy: lastDeployedBy LastDeployedDateUTC: deploymentDateTime }) // 更新资源组标签(必须指定location属性,即使位置未变更) resource updatedResourceGroup 'Microsoft.Resources/resourceGroups@2021-04-01' = { name: resourceGroupName location: location tags: mergedTags }
关键说明
- 引用现有资源组:通过
existing关键字获取目标资源组的当前状态,包括已存在的标签。 - 合并标签:使用
union()函数将现有标签和新标签合并,该函数会:- 保留所有原有标签
- 新增指定的新标签
- 如果原有标签与新标签重名,新标签会覆盖旧标签(适合更新部署时间这类需要实时刷新的标签)
- 必填属性:更新资源组时必须指定
location,即使资源组位置没有变化,这是ARM API的要求。
验证步骤
- 用你提供的初始代码创建测试资源组
- 手动为资源组添加自定义标签(如
Environment: Test) - 部署上述更新后的BICEP代码
- 查看资源组标签:自定义标签会保留,同时
LastDeployedBy和LastDeployedDateUTC标签会被新增/更新
内容的提问来源于stack exchange,提问作者p-deboer
相关产品推荐
相关产品推荐

