首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【玩转Lighthouse】利用快照接口 API 实现 Lighthouse 定期自定义快照

【玩转Lighthouse】利用快照接口 API 实现 Lighthouse 定期自定义快照

原创
作者头像
火火
修改2022-05-05 11:56:54
1.9K0
修改2022-05-05 11:56:54
举报
文章被收录于专栏:火火说火火说

1. 背景概述

腾讯云轻量应用服务器(Lighthouse)相较于云服务器(CVM)具有简单易用、开箱即用、一站式整合、性价比高等优点,但也存在一些功能限制:比如不能像云服务器一样创建快照策略,且存在快照配额限制(每个地域内的免费快照总数量上限为已创建实例数乘以2,且最多不超过10个),并且目前还不能付费创建额外的快照。对于需要定期备份数据或者有回滚需求的开发者而言不算太友好。

好在轻量应用服务器提供了快照相关接口,利用相关 API 即可实现自定义快照备份。但仍受限于单机2个免费快照额度,若快照数量已达2个,备份时需要先删除一份快照才可成功创建一份新的快照。

2. 环境准备

  • 轻量应用服务器(Lighthouse)
  • Node.js 环境(本例版本v16.15.0)
  • 腾讯云 API 访问密钥
  • crontab(按计划执行cron 任务)

3. 服务器准备

本例使用的轻量应用服务器(Lighthouse)基础配置如下:

  • 地域:南京
  • 镜像:CentOS 8.2
  • 实例套餐:CPU: 2核、内存: 4GB、60GB SSD云硬盘、流量包1000GB/月(带宽:6Mbps)

3.1 安装 Node.js

具体下载地址及安装可参见 Node.js 官方网站。

安装完成后,可配置使用腾讯镜像源以达到最佳下载速度:

npm config set registry http://mirrors.cloud.tencent.com/npm/    //公网可用镜像源
或
npm config set registry http://mirrors.tencentyun.com/npm/       //腾讯云内网可用镜像源

3.2 安装 crontab

3.2.1 检查是否已安装过 crontab 服务

rpm -qa |grep crontab

若提示类似 crontabs-1.11-6.20121102git.el7.noarch 的输出则表示已安装,可忽略下一小节。

3.2.2 安装 crontab 服务

yum install vixie-cron
yum install crontabs

其中:vixie-cron 软件包是 cron 主程序;crontabs 软件包是用来安装、卸装、或列举守护进程的程序。

3.2.3 启动 crontab 服务

service crond start       //启动服务
service crond stop        //关闭服务
service crond restart     //重启服务
service crond reload      //重新载入配置
service crond status      //查看定时任务状态
chkconfig crond on        //设置开机自动启动服务
chkconfig crond off       //取消开机自动启动crond服务

3.2.4 crontab 用法简述

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name  command to be executed

由以上可知一条定时任务主要由 minute hour day month week command 组成:

  • minute:分钟,0到59之间的任何整数
  • hour:小时,0到23之间的任何整数
  • day:日期,1到31之间的任何整数
  • month:月份,1到12之间的任何整数
  • week:星期几,0到7之间的任何整数,0或7代表星期日
  • command:要执行的命令,可以是系统命令,也可以是脚本文件

以 hour 字段为例:

  • * 取值范围内的数字,表示每小时执行一次
  • / 指定时间的间隔频率,如 */3 表示每3小时执行一次
  • - 从某个数字到某个数字,如 2-4 表示第2、3、4小时各执行一次
  • , 自定义分散的时刻,如 3,5,7 表示第3、5、7小时各执行一次

3.3 获取腾讯云 API 访问密钥

打开 API 密钥管理控制台,会提示我们使用子账号密钥。为了避免主账号密钥泄露造成云上资产损失,以及方便做权限隔离,我们按照提示选择切换使用子账号密钥,然后跟随指引创建子账号。

风险提示,选择切换使用子账号密钥
风险提示,选择切换使用子账号密钥
选择自定义创建
选择自定义创建
1. 默认第一个选项即可
1. 默认第一个选项即可
2. 设置用户名并勾选编程访问即可
2. 设置用户名并勾选编程访问即可
3. 搜索框搜索Lighthouse,选择轻量应用服务器全读写访问权限
3. 搜索框搜索Lighthouse,选择轻量应用服务器全读写访问权限
4. 点击完成即可
4. 点击完成即可
获得子账户的 SecretId 及 SecretKey,保存备用
获得子账户的 SecretId 及 SecretKey,保存备用

4. 自定义快照

4.1 自定义快照代码

此处借助 API Explorer 平台轻量应用服务器快照相关接口文档Node.js SDK 4.0 文档,编写如下代码:

// Depends on tencentcloud-sdk-nodejs version 4.0.3 or higher
const tencentcloud = require("tencentcloud-sdk-nodejs");

