Запуск виртуальной машины на gcp compute engine с помощью web-uri - PullRequest
0 голосов
/ 11 июля 2019

Я настроил виртуальную машину на CE.Я хочу запустить и завершить работу этой виртуальной машины с помощью API, используя метод instances (). Stop и instances (). Start с запросом HTTP.

Использование обозревателя API (https://cloud.google.com/compute/docs/reference/rest/v1/instances/start) и вставка вимя-проекта, зона и имя-экземпляра все работает нормально, и я могу запускать и останавливать виртуальную машину. Я перенаправлен на страницу входа в систему 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 post??

Я новичок в работе с GCP иУторизация вызывает у меня головную боль ...

Заранее спасибо.Привет, Оли

Ответы [ 2 ]

0 голосов
/ 12 июля 2019

Я только что узнал, что невозможно сделать то, что я пытаюсь: запускать или останавливать экземпляры в gcp только с помощью Uri. (Как это возможно, например, с помощью API карт Google. Здесь вам просто нужен API-ключ).

То есть, потому что в этом случае к gcp необходимо обращаться к частным данным, что делает необходимым использование протокола Oauth.

0 голосов
/ 11 июля 2019

Хорошо, у вас есть 3 способа добиться этого, они хорошо документированы в здесь , я перечислю их от самого простого до сложного:

A.- Google Cloud Console.

B.- Инструмент CLI Google Cloud SDK "gcloud".

C.- Вызовы API Google Cloud HTTP.

Разрешение, которое потребуется учетной записи для выполнения команды Stop /начало экземпляра будет:

compute.instances.stop
compute.instances.start

для сброса:

compute.instances.reset

Роль с такими правами - "compute.instanceAdmin", однако вы всегда можете создать роль клиента с помощьюжелаемые разрешения.


A.- Google Cloud Console

Это наиболее удобный способ сделать это, поскольку он использует графический интерфейс.Перейдите в Cloud Console, на ваших инстансах Compute Engine .Если вы не видите свои экземпляры в списке, убедитесь, что вы выбрали правильный проект.

Нажмите на экземпляры, которые вы хотите остановить / запустить, и нажмите на кнопки выше в зависимости от того, что вы хотите сделать.


B.- Инструмент CLI Google Cloud SDK "gcloud"

Установите инструмент CLI "gcloud", аутентифицируйте в нем, используя:

gcloud auth login [ACCOUNT] 

Тогда вы сможете использовать команды для Стоп / Старт / Сброс Экземпляры

gcloud compute instances stop example-instance-1 example-instance-2

gcloud compute instances start example-instance

gcloud compute instances reset example-instance

C.- Вызовы HTTP API Google Cloud

Это метод, который вы в настоящее время пытаетесь использовать, вам нужно будет сделать HTTP-запрос к API Google Cloud: Старт , Стоп , Сброс .

Вам нужно будет добавить свой «токен доступа» в поле «аутентификация» в заголовке запроса.используя «Авторизация: токен на предъявителя».Подробнее об этом здесь .

Как получить «токен доступа» может отличаться в зависимости от языка, который вы используете, вот пример в 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.
  }
});
...