【发布时间】:2022-06-15 16:49:33
【问题描述】:
我正在尝试使用 Cloud Scheduler 按计划触发 Cloud Functions。我已经设置了一个具有 Cloud Function Invoker 角色的服务帐户,将其设置为调度程序上的服务帐户,并将 auth 标头设置为“添加 OIDC 令牌”。该 URL 与云函数的触发 URL 相同。
当我手动运行计划作业时,结果返回为“成功”,因此似乎没有任何身份验证问题。但是,我期望的结果(将新数据附加到 BigQuery 表)并没有发生。
此时您可能会认为云函数存在问题,但是当我手动运行该函数(没有调度程序)时,它的工作方式完全符合预期。
当我手动运行调度程序后检查云函数日志时,显然该函数没有被调用,所以调度程序和函数之间的交互似乎不工作。奇怪的是,我设置它的方式与我过去使用其他预定功能的方式完全相同,效果很好,所以我找不到它不起作用的原因。
任何想法我可能会出错?
【问题讨论】:
-
您确定云调度程序会将 401 响应报告为失败吗?文档似乎没有说明这一点。您可以尝试关闭云功能上的身份验证(“允许未经授权的调用”)并重试看看有什么作用吗?
-
@somethingsomething 我已经看到在其他问题的各种解决方案中引用了该设置,但找不到它。它不会出现在运行时、构建、连接和安全设置或权限设置中。我能找到的最接近的是入口设置中的“允许所有流量”,这是默认情况下已经选择的。不确定用户界面是否发生了变化,或者我是否遗漏了什么。
-
您所要做的就是将 --allow-unauthenticated 添加到您的
gcloud functions deploy。或者,在云控制台中,看起来在初始部署后无法更改(或者更确切地说我找不到它),但这是您第一次创建它时的设置,在 Trigger -> Authentication 下。 -
我刚刚按照您的指示创建了一个新功能,将调度程序切换到该功能并且它已经工作了 - 谢谢。编辑:这是我唯一设置为“允许未经身份验证”的功能,所以这并不能解释为什么我的其他功能一直在使用 Cloud Scheduler 而这个却没有。
-
您可能在使用 oidc 服务帐户时犯了一个错误,添加了一个对该特定云功能没有“cloudfunctions.functions.invoke”权限的帐户。这应该被修复,允许未经身份验证并不是一个解决方案(因此我没有将其作为答案发布),而只是为了确认这是一个权限问题。
标签: google-cloud-platform google-cloud-functions google-cloud-scheduler