我对 GCP 世界还很陌生,我在这里询问只是为了了解有关我的问题的一些其他信息。
我想创建一个 HTTP Google Cloud Function 来对某个项目执行一些操作。
同样,我需要从外部服务调用此函数(假设从 Gsheet 中调用,拥有该函数的 SA 可以对其进行编辑)。
我看到有 GoogleAppScripts,特别是 URLFetchApp 服务。 我的想法是从该服务调用该函数。
为了进行身份验证,我看到需要 OAuth2 库,在这种情况下,是否有必要为管理该功能的帐户创建 ClientID 和 ClientSecret?如果是这种情况,AppScript 如何创建相关服务?
提前谢谢您。
您可以通过google apps脚本查询身份令牌,然后用它来调用gcloud函数。
我们要做的第一件事是拥有一个云函数,并确保您有权限调用它(尝试使用其他方法执行它)。
之后,转到您的 Apps 脚本项目清单并设置至少 2 个特定范围:
{
...
"oauthScopes": [
"openid",
"https://www.googleapis.com/auth/script.external_request"
],
...
}
openid
允许我们获取身份令牌来调用函数,并且 .../script.external_request
允许我们使用 fetch。
然后就可以添加代码了:
const response = UrlFetchApp.fetch(
'https://gcloud-function-url',
{
muteHttpExceptions: true,
headers: {
'Authorization': `Bearer ${ScriptApp.getIdentityToken()}`
}
}
)
// use response
如参考文献中记录的,ScriptApp.getIdentityToken()
返回我们需要的 OpenID 令牌。参考文献
您需要在制作Apps脚本后重新部署云功能,否则它不会'没有验证客户端 ID! 当您将 Apps 脚本与同一个 GCP 项目关联时,它会被分配此 ID,因此之后需要重新部署该函数。
它只是不会。您需要将应用程序脚本项目设置为同一云(运行)功能。如果您被要求设置宣誓同意屏幕,请不要害怕:只需填写最少的信息即可。