我创建了一组云函数,用于将数据摄取到谷歌云存储中。这些功能已通过获取 http 请求设置为仅接受内部流量。
但是,当我使用云调度程序来调用函数时,即使在为每个具有适当权限的函数指定了服务帐户之后,我也会不断收到权限错误。我已将每个功能都设置在 us-central1 区域中,并且研究了文档和堆栈溢出,但到目前为止没有成功。我可以在这方面获得一些帮助吗?
Cloud Scheduler 是一个无服务器产品。这意味着它不属于您的项目,并且不会通过 VPC 将请求发送到您的 Cloud Function。此外, VPC SC尚不支持 Cloud Scheduler
因此,你不能。解决方法是允许云功能上的所有入口流量并取消选中允许未经身份验证的访问。因此,您的函数可以从其他地方(从互联网)调用,但您需要有效的身份验证才能调用它。
使用您的服务帐户并将其添加到 Cloud Scheduler 以调用您的功能。授予它足够的角色
选择
但是,如果您最初不希望将您的功能部署在 Internet 上可公开访问(只允许内部流量进入模式),则有另一种选择。
更改您的 Cloud Scheduler 以发布 PubSub 消息,而不是直接调用您的函数。然后,部署链接到 PubSub 主题的函数,而不是在 HTTP 目标模式下。
您可能需要在代码中执行一些更新,特别是如果您有要处理的参数(最初在查询或正文中,现在全部在 Cloud Scheduler 发布的 PubSub 消息中)。但是您的函数只能由您的 PubSub 主题调用,而没有其他方式。
根据文档,为了从 Cloud Scheduler 触发 Cloud Function,您必须使用 Pub/Sub。这些是步骤:
完成此操作后,您将能够测试运行 Cloud Scheduler 作业并验证它现在是否正常工作。最终的架构是这样的:
Cloud Scheduler job => Pub/Sub topic => Cloud Function
一旦它开始工作,请记住恢复授予 Cloud Scheduler 服务帐户的角色,因为此方法不需要它们。
在这里,我发现了一篇博客文章,它具有相同的功能,但采用了更实用的方法,您可以从 CLI 中遵循该方法。