在我的二头肌文件中,我尝试引用现有的 applicationInsights。问题是引用的应用程序见解会根据输入参数而变化。
有3个可能的模块可以引用,每个模块都位于不同的订阅和资源组中。
param prefix string = ''
@allowed([
'dev'
'test'
'prod'
])
@description('Deployment environment type.')
param deploymentEnvironment string
var isProd = deploymentEnvironment == 'prod'
var isTest = deploymentEnvironment == 'dev'
var usingExistingAin = prefix == 'mrax' && (isProd || isTest)
var prodOrTestlabNameTest = isProd ? 'appInsightsName1' : 'appInsightsName2'
var subscriptionIdTest = usingExistingAin ? (isProd && usingExistingAin ? 'subscriptionID1' : 'subscriptionID2') : subscription().id
resource applicationInsightsResource 'Microsoft.Insights/components@2020-02-02' existing = {
name: usingExistingAin ? prodOrTestlabNameTest : appInsightsName
scope: resourceGroup(subscriptionIdTest, rsgNameTest)
}
(条件 isTest 是正确的,即使看起来不正确)
现在我收到此错误:
资源命名空间“订阅”无效。 (代码:InvalidResourceNamespace)
我可以采取哪些不同的措施来完成这项工作?
注意: 我不想使用 2 资源方法(下面的代码)来执行此操作,因为现在这会导致此错误
AuthorizationFailed","message":"对象 ID 为“objectId”的客户端“clientId”无权在范围“/subscriptions/subID/resourcegroups/resourceGroupName/providers/”上执行操作“Microsoft.Insights/components/read” Microsoft.Insights/components/appInsightsName' 或范围无效。如果最近授予了访问权限,请刷新您的凭据。”
param storageAccountName string
param location string = resourceGroup().location
@allowed([
'new'
'existing'
])
param newOrExisting string = 'new'
resource saNew 'Microsoft.Storage/storageAccounts@2023-04-01' = if (newOrExisting == 'new') {
name: storageAccountName
location: location
sku: {
name: 'Standard_LRS'
}
kind: 'StorageV2'
}
resource saExisting 'Microsoft.Storage/storageAccounts@2023-04-01' existing = if (newOrExisting == 'existing') {
name: storageAccountName
}
output storageAccountId string = ((newOrExisting == 'new') ? saNew.id : saExisting.id)
我将将此标记为我问题的答案,尽管我觉得这是二头肌验证的一个更深层次的问题。 我在部署中没有注意到的是,不同的环境(由前缀确定)使用不同的订阅。 这意味着我不需要使用 subscription 来设置我的范围。 下面的代码有效
scope: resourceGroup(resourceGroupName)