谷歌云功能;使用Google Cloud Rest API



情况是,在我的云函数中,我需要从实例模板创建VM实例。我使用的是@google-cloud/compute包,但它没有提供这样做的方法

现在,我正在尝试使用RESTAPI,但是我无法授权它。我正在使用API密钥,按照本页的说明使用API密钥。

https://www.googleapis.com/compute/v1/projects/<ID>/zones/us-central1-a/instances?key=<API_KEY>&sourceInstanceTemplate=projects/<TEMPLATE_URL>

还有一个帖子正文,但这无关紧要,因为错误在于授权。

我得到了login required错误

我确实有一个服务帐户,我在同一个云功能上与云存储nodejs客户端一起使用,但我找不到关于如何在云功能上使用RESTAPI的同一服务帐户的文档。

根据您链接的文档,API密钥的使用仅限于数量有限的API:

有限数量的GCP服务只允许使用API密钥进行访问:

  • 谷歌云自然语言API
  • 谷歌云语音API
  • 谷歌云翻译API
  • Google Cloud Vision API
  • 谷歌云终结点
  • Google云计费目录API
  • 防止云数据丢失API

因此,无法使用API键对计算引擎资源进行REST调用。

但是,您可以选择使用Google API Node.js客户端。

我做了一个小例子,在Node.js 8中运行的云函数中,从实例模板创建计算引擎实例(我相信,在Nodejs 6中,你没有创建异步调用的选项,你可以从这些调用中受益,因为你不必等待实例创建,就可以从CF获得响应):

index.js

const {google} = require('googleapis');
const compute = google.compute('v1');
exports.helloWorld = async data => {
const authClient = await google.auth.getClient({
scopes: [
'https://www.googleapis.com/auth/cloud-platform',
'https://www.googleapis.com/auth/compute',
],
});
const projectId = await google.auth.getProjectId();
const result = await compute.instances.insert({
auth: authClient,
project: projectId,
zone: "us-east1-c",
sourceInstanceTemplate: "projects/YOUR_PROJECT_NAME/global/instanceTemplates/YOUR_TEMPLATE_NAME-template",
resource: {
name: "example-vm-from-api-call",
},
});
console.log('done');
};

package.json

{
"name": "sample-http",
"version": "0.0.1",
"dependencies": {
"google-auth-library": "3.0.0",
"googleapis-common": "0.6.0",
"googleapis": "36.0.0"
}
}

我已经将实例名称硬编码为始终为example-vm-from-api-call,但在向云函数发出请求时,可以在参数中传递实例的名称,并使用它来创建实例。

此外,请注意,通过执行行const authClient = await google.auth.getClient(...)来进行认证。这采用了应用程序默认的已验证帐户,即执行云功能的服务帐户。

默认情况下,此服务帐户具有project/editor权限,该权限足以创建CE虚拟机,但如果您使用其他帐户执行这些功能,则必须为其提供正确的访问范围(请参阅上述功能的参数)。

相关内容

  • 没有找到相关文章

最新更新