我有一个模块,可将 Azure 服务总线发送者角色分配给应用服务的托管身份。 我需要将范围设置为服务总线的实际实例,但它与应用程序服务不在同一资源组中。
这是我的二头肌:
param principalId string
param roleDefinitionID string
param serviceBusName string
resource serviceBus 'Microsoft.ServiceBus/namespaces@2022-10-01-preview' existing = {
name: serviceBusName
}
resource azureServiceBusDataRoleDefinition 'Microsoft.Authorization/roleDefinitions@2022-04-01' existing = {
scope: subscription()
name: roleDefinitionID
}
resource AzureServiceBusRoleAssignment 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
name: guid(subscription().id, principalId, roleDefinitionID)
scope: serviceBus
properties: {
principalId: principalId
roleDefinitionId: azureServiceBusDataRoleDefinition.id
principalType: 'ServicePrincipal'
}
}
部署正在针对保存应用程序服务的资源组运行,因此无法找到服务总线。因此,我将上面的二头肌称为模块,并将范围设置为包含服务总线的资源组。
module azureServiceBusSenderPremissions './azureServiceBus-roleassignment.bicep' = if (useAzureServiceBus){
name: '${deployment().name}-bbb-${appServiceName}'
scope: resourceGroup(serviceBusResourceGroup)
params:{
principalId: appServicesResource.identity.principalId
roleDefinitionID: '69a216fc-b8fb-44d8-bc22-1f3c2cd27a39'
serviceBusName: serviceBusName
}
}
这行不通。它仍然尝试在错误的资源组下查找服务总线。 我收到此错误:
资源“Microsoft.ServiceBus/namespaces/providers”下 找不到资源组“appservice-resourceGroup”。
您的代码看起来很适合将
Azure Service Bus Sender
角色分配给另一个资源组中存在的应用程序服务的托管标识。
尝试以下步骤解决冲突并成功部署:
正如@Thomas所指出的,检查服务总线资源组参数是否准确,因为服务总线资源已存在。
还可以尝试在模块配置下添加
dependsOn
块以避免此类冲突,如下所示。
还在模块bicep代码中单独提供一个资源组名称参数,以便让服务总线所在的位置不会产生任何误解。
根据上述细微更改进行相应修改后,部署按预期正常工作。
module.bicep
:
param useAzureServiceBus bool = true
param serviceBusResourceGroup string = 'caronew'
resource appServicesResource 'Microsoft.Web/sites@2024-04-01' existing = {
name: appServiceName
}
module azureServiceBusSenderPremissions 'appser.bicep' = if (useAzureServiceBus){
name: '${deployment().name}-bbb-${appServiceName}'
scope: resourceGroup(serviceBusResourceGroup)
params:{
principalId: appServicesResource.identity.principalId
roleDefinitionID: '69a216fc-b8fb-44d8-bc22-1f3c2cd27a39'
serviceBusName: serviceBusName
}
dependsOn: [
appServicesResource
]
}
param principalId string
param roleDefinitionID string = '69a216fc-b8fb-44d8-bc22-1f3c2cd27a39'
param serviceBusName string = 'servicebusA'
resource serviceBus 'Microsoft.ServiceBus/namespaces@2022-10-01-preview' existing = {
name: serviceBusName
}
resource azureServiceBusDataRoleDefinition 'Microsoft.Authorization/roleDefinitions@2022-04-01' existing = {
scope: subscription()
name: roleDefinitionID
}
resource AzureServiceBusRoleAssignment 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
name: guid(subscription().id, principalId, roleDefinitionID)
scope: serviceBus
properties: {
principalId: principalId
roleDefinitionId: azureServiceBusDataRoleDefinition.id
principalType: 'ServicePrincipal'
}
}
部署成功: