如何通过Bicep将Log Analytics工作区添加到现有AMPLS并解决BCP165错误
解决方案:跨资源组/订阅关联Log Analytics工作区到AMPLS
Bicep 实现方案
错误原因
原代码触发BCP165错误是因为:ampls资源的作用域(另一个资源组/订阅)与主Bicep文件的部署作用域不一致,而amplsScope作为其子资源继承了父资源的作用域,违反了Bicep中「资源计算作用域必须与部署文件作用域匹配」的规则,必须通过模块切换作用域解决。
正确实现步骤
创建关联模块(ampls-link-law.bicep)
该模块部署在AMPLS所在的资源组内,负责创建关联资源:param amplsName string param linkedResourceId string param amplsScopeName string // 引用当前作用域下已存在的AMPLS resource ampls 'microsoft.insights/privatelinkscopes@2021-07-01-preview' existing = { name: amplsName } // 创建关联资源 resource amplsScope 'microsoft.insights/privatelinkscopes/scopedresources@2021-07-01-preview' = { parent: ampls name: amplsScopeName properties: { linkedResourceId: linkedResourceId } }主Bicep文件调用模块
在主文件中引用Log Analytics工作区,并将模块部署到AMPLS所在的资源组:param lawSubId string param lawRg string param lawName string param amplsSubscriptionId string param amplsRg string param amplsName string param amplsScopeName string // 引用跨订阅/资源组的Log Analytics工作区 resource law 'Microsoft.OperationalInsights/workspaces@2022-10-01' existing = { scope: resourceGroup(lawSubId, lawRg) name: lawName } // 调用模块,切换到AMPLS的资源组部署关联 module linkAmplsLaw './ampls-link-law.bicep' = { name: 'link-ampls-law-deployment' scope: resourceGroup(amplsSubscriptionId, amplsRg) params: { amplsName: amplsName linkedResourceId: law.id amplsScopeName: amplsScopeName } }
Azure CLI 实现方案
# 配置变量 LAW_SUBSCRIPTION="你的Log Analytics订阅ID" LAW_RG="你的Log Analytics资源组名" LAW_NAME="你的Log Analytics工作区名" AMPLS_SUBSCRIPTION="你的AMPLS订阅ID" AMPLS_RG="你的AMPLS资源组名" AMPLS_NAME="你的AMPLS名称" SCOPED_RESOURCE_NAME="自定义关联名称" # 获取Log Analytics工作区ID LAW_ID=$(az monitor log-analytics workspace show --subscription $LAW_SUBSCRIPTION --resource-group $LAW_RG --name $LAW_NAME --query id -o tsv) # 创建关联 az monitor private-link-scope scoped-resource create \ --subscription $AMPLS_SUBSCRIPTION \ --resource-group $AMPLS_RG \ --scope-name $AMPLS_NAME \ --name $SCOPED_RESOURCE_NAME \ --linked-resource-id $LAW_ID
PowerShell 实现方案
# 配置变量 $lawSubscriptionId = "你的Log Analytics订阅ID" $lawResourceGroup = "你的Log Analytics资源组名" $lawName = "你的Log Analytics工作区名" $amplsSubscriptionId = "你的AMPLS订阅ID" $amplsResourceGroup = "你的AMPLS资源组名" $amplsName = "你的AMPLS名称" $scopedResourceName = "自定义关联名称" # 获取Log Analytics工作区ID Set-AzContext -Subscription $lawSubscriptionId $lawId = (Get-AzOperationalInsightsWorkspace -ResourceGroupName $lawResourceGroup -Name $lawName).Id # 创建关联 Set-AzContext -Subscription $amplsSubscriptionId New-AzMonitorPrivateLinkScopeScopedResource ` -ResourceGroupName $amplsResourceGroup ` -ScopeName $amplsName ` -Name $scopedResourceName ` -LinkedResourceId $lawId
内容的提问来源于stack exchange,提问作者GetShifting
相关产品推荐
相关产品推荐

