当前位置: 首页 > 知识库问答 >
问题:

GCP cloud功能用于暂停和恢复GCP实例

史鸿运
2023-03-14

我们可以使用GCP云函数来启动和停止GCP实例,但是我需要使用云函数和调度程序来处理GCP实例的计划挂起和恢复。

从GCP文档中,我了解到我们可以开始和停止使用下面提供的云功能https://github.com/GoogleCloudPlatform/nodejs-docs-samples/tree/master/functions/scheduleinstance

我们是否有相同的节点JS或其他语言PCGK可用于挂起和恢复GCP实例?

如果没有,我们可以创建自己的暂停/恢复。

当我尝试一个时,我得到了下面的错误“TypeError:compute.zone(…)。vm(…)。简历不是一种功能

编辑,谢谢Chris和Guillaume,在浏览了你们的链接之后,我编辑了我的代码,下面是我的索引。现在是js文件。出于某种原因,当我使用gcloud函数部署ResumeInstancePubSubsub时——触发主题resume instance——运行时节点JS10——允许未经身份验证的

i always get函数“resumeInstancePubSub1”未在提供的模块中定义。resumeInstancePubSub1 2020-09-04 10:57:00.333是否指定了要执行的正确目标函数?

我以前没有在节点JS或JS上工作过,我期待着类似于启动/停止留档的东西,我可以使用下面的git repo轻松工作https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git

我的索引。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);
  });
}

共有2个答案

林意蕴
2023-03-14

GCP最近添加了“创建计划”功能,以根据配置的计划启动和停止VM实例。更多详情请访问

https://cloud.google.com/compute/docs/instances/schedule-instance-start-stop#managing_instance_schedules

干茂才
2023-03-14

下面是api新的beta版本的文档。您可以看到可以挂起一个实例,如:

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;
    }
 类似资料:
  • 问题内容: 我有一个基本的Swing UI,带有一个标记为“播放”的按钮。按下按钮后,标签变为“暂停”。现在,当按下按钮时,它变为“继续”。 在“播放”中,我将实例化并执行一个SwingWorker。我想要的是能够暂停该线程(不要取消该线程),并根据上述按钮按下来恢复它。但是,我不想在doInBackground()中求助于Thread.sleep()。这似乎有点骇人听闻。有什么方法可以阻止运行d

  • 我要做的是暂停< code>KafkaConsumer,如果在使用消息的过程中出现错误。 这是我写的 然后我写了一个REST服务来恢复消费者 现在,我有两个问题。第一个问题:当我打电话给消费者时。来自<code>@KafkaListener</code>注释方法的pause()会发生什么?消费者立即暂停,或者我可以接收到同一主题分区的其他偏移量上的其他消息。例如,我有偏移量为3的“message1

  • 问题内容: 我在viewDidAppear中有一个图像,并用以下代码对其进行了动画处理: 我想在点击时暂停动画,如果再次点击它则继续播放动画。 问题答案: 暂停和恢复动画的2个功能,我从这里开始转换为Swift。 我有一个按钮可以暂停或恢复在中初始化的动画:

  • 嗨,我在camel中有一个JMS消费者路由,我的要求是在特定事件时停止/暂停该路由(基于某个字段值),然后使用调度器恢复该路由。为此,我创建了两个路由,一个是我的原始jms消费者路由,另一个是调度程序路由,它们恢复jms消费者路由,虽然我能够暂停路由,但第二个路由不恢复暂停的路由,它显示的状态为已启动。 以下是我的两条路线 请帮助我如何实现上述场景。

  • 有些情况下,例如爬取大的站点,我们希望能暂停爬取,之后再恢复运行。 Scrapy通过如下工具支持这个功能: 一个把调度请求保存在磁盘的调度器 一个把访问请求保存在磁盘的副本过滤器[duplicates filter] 一个能持续保持爬虫状态(键/值对)的扩展 Job 路径 要启用持久化支持,你只需要通过 JOBDIR 设置 job directory 选项。这个路径将会存储 所有的请求数据来保持一

  • 问题内容: 我正在开发游戏,我想创建一个暂停菜单。这是我的代码: 但 仍在运行… 我想在玩家单击暂停菜单时暂停计时器,并在玩家返回游戏时继续运行计时器,但是我如何暂停?请帮帮我。 问题答案: 您需要使其无效并重新创建。然后,如果您使用相同的按钮暂停和恢复计时器,则可以使用bool来跟踪状态: