从应用脚本调用 Google Cloud 函数

问题描述 投票:0回答:3

我对 GCP 世界还很陌生,我在这里询问只是为了了解有关我的问题的一些其他信息。

我想创建一个 HTTP Google Cloud Function 来对某个项目执行一些操作。

同样,我需要从外部服务调用此函数(假设从 Gsheet 中调用,拥有该函数的 SA 可以对其进行编辑)。

我看到有 GoogleAppScripts,特别是 URLFetchApp 服务。 我的想法是从该服务调用该函数。

为了进行身份验证,我看到需要 OAuth2 库,在这种情况下,是否有必要为管理该功能的帐户创建 ClientID 和 ClientSecret?如果是这种情况,AppScript 如何创建相关服务?

提前谢谢您。

google-apps-script google-cloud-platform oauth-2.0 google-cloud-functions
3个回答
5
投票

您可以通过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 令牌。

参考文献

  • 对开发人员、功能和最终用户进行身份验证 (Google Cloud 指南)
  • UrlFetchApp.fetch(url, params)(Google Apps 脚本参考)
  • ScriptApp.getIdentityToken()(Google Apps 脚本参考)

3
投票
这可以按照@Martí的回答中所述进行工作,但是我度过了非常令人沮丧的一天,因为它不起作用,因为我错过了一个微小但关键的步骤:

您需要在制作Apps脚本后重新部署云功能,否则它不会'没有验证客户端 ID! 当您将 Apps 脚本与同一个 GCP 项目关联时,它会被分配此 ID,因此之后需要重新部署该函数。


0
投票
对于所有新人来说,我花了很多时间尝试一切我能做的事情,让它在不同的项目中发挥作用。

它只是不会。您需要将应用程序脚本项目设置为同一云(运行)功能。如果您被要求设置宣誓同意屏幕,请不要害怕:只需填写最少的信息即可。

© www.soinside.com 2019 - 2024. All rights reserved.