如何定期使用 Cloud Functions 自动演练备份恢复?

解读

面试官问“定期+Cloud Functions+备份恢复”,核心想看三件事:

  1. 你是否理解 Cloud SQL 备份机制(自动 vs 手动、PITR、跨区域存储)。
  2. 能否用 无服务器方式(Cloud Functions + Cloud Scheduler + IAM)把“恢复”做成可重复、可观测、低成本的演练,而不是真的把生产库冲掉。
  3. 是否具备 国内合规 意识(数据不出境、敏感等级保护、操作审计)。
    回答时要体现“演练”二字:只验证备份可用,不破坏线上,结果可量化(RTO/RPO 达标、校验和一致)。

知识点

  • Cloud SQL 自动备份窗口事务日志(PITR)机制
  • on-demand 备份跨区域备份(cross-region backup)
  • Cloud Functions 第二代(并发、最小实例 0)与事件驱动(Pub/Sub、Cloud Scheduler)
  • 恢复克隆(clone)与时间点恢复(PITR)API 差异
  • IAM 最小权限:roles/cloudsql.admin、roles/iam.serviceAccountUser、roles/cloudfunctions.invoker
  • 国内网络:Cloud Functions 出公网需VPC Connector+Cloud NAT,否则无法拉取 sqladmin.googleapis.com
  • 数据安全CMEK 加密备份、Access TransparencyCloud Audit Logs 写入中国项目日志桶
  • 演练指标:RTO(恢复耗时)、RPO(数据丢失量)、校验和、连接探活、业务黄金 SQL 返回结果
  • 成本优化:克隆实例使用共享 CPU(db-f1-micro)+自动删除(label:ttl=6h)
  • 通知链路:Cloud Monitoring 告警 → PagerDuty钉钉(通过 EventBridge 国内版)

答案

整体思路:定时触发 → 创建克隆实例 → 运行校验脚本 → 上报指标 → 清理资源,全部用 Cloud Functions 编排,零人工干预。

  1. 准备阶段
    a. 启用 Cloud SQL Admin APICloud Functions APICloud Scheduler API
    b. 创建 专用 SA(cf-backup-drill@{PROJECT_ID}.iam.gserviceaccount.com),绑定角色:
    – roles/cloudsql.admin(恢复权限)
    – roles/iam.serviceAccountUser( impersonate 生产实例 SA)
    – roles/logging.logWriter(写演练日志)
    c. 国内区域选型:生产实例在 shanghai-a,备份桶用 asia-east2(香港)以满足数据不出境要求;克隆演练实例落在 shanghai-b 同 VPC 子网,走 Private IP 降低公网费用。

  2. 部署 Cloud Functions(Gen2,Python 3.11)
    入口函数:drill_handler(event, context)
    步骤:
    ① 读入环境变量:INSTANCE_ID、VERIFY_SQL、EXPECTED_SHA、DRILL_TTL_HOURS。
    ② 调用 sqladmin_v1beta4.instances.clone 创建克隆实例:
    – targetInstanceId = “{INSTANCE_ID}-drill-{timestamp}”
    – 指定 tier=db-f1-micro 节省费用
    – 加 label:{env=drill, ttl=6h, created_by=cf}
    ③ 轮询 operations.get 直到 DONE;记录耗时 t1(RTO 初值)。
    ④ 通过 Private IP(Cloud SQL Auth Proxy sidecar)连接克隆库,执行 VERIFY_SQL,计算结果 SHA256。
    ⑤ 若 SHA == EXPECTED_SHA,写 Cloud Monitoring 自定义指标
    – backup_drill_rto_seconds = t1
    – backup_drill_result = 1(成功)
    否则 result = 0,并写 Cloud Logging 严重级别 ERROR。
    ⑥ 调用 instances.delete 删除克隆实例,避免持续计费。
    ⑦ 发送 钉钉通知:通过国内 EventBridge 连接器,payload 包含 RTO、RPO、校验结果。

  3. 定时触发
    Cloud Scheduler 每周一 03:00(上海时区)发 Pub/Sub 消息 topic=backup-drill,CF 订阅该 topic。
    国内合规:Scheduler 作业区域选 shanghai,确保调度数据不出境。

  4. 观测与告警

    • Cloud Monitoring 创建告警策略:若 backup_drill_result==0 连续 1 次,则电话告警。
    • 备份窗口外若自动备份失败,也会触发 backup_drill_result=0,实现联动。
  5. 权限与审计

    • 所有操作写入 Cloud Audit Logs(DATA_WRITE 类型),日志桶保存在 中国项目(shanghai 区域),保存 365 天,满足等保三级。
    • 使用 CMEK 加密的实例,克隆时自动继承密钥,确保演练数据同样加密。
  6. 成本评估

    • 克隆实例存活 30 分钟,db-f1-micro 单价 0.015 USD/h,每周一次,月成本 < 0.1 USD。
    • 网络走 Private IP,无出流量费。

一句话总结:用 Cloud Functions 无服务器编排克隆恢复,每周自动验证备份可用性,30 分钟内完成并自动删库,结果量化到 RTO/RPO 并对接国内告警通道,既满足 Google Cloud 最佳实践,也符合中国数据合规要求。

拓展思考

  1. 如果实例开启 CMEK,但密钥轮换后旧备份密钥版本被禁用,克隆会失败。解决方案:在演练前调用 cloudkms.cryptoKeyVersions.get 确认密钥版本仍 ENABLED,否则自动回退到最新 on-demand 备份
  2. 对于 SQL Server 实例,clone API 不支持,可改用 导出 bak 到 Cloud Storage → 新建临时实例 → import bak 的方式,耗时更长,需在 CF 里把 RTO 阈值动态调到 2h。
  3. 国内多项目场景,可用 Terraform + Cloud Build 把 CF、Scheduler、IAM 做成一键基准包,通过 Cloud Source Repositories(shanghai 区域)做 GitOps,实现百套环境统一演练。
  4. 未来可升级到 Cloud Workflows,把“克隆→校验→删库→报告”做成可视化 DAG,支持并行演练多个实例,并内置重试策略,进一步降低单点失败。