我在CE上设置了一个VM。我想通过HTTP请求使用instances()。stop和instances()。start方法通过API启动和关闭此VM。
使用API资源管理器(https://cloud.google.com/compute/docs/reference/rest/v1/instances/start)并输入项目名称,区域和实例名称,一切正常,我可以启动和停止VM。我被转发到Google登录名->我授权->可以。
但是,当我尝试通过浏览器中提供的html来执行此操作时:https://www.googleapis.com/compute/v1/projects/ {my_projekt} / zones / {my_zone} / instances / {my_instance} / start”,它不起作用。错误:找不到。我发现缺少某种自动处理功能,因此我也尝试添加?key = {my_key}。
在文档中,我发现: 需要以下OAuth范围之一: https://www.googleapis.com/auth/compute https://www.googleapis.com/auth/cloud-platform
但是我不知道该如何设置。有人可以帮我吗?甚至有可能我要做什么?
在下一步中,我想允许其他人通过为他们提供IAM角色来启动和停止该虚拟机。他们也可以使用http发布请求吗?
我在与GCP合作方面还很陌生,而自动处理过程让我头疼...
先谢谢了。 问候, 奥利(Oli)
答案 0 :(得分:0)
好的,您可以通过3种方法来实现这一点,它们在here中有详细记录,我将按照从最简单到最困难的顺序列出它们:
A。-Google Cloud Console。
B。-Google Cloud SDK CLI工具“ gcloud”。
C。-Google Cloud HTTP API调用。
帐户执行实例停止/启动所需的权限为:
compute.instances.stop
compute.instances.start
要重置:
compute.instances.reset
具有这些权限的角色是“ compute.instanceAdmin”,但是您始终可以创建具有所需权限的客户角色。
A。-Google Cloud Console
因为它使用GUI,所以它是最用户友好的方式。在Compute Engine Instances上转到Cloud Console。如果您的实例没有出现在列表中,请确保您选择了正确的项目。
单击要停止/启动的实例,然后根据要执行的操作单击上面的按钮。
B。-Google Cloud SDK CLI工具“ gcloud”
Install CLI工具“ gcloud”,authenticate使用以下工具:
gcloud auth login [ACCOUNT]
然后,您将可以使用命令Stop / Start / Reset实例
gcloud compute instances stop example-instance-1 example-instance-2
gcloud compute instances start example-instance
gcloud compute instances reset example-instance
C。-Google Cloud HTTP API调用
这是您当前正在尝试使用的方法,您必须向Google Cloud API发出HTTP请求:Start,Stop,Reset。
您需要将“访问令牌”添加到请求标头上的“身份验证”字段中。使用“授权:承载您的长令牌”。有关here的更多信息。
如何获取“访问令牌”可能会因您使用的语言而异,这是javascript中的示例:
var {google} = require("googleapis");
// Load the service account key JSON file.
var serviceAccount = require("path/to/serviceAccountKey.json");
// Define the required scopes.
var scopes = [
"https://www.googleapis.com/auth/cloud-platform",
"https://www.googleapis.com/auth/compute"
];
// Authenticate a JWT client with the service account.
var jwtClient = new google.auth.JWT(
serviceAccount.client_email,
null,
serviceAccount.private_key,
scopes
);
// Use the JWT client to generate an access token.
jwtClient.authorize(function(error, tokens) {
if (error) {
console.log("Error making request to generate access token:", error);
} else if (tokens.access_token === null) {
console.log("Provided service account does not have permission to generate access tokens");
} else {
var accessToken = tokens.access_token;
// here you have the token, you can use it on your API request.
}
});
答案 1 :(得分:0)
我刚刚发现,不可能做我想做的事情:仅使用Uri在gcp上启动或停止实例。 (例如,可以使用Google Maps API。在这里,您只需要API密钥即可。)
也就是说,因为在这种情况下,需要在gcp上访问私有数据,因此必须使用Oauth协议。