Azure Template Spec更新参数名后调用报错,疑似缓存问题求助
我有一个版本为ado的Azure Template Spec,之前运行正常。近期将参数名从location修改为aslocation,并用PowerShell的Set-AzTemplateSpec命令更新了同版本ado的模板规范。但调用时出现双向报错:
- 使用新参数名
aslocation时,抛出错误:
Error BCP037: The property "aslocation" is not allowed on objects of type "params". Permissible properties include "location"
- 使用旧参数名
location时,同样报错:
New-AzResourceGroupDeployment: Cannot retrieve the dynamic parameters for the cmdlet. D:\git\IaC\Azure\main.bicep(4,5) : Error BCP035: The specified "object" declaration is missing the following required properties: "location". D:\git\IaC\Azure\main.bicep(5,7) : Error BCP089: The property "aslocation" is not allowed on objects of type "params". Did you mean "location"?
已确认以下情况:
- Azure CLI和PowerShell均出现该问题
- VS Code集成终端及独立PowerShell/CMD终端都受影响
- 模板规范已在门户中确认更新完成
- 问题持续多日,重启设备后仍未解决
强制清理本地缓存
- PowerShell:执行
Clear-AzContext清除当前上下文,再用Connect-AzAccount重新登录 - Azure CLI:执行
az account clear,再az login重新登录 - 手动删除Bicep本地缓存:
- Windows:找到
%USERPROFILE%\.bicep\cache目录,删除所有文件 - Linux/macOS:执行
rm -rf ~/.bicep/cache
- Windows:找到
- PowerShell:执行
用模板规范完整ID直接部署
绕过本地版本缓存,直接调用Azure端最新内容:- 获取模板规范完整ID:
Get-AzTemplateSpec -Name <模板名称> -ResourceGroupName <资源组名> -Version ado | Select-Object Id - PowerShell部署示例:
New-AzResourceGroupDeployment -ResourceGroupName <目标资源组> -TemplateSpecId <获取到的完整ID> -aslocation <目标区域> - Azure CLI部署示例:
az deployment group create --resource-group <目标资源组> --template-spec <获取到的完整ID> --parameters aslocation=<目标区域>
- 获取模板规范完整ID:
遵循版本不可变原则,创建新版本
Azure Template Spec的版本设计为不可变,虽然Set-AzTemplateSpec允许更新同版本,但这是反最佳实践,极易引发缓存和版本不一致问题。建议直接创建新版本(比如ado-v2或带日期的版本号),用New-AzTemplateSpec发布新版本后,调用新版本部署。确认Azure端模板内容
导出模板规范到本地,验证参数是否真的更新:Export-AzTemplateSpec -ResourceGroupName <资源组名> -Name <模板名称> -Version ado -OutputFolder ./temp-spec打开导出的Bicep文件,确认参数已改为
aslocation,确保Azure端的模板确实是最新状态。
内容的提问来源于stack exchange,提问作者th0bb35

