腾讯云轻量服务器定时创建快照?

腾讯云轻量应用服务器(Lighthouse)原生不支持直接通过控制台界面“一键设置定时自动创建快照”的功能。

不过,你可以通过以下三种主流方式实现自动化定时快照,推荐程度从高到低排列:

方法一:使用云监控 + 云函数(Serverless)—— 最推荐

这是腾讯云官方推荐的自动化方案,无需在服务器上安装额外软件,利用云原生能力实现,成本低且稳定。

核心逻辑:配置云监控规则 -> 触发云函数(SCF)-> 调用 API 创建快照。

  1. 创建云函数 (SCF)

    • 进入【云函数】控制台,新建一个 Python 3.6+ 或 Node.js 8.0+ 的函数。
    • 编写代码调用腾讯云 API CreateDiskSnapshot
    • 代码示例 (Python)

      import json
      from tencentcloud.common import credential
      from tencentcloud.common.profile.client_profile import ClientProfile
      from tencentcloud.common.profile.http_profile import HttpProfile
      from tencentcloud.lighthouse.v20200324 import lighthouse_client, models
      
      def handler(event, context):
          # 获取你的密钥(建议从环境变量读取,不要硬编码)
          cred = credential.DefaultCredentialProvider().get_credential()
      
          httpProfile = HttpProfile()
          httpProfile.endpoint = "lighthouse.tencentcloudapi.com"
      
          clientProfile = ClientProfile()
          clientProfile.httpProfile = httpProfile
      
          client = lighthouse_client.LighthouseClient(cred, "ap-guangzhou", clientProfile) # 替换为你的地域
      
          req = models.CreateDiskSnapshotRequest()
          params = {
              "InstanceName": "my-lh-server-snap-{}".format(int(__import__('time').time())), # 自定义名称
              "Description": "Auto created by SCF",
              "InstanceId": "lh-xxxxxxxx" # 填入你的实例 ID
          }
          req.from_json_string(json.dumps(params))
      
          resp = client.CreateDiskSnapshot(req)
          return {"statusCode": 200, "body": "Snapshot created: " + resp.SnapshotId}
    • 部署并测试该函数。
  2. 配置云监控告警与事件规则

    • 进入【云监控】控制台 -> 【事件规则】。
    • 创建一个规则,触发条件选择“时间触发器”(Cron 表达式),例如每天凌晨 3 点执行:0 3 * * ? *
    • 将动作设置为“执行云函数”,选择刚才创建的函数。
    • 配置好后,系统就会严格按照设定时间自动调用函数创建快照。

方法二:使用 Linux Crontab 脚本 —— 适合有运维基础的用户

如果你熟悉 Linux 命令行,可以在服务器内部通过 crontab 配合 tencentcloud-cli 来实现。

前提条件

  • 服务器已安装 tencentcloud-cli
  • 已配置好本地认证(tccli configure set)。
  • 拥有创建快照的 API 权限(RAM 策略需包含 lighthouse:CreateDiskSnapshot)。

操作步骤

  1. 编写脚本 (/root/auto_snapshot.sh):

    #!/bin/bash
    INSTANCE_ID="lh-xxxxxxxx"
    SNAPSHOT_NAME="auto_snap_$(date +%Y%m%d_%H%M%S)"
    
    # 调用 CLI 创建快照
    tccli lighthouse CreateDiskSnapshot --instance-id $INSTANCE_ID --name $SNAPSHOT_NAME --description "Auto snapshot"
    
    # 可选:清理超过 7 天的旧快照(需自行遍历列表判断)

    赋予执行权限:chmod +x /root/auto_snapshot.sh

  2. 设置定时任务

    crontab -e

    添加一行(例如每天凌晨 2 点):

    0 2 * * * /root/auto_snapshot.sh >> /var/log/auto_snapshot.log 2>&1

方法三:使用第三方工具(如 Ansible / Terraform)

如果你已经在使用基础设施即代码(IaC)工具,可以在 Terraform 或 Ansible Playbook 中集成定时任务,或者结合云端的定时调度服务(如 AWS 的 EventBridge 对应腾讯云的类似机制)来触发 API 调用。但对于单纯为了快照备份,方法一通常是最简单且维护成本最低的。

💡 重要提示:关于快照保留策略

腾讯云轻量服务器的快照不会自动删除旧快照。无论使用上述哪种方法,你都需要在脚本中加入清理逻辑

  • 列出当前所有快照。
  • 根据快照名称中的日期标签(如 auto_snap_20231027)进行比对。
  • 删除保留期限之外的旧快照(例如只保留最近 7 天或 30 天),否则会产生额外的存储费用。

建议:对于大多数用户,优先尝试 方法一(云函数 + 云监控),因为它解耦了服务器本身,即使服务器宕机,云端调度依然能执行备份操作。