如何在单个Bicep文件中部署多资源组资源并跨组引用?
解决方案:跨资源组部署Event Grid系统主题并引用
一、直接在当前Bicep文件指定资源组部署系统主题
Event Grid系统主题要求与源资源(你的存储账户)处于同一资源组,因此需要给系统主题资源指定scope属性,让它部署到resource-group-a,其他资源仍保留在resource-group-b。
修改后的Bicep代码
// 定义可复用参数 param subscriptionId string = 'xxx' // 替换为你的订阅ID param resourceGroupNameA string = 'resource-group-a' param resourceGroupNameB string = 'resource-group-b' param location string = 'eastus' // 替换为你的资源区域 // 声明resource-group-a的作用域 var rgAScope = resourceGroup(subscriptionId, resourceGroupNameA) // 在resource-group-a中创建Event Grid系统主题 resource eventGridTopic 'Microsoft.EventGrid/systemTopics@2021-12-01' = { name: 'my-cool-topic' scope: rgAScope location: location properties: { source: '/subscriptions/${subscriptionId}/resourceGroups/${resourceGroupNameA}/Microsoft.Storage/storageAccounts/nice-storage' topicType: 'Microsoft.Storage.StorageAccounts' } } // 示例:在resource-group-b中创建关联的事件订阅 resource eventGridSubscription 'Microsoft.EventGrid/systemTopics/eventSubscriptions@2021-12-01' = { parent: eventGridTopic name: 'my-event-subscription' properties: { destination: { endpointType: 'AzureFunction' properties: { // 指向resource-group-b中的目标资源 resourceId: '/subscriptions/${subscriptionId}/resourceGroups/${resourceGroupNameB}/Microsoft.Web/sites/my-function-app/functions/my-function' } } filter: { includedEventTypes: [ 'Microsoft.Storage.BlobCreated' ] } } }
部署命令
保持原部署命令不变,主部署目标为resource-group-b,系统主题会通过scope自动部署到resource-group-a:
az deployment group create --name my-cool-group --resource-group resource-group-b --template-file mybicepfile.bicep
二、单独文件创建系统主题,在当前文件引用
如果已单独在resource-group-a部署了系统主题,可通过existing关键字+scope在当前Bicep文件中引用该资源。
步骤1:单独部署系统主题到resource-group-a
创建独立Bicep文件(如eventgrid-topic.bicep):
param subscriptionId string = 'xxx' param resourceGroupNameA string = 'resource-group-a' param location string = 'eastus' resource eventGridTopic 'Microsoft.EventGrid/systemTopics@2021-12-01' = { name: 'my-cool-topic' location: location properties: { source: '/subscriptions/${subscriptionId}/resourceGroups/${resourceGroupNameA}/Microsoft.Storage/storageAccounts/nice-storage' topicType: 'Microsoft.Storage.StorageAccounts' } }
执行部署命令:
az deployment group create --name deploy-topic --resource-group resource-group-a --template-file eventgrid-topic.bicep
步骤2:在当前文件引用已存在的系统主题
修改原Bicep文件,添加对resource-group-a中系统主题的引用:
param subscriptionId string = 'xxx' param resourceGroupNameA string = 'resource-group-a' param resourceGroupNameB string = 'resource-group-b' param location string = 'eastus' // 引用resource-group-a中已存在的系统主题 var rgAScope = resourceGroup(subscriptionId, resourceGroupNameA) resource eventGridTopic 'Microsoft.EventGrid/systemTopics@2021-12-01' existing = { name: 'my-cool-topic' scope: rgAScope } // 继续创建resource-group-b中的关联资源(如事件订阅) resource eventGridSubscription 'Microsoft.EventGrid/systemTopics/eventSubscriptions@2021-12-01' = { parent: eventGridTopic name: 'my-event-subscription' properties: { destination: { endpointType: 'AzureFunction' properties: { resourceId: '/subscriptions/${subscriptionId}/resourceGroups/${resourceGroupNameB}/Microsoft.Web/sites/my-function-app/functions/my-function' } } filter: { includedEventTypes: [ 'Microsoft.Storage.BlobCreated' ] } } }
部署当前文件的命令不变:
az deployment group create --name my-cool-group --resource-group resource-group-b --template-file mybicepfile.bicep
内容的提问来源于stack exchange,提问作者houseofleft
相关产品推荐
相关产品推荐

