Облачная функция GCP для приостановки и возобновления работы экземпляров GCP

Мы можем использовать облачные функции GCP для запуска и остановки экземпляров GCP, но мне нужно поработать над запланированной приостановкой и возобновлением экземпляров GCP с помощью облачной функции и планировщика.

Из документации GCP я понял, что мы можем запускать и останавливать использование облачных функций, доступных ниже https://github.com/GoogleCloudPlatform/nodejs-docs-samples/tree/master/functions/scheduleinstance

Есть ли у нас тот же узел JS или другие языковые ПК для приостановки и возобновления экземпляров GCP?

Если нет, мы можем создать собственный для приостановки / возобновления.

Когда я попробовал один, я получил ошибку TypeError: compute.zone (...). Vm (...). Resume не является функцией

Редактировать, спасибо Крису и Гийому, после просмотра ваших ссылок я отредактировал свой код, и ниже теперь мой файл index.js. По какой-то причине, когда я выполняю функции gcloud, развертываю resumeInstancePubSub --trigger-topic resume-instance --runtime nodejs10 --allow-unauthenticated

я всегда получаю Функция «resumeInstancePubSub1» не определена в предоставленном модуле. resumeInstancePubSub1 2020-09-04 10: 57: 00.333 Вы указали правильную целевую функцию для выполнения?

Я раньше не работал над Node JS или JS, я ожидал чего-то похожего на документацию по запуску / остановке, которую я мог бы легко сделать, используя ниже git repo https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git

Мой файл index.js,

// BEFORE RUNNING:
// ---------------
// 1. If not already done, enable the Compute Engine API
//    and check the quota for your project at
//    https://console.developers.google.com/apis/api/compute
// 2. This sample uses Application Default Credentials for authentication.
//    If not already done, install the gcloud CLI from
//    https://cloud.google.com/sdk and run
//    `gcloud beta auth application-default login`.
//    For more information, see
//    https://developers.google.com/identity/protocols/application-default-credentials
// 3. Install the Node.js client library by running
//    `npm install googleapis --save`

const {google} = require('googleapis');
var compute = google.compute('beta');

authorize(function(authClient) {
  var request = {
    // Project ID for this request.
    project: 'my-project',  // TODO: Update placeholder value.

    // The name of the zone for this request.
    zone: 'my-zone',  // TODO: Update placeholder value.

    // Name of the instance resource to resume.
    instance: 'my-instance',  // TODO: Update placeholder value.

    resource: {
      // TODO: Add desired properties to the request body.
    },

    auth: authClient,
  };
exports.resumeInstancePubSub = async (event, context, callback) => {
try {
    const payload = _validatePayload(
      JSON.parse(Buffer.from(event.data, 'base64').toString())
    );
    const options = {filter: `labels.${payload.label}`};
    const [vms] = await compute.getVMs(options);
    await Promise.all(
      vms.map(async (instance) => {
        if (payload.zone === instance.zone.id) {
          const [operation] = await compute
            .zone(payload.zone)
            .vm(instance.name)
            .resume();

          // Operation pending
          return operation.promise();
        }
      })
    );
          // Operation complete. Instance successfully started.
    const message = `Successfully started instance(s)`;
    console.log(message);
    callback(null, message);
  } catch (err) {
    console.log(err);
    callback(err);
  }
};
 compute.instances.resume(request, function(err, response) {
    if (err) {
      console.error(err);
      return;
    }

    // TODO: Change code below to process the `response` object:
    console.log(JSON.stringify(response, null, 2));
  });
});

function authorize(callback) {
  google.auth.getClient({
    scopes: ['https://www.googleapis.com/auth/cloud-platform']
  }).then(client => {
    callback(client);
  }).catch(err => {
    console.error('authentication failed: ', err);
  });
}

person ssumathe    schedule 03.09.2020    source источник
comment
Имейте в виду, что это бета-функция, которая еще не реализована в клиентских библиотеках. Однако, если вы используете API обнаружения, вы сможете их использовать. Вы можете поделиться своим текущим кодом? Мы можем попробовать это исправить!   -  person guillaume blaquiere    schedule 03.09.2020
comment
@guillaumeblaquiere Я добавил свой index.js выше. Спасибо..!   -  person ssumathe    schedule 04.09.2020
comment
Вышеупомянутая ошибка устранена. Функция была недоступна, так как находилась внутри другого модуля.   -  person ssumathe    schedule 04.09.2020


Ответы (1)


Здесь и здесь - это документация по новой бета-версии API. Как видите, можно приостановить такой экземпляр, как:

compute.instances.suspend(request, function(err, response) {
    if (err) {
      console.error(err);
      return;
    }

И вы можете возобновить экземпляр аналогичным образом:

 compute.instances.resume(request, function(err, response) {
    if (err) {
      console.error(err);
      return;
    }
person Chris32    schedule 03.09.2020
comment
Вы видите не в том месте. Это новый бета-API: cloud.google.com/compute/docs / reference / rest / beta / instance / и cloud.google.com/compute/docs/reference/rest/beta/instances/ - person guillaume blaquiere; 03.09.2020
comment
Спасибо! не знал об этой бета-версии. Редактирую свой ответ - person Chris32; 04.09.2020
comment
Спасибо, Гийом и Крис, ваши ссылки были действительно полезны. - person ssumathe; 04.09.2020