Firebase Schedule Functions v2 NOT_FOUND错误:带认证定时任务配置方案
解决Firebase Schedule Functions v2要求认证时与Cloud Scheduler配合的NOT_FOUND问题
问题核心
部署Firebase第二代定时函数后,Cloud Scheduler调用时触发NOT_FOUND错误,根源在于两点:一是默认生成的调度器请求路径可能不匹配Cloud Run驱动的v2函数端点;二是默认的认证方式无法正确通过Cloud Run的权限校验。
解决方案
1. 修正Cloud Scheduler的目标URL
第二代函数基于Cloud Run运行,其完整调用端点是Cloud Run服务URL加上函数名称路径。Firebase CLI自动生成的调度器可能未正确拼接路径,导致404:
- 打开Cloud Scheduler控制台,找到对应的定时任务
- 编辑任务,将目标URL修改为
https://<你的Cloud Run服务域名>/<函数名称>
(比如Cloud Run服务URL是https://my-schedule-func-123.a.run.app,函数名为dailyCleanup,则完整URL为https://my-schedule-func-123.a.run.app/dailyCleanup)
2. 配置OIDC令牌认证(替代默认Auth头)
Cloud Run要求认证时,默认的App Engine服务账户Auth头无法正确生效,需改用OIDC令牌:
- 在调度器编辑页面的「认证」区域,选择「添加OAuth令牌」
- 服务账户选择App Engine默认服务账户(或你指定的专用账户)
- 受众(Audience) 填写你的Cloud Run服务的完整域名(不带函数路径,比如
https://my-schedule-func-123.a.run.app) - 保存配置后,手动触发任务测试
3. 给服务账户分配正确权限
确保调度器使用的服务账户拥有Cloud Run调用权限:
- 进入Cloud Run控制台,找到对应的函数服务
- 切换到「权限」标签页,点击「添加成员」
- 输入服务账户邮箱(比如
[项目ID]@appspot.gserviceaccount.com) - 授予「Cloud Run Invoker(roles/run.invoker)」角色,作用域限定为当前Cloud Run服务(避免过度授权)
4. 验证Cloud Run安全设置
确认Cloud Run服务的「安全」配置保持为「要求认证」,同时权限列表中已包含上述服务账户。
验证
修改完成后,手动触发Cloud Scheduler任务,查看Cloud Logging中的函数日志,确认是否成功执行。
内容的提问来源于stack exchange,提问作者Can
相关产品推荐
相关产品推荐

