Azure Bicep部署Event Grid订阅失败:父资源未找到错误
问题排查:Event Grid订阅部署失败(ParentResourceNotFound)
错误信息
ERROR: {"status":"Failed","error":{"code":"DeploymentFailed","target":"/subscriptions/subscription/resourceGroups/rg-dev-policy-monitor/providers/Microsoft.Resources/deployments/evtgrid-56","message":"至少有一个资源部署操作失败。请列出部署操作以获取详细信息。请参阅https://aka.ms/arm-deployment-operations了解使用详情。","details":[{"code":"ParentResourceNotFound","message":"无法对类型为'systemTopics/eventSubscriptions'的资源执行'write'操作,因为父资源'/subscriptions/subscrition/resourceGroups/rg-dev-policy-monitor/providers/Microsoft.EventGrid/systemTopics/devpolicyinsightstopic'未找到。"}]}}
原Bicep代码
param eventGridSubName string = 'dev-eventgrid-sub' param topicName string = 'devpolicyinsightstopic' param functionAppResourceId string = '${resourceGroup().id}/providers/Microsoft.Web/sites/FN-PolicyMonitor' resource evtTopic 'Microsoft.EventGrid/topics@2023-06-01-preview' = { name: topicName location: 'australiaeast' properties: { source: subscription().id topicType: 'Microsoft.PolicyInsights.PolicyStates' } } resource evtGridSub 'Microsoft.EventGrid/systemTopics/eventSubscriptions@2023-06-01-preview' = { name: concat(evtTopic.name, '/', eventGridSubName) properties: { eventDeliverySchema: 'EventGridSchema' destination: { endpointType: 'AzureFunction' properties: { resourceId: functionAppResourceId maxEventsPerBatch: 1 preferredBatchSizeInKilobytes: 64 } } filter: { subjectBeginsWith: '' subjectEndsWith: '' includedEventTypes: [ 'Microsoft.PolicyInsights.PolicyStateChanged' 'Microsoft.PolicyInsights.PolicyStateCreated' 'Microsoft.PolicyInsights.PolicyStateDeleted' ] enableAdvancedFilteringOnArrays: true } } } output evtGridSub.id string = evtGridSub.id
问题原因
- 资源类型不匹配:代码中创建的是
Microsoft.EventGrid/topics(自定义主题),但订阅资源类型是Microsoft.EventGrid/systemTopics/eventSubscriptions,对应的父资源应为系统主题(systemTopics)。自定义主题和系统主题是完全独立的资源类型,ARM无法找到对应父资源,导致报错。 - 主题类型错误:
Microsoft.PolicyInsights.PolicyStates属于系统主题,无需手动创建自定义主题,系统会自动生成对应系统主题;若要手动创建,也需使用systemTopics资源类型而非topics。
解决方法
方案1:引用已存在的系统主题(推荐)
PolicyInsights的系统主题会自动创建,直接引用并创建订阅:
param eventGridSubName string = 'dev-eventgrid-sub' param topicName string = 'devpolicyinsightstopic' param functionAppResourceId string = '${resourceGroup().id}/providers/Microsoft.Web/sites/FN-PolicyMonitor' // 引用已存在的PolicyInsights系统主题 resource evtSystemTopic 'Microsoft.EventGrid/systemTopics@2023-06-01-preview' existing = { name: topicName } // 针对系统主题创建订阅 resource evtGridSub 'Microsoft.EventGrid/systemTopics/eventSubscriptions@2023-06-01-preview' = { name: concat(evtSystemTopic.name, '/', eventGridSubName) properties: { eventDeliverySchema: 'EventGridSchema' destination: { endpointType: 'AzureFunction' properties: { resourceId: functionAppResourceId maxEventsPerBatch: 1 preferredBatchSizeInKilobytes: 64 } } filter: { subjectBeginsWith: '' subjectEndsWith: '' includedEventTypes: [ 'Microsoft.PolicyInsights.PolicyStateChanged' 'Microsoft.PolicyInsights.PolicyStateCreated' 'Microsoft.PolicyInsights.PolicyStateDeleted' ] } enableAdvancedFilteringOnArrays: true } } output evtGridSub.id string = evtGridSub.id
方案2:手动创建系统主题并关联订阅
若系统主题尚未创建,可显式创建系统主题后再关联订阅:
param eventGridSubName string = 'dev-eventgrid-sub' param topicName string = 'devpolicyinsightstopic' param functionAppResourceId string = '${resourceGroup().id}/providers/Microsoft.Web/sites/FN-PolicyMonitor' // 创建PolicyInsights系统主题(替换原自定义主题) resource evtSystemTopic 'Microsoft.EventGrid/systemTopics@2023-06-01-preview' = { name: topicName location: 'australiaeast' properties: { source: subscription().id topicType: 'Microsoft.PolicyInsights.PolicyStates' } } // 针对系统主题创建订阅 resource evtGridSub 'Microsoft.EventGrid/systemTopics/eventSubscriptions@2023-06-01-preview' = { name: concat(evtSystemTopic.name, '/', eventGridSubName) properties: { eventDeliverySchema: 'EventGridSchema' destination: { endpointType: 'AzureFunction' properties: { resourceId: functionAppResourceId maxEventsPerBatch: 1 preferredBatchSizeInKilobytes: 64 } } filter: { subjectBeginsWith: '' subjectEndsWith: '' includedEventTypes: [ 'Microsoft.PolicyInsights.PolicyStateChanged' 'Microsoft.PolicyInsights.PolicyStateCreated' 'Microsoft.PolicyInsights.PolicyStateDeleted' ] } enableAdvancedFilteringOnArrays: true } } output evtGridSub.id string = evtGridSub.id
关键说明
- 必须确保订阅的父资源类型与主题类型匹配:系统主题对应
systemTopics/eventSubscriptions,自定义主题对应topics/eventSubscriptions。 Microsoft.PolicyInsights.PolicyStates属于系统事件源,只能关联到系统主题。
内容的提问来源于stack exchange,提问作者Arun Vijay
相关产品推荐
相关产品推荐

