Azure Functions Event Grid触发器未触发问题咨询
Event Grid触发Azure Function授权逻辑
通过Azure门户GUI创建指向Azure Function的Event Grid事件订阅时,后台会自动完成两项授权配置:
- 为Event Grid服务主体分配目标Function的
Microsoft.Web/sites/functions/action/invoke调用权限- 自动获取并存储函数的触发器访问密钥到事件订阅配置中,无需手动填写
事件未触发常见排查点
第一步:先确认事件投递链路状态
进入Event Grid系统主题的「指标」页面,选择对应事件订阅,查看
Delivery Success(投递成功)、Delivery Failed(投递失败)、Matched Events(匹配到的事件)三类指标:- 如果
Matched Events为0:说明事件没有被事件订阅匹配到,问题出在Key Vault事件上报、或事件订阅的筛选规则配置 - 如果
Matched Events不为0但Delivery Failed有值:说明事件已经到Event Grid,但投递到Function失败,大概率是授权、网络、函数运行错误问题 - 建议先给事件订阅配置死信队列,投递失败的事件会存入死信队列,可直接查看事件内容和失败原因
- 如果
第二步:授权相关排查
- 确认函数的访问级别:查看函数
function.json配置中的authLevel属性,必须为function或anonymous,设置为admin时Event Grid默认权限无法触发 - 若后续重置过函数的主密钥/触发器专属密钥,需要重新编辑事件订阅,重新选择一次目标函数,后台会自动更新事件订阅中存储的旧密钥
- 若函数配置了IP访问限制、VNet隔离,需要放开Azure Event Grid服务标签的访问权限,避免投递请求被网络策略拦截
- 确认函数的访问级别:查看函数
第三步:筛选规则排查
确认事件订阅的筛选规则没有误过滤:
- 事件类型是否准确勾选了
Microsoft.KeyVault.SecretNewVersionCreated - 主题筛选、高级筛选是否存在错误的匹配规则,测试阶段可暂时关闭所有自定义筛选,验证基础链路是否连通
- 事件类型是否准确勾选了
第四步:函数运行状态排查
进入函数的「监控」-「调用日志」页面,查看是否有调用记录:
- 若有调用记录但日志无输出,说明函数运行报错,可修改代码增加空值判断避免异常:
#r "Microsoft.Azure.EventGrid" using Microsoft.Azure.EventGrid.Models; public static void Run(EventGridEvent eventGridEvent, ILogger log) { log.LogInformation("Event received, event type: " + eventGridEvent.EventType); if(eventGridEvent.Data != null) { log.LogInformation(eventGridEvent.Data.ToString()); } } - 若无调用记录,回到链路排查环节确认投递请求有没有到达函数运行环境
- 若有调用记录但日志无输出,说明函数运行报错,可修改代码增加空值判断避免异常:
第五步:Key Vault事件上报排查
进入Key Vault的「活动日志」页面,筛选创建新Secret版本的操作记录,查看是否有事件上报到Event Grid的相关错误,确认Key Vault有权限向系统主题发送事件。
内容的提问来源于stack exchange,提问作者baouss
相关产品推荐
相关产品推荐

