ARM模板部署Event Grid订阅未触发Azure Function问题咨询
1. 缺失Event Grid调用Function的访问权限
手动在门户创建Event Grid订阅时,平台会自动为Event Grid服务授予Function应用的Microsoft.Web/sites/functions/action/trigger权限,ARM部署时不会自动生成该权限配置,导致Event Grid推送事件时被Function的身份验证拦截,表现为监控无流量。
你需要在ARM模板中新增Function的访问策略配置:
{ "type": "Microsoft.Web/sites/providers/roleAssignments", "apiVersion": "2020-04-01-preview", "name": "[concat(variables('functionAppName'), '/Microsoft.Authorization/', guid('eventgrid-trigger-access'))]", "properties": { "roleDefinitionId": "[concat('/subscriptions/', subscription().subscriptionId, '/providers/Microsoft.Authorization/roleDefinitions/', '365a3152-7e89-4176-a802-dc3f305368db')]", // 内置的Function Event Grid触发器触发角色 "principalId": "706f7cad-ab60-4b71-8859-1423e5b6ab72", // Event Grid服务固定的服务主体ID,全Azure区域通用 "principalType": "ServicePrincipal" }, "dependsOn": [ "[resourceId('Microsoft.EventGrid/topics', variables('EventGridName'))]", "[resourceId('Microsoft.Web/sites', variables('functionAppName'))]" ] }
2. Event Grid订阅的资源类型与API版本配置错误
你当前模板中订阅的type字段写法有误,且使用了存在已知验证问题的预览版API,修改为稳定版配置即可:
// 修正后的订阅配置片段 { "name": "[concat(variables('EventGridName'), '/', variables('eventSubscriptions')[copyIndex()].name)]", "type": "Microsoft.EventGrid/topics/eventSubscriptions", "apiVersion": "2022-06-15", // 替换为稳定版API // 其余属性保留原有内容即可 "dependsOn": [ "[resourceId('Microsoft.EventGrid/topics', variables('EventGridName'))]", "[resourceId('Microsoft.Web/sites', variables('eventSubscriptions')[copyIndex()].functionApp)]" ] }
3. 订阅配置缺少依赖声明
你现有模板的dependsOn字段为空,若订阅创建时Function或Event Grid主题未完成部署,会出现关联配置静默失效的问题,即使后续资源部署完成,订阅的关联关系也不会自动修复,必须添加对应的依赖声明。
关于订阅模板导出的方法
无需单独找订阅的导出入口,手动创建正常可用的订阅后,进入对应资源组的「导出模板」页面,在资源筛选框中输入Microsoft.EventGrid/topics/eventSubscriptions,即可筛选出所有Event Grid订阅的配置模板,直接和你现有的ARM配置对比即可快速定位差异。
关于系统主题的说明
你当前使用的是自定义Event Grid主题,不属于系统主题场景,不存在隐式创建系统主题的要求,该配置不是你当前问题的诱因。
内容的提问来源于stack exchange,提问作者ian_stagib
相关产品推荐
相关产品推荐