const LighthouseClient = tencentcloud.lighthouse.v20200324.Client;

const clientConfig = {
  credential: {
    secretId: "*****************",  //填写子账户的 SecretId 及 SecretKey
    secretKey: "*****************",
  },
  region: "ap-********",   //填写轻量应用服务器所属地域
  profile: {
    httpProfile: {
      endpoint: "lighthouse.tencentcloudapi.com",
    },
  },
};

const client = new LighthouseClient(clientConfig);
const params = {
  "Filters": [
    {
      "Name": "instance-id",    //填写轻量应用服务器的实例 ID
      "Values": [
        "lhins-*******"        //按照【实例 ID 】进行过滤。
      ]
    }
  ]
};
client.DescribeSnapshots(params).then(
  (data) => {
    deletesnapshot_id = data.SnapshotSet[0].SnapshotId   //获取指定实例快照列表的第1个快照id
    //deletesnapshot_id = data.SnapshotSet[1].SnapshotId   //获取指定实例快照列表的第2个快照id
    //查询所得的快照列表是按照时间由近到远排序的,故:
    //删除第1个快照:循环删除最近的快照,创建一份最新的快照,保存历史第一个快照
    //删除第2个快照:循环删除最远的快照,保留最新的两份快照
    const deletesnapshot = {
      "SnapshotIds": [
        deletesnapshot_id
      ]
    };
    client.DeleteSnapshots(deletesnapshot).then(
      (data) => {
        console.log('删除最近的快照, 成功');
        //console.log('删除最远的快照, 成功');
        console.log(data);

        const createsnapshot = {
          "InstanceId": "lhins-*******"    //填写轻量应用服务器的实例 ID
        };
        client.CreateInstanceSnapshot(createsnapshot).then(
          (data) => {
            console.log('创建新快照, 成功');
            console.log(data);
          },
          (err) => {
            console.log('创建新快照, 失败');
            console.error("error", err);
          }
        );
      },
      (err) => {
        console.log('删除最近的快照, 失败');
        console.error("error", err);
      }
    );
  },
  (err) => {
    console.log('查看快照列表, 失败');
    console.error("error", err);
  }
);

将以上代码保存(以保存为snapshot.js为例)并对应修改相关内容,在项目目录安装 Node.js SDK 4.0

npm install tencentcloud-sdk-nodejs --save

Tips:

  • 更改第32、33行注释即可选择不同的快照方案
  • 直接参考的 API Explorer 做的简单代码实现,未考虑快照数<2等其他情况,实例下已有2个快照时才有效
  • 轻量应用服务器的实例 ID 在控制台的实例信息可找到,即括号内 ID
轻量应用服务器的实例 ID
轻量应用服务器的实例 ID

地域

取值

华北地区(北京)

ap-beijing

西南地区(成都)

ap-chengdu

华南地区(广州)

ap-guangzhou

港澳台地区(中国香港)

ap-hongkong

亚太南部(孟买)

ap-mumbai

华东地区(南京)

ap-nanjing

华东地区(上海)

ap-shanghai

亚太东南(新加坡)

ap-singapore

亚太东北(东京)

ap-tokyo

欧洲地区(法兰克福)

eu-frankfurt

欧洲地区(莫斯科)

eu-moscow

美国西部(硅谷)

na-siliconvalley

4.2 设置定时任务

终端输入 crontab -e 后编写想要执行的定时任务:

0 1 * * * node /项目目录/snapshot.js  //表示每天凌晨1点执行快照备份
0 1 */2 * * node /项目目录/snapshot.js  //表示每2天凌晨1点执行快照备份
0 1 * * 1 node /项目目录/snapshot.js  //表示每周一凌晨1点执行快照备份

更多自定义规则可参考前文 crontab 用法简述自行自定义设置~

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 背景概述
  • 2. 环境准备
  • 3. 服务器准备
    • 3.1 安装 Node.js
      • 3.2 安装 crontab
        • 3.2.1 检查是否已安装过 crontab 服务
        • 3.2.2 安装 crontab 服务
        • 3.2.3 启动 crontab 服务
        • 3.2.4 crontab 用法简述
      • 3.3 获取腾讯云 API 访问密钥
      • 4. 自定义快照
        • 4.1 自定义快照代码
          • 4.2 设置定时任务
          相关产品与服务
          轻量应用服务器
          轻量应用服务器(TencentCloud Lighthouse)是新一代开箱即用、面向轻量应用场景的云服务器产品,助力中小企业和开发者便捷高效的在云端构建网站、Web应用、小程序/小游戏、游戏服、电商应用、云盘/图床和开发测试环境,相比普通云服务器更加简单易用且更贴近应用,以套餐形式整体售卖云资源并提供高带宽流量包,将热门开源软件打包实现一键构建应用,提供极简上云体验。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档