如何定期使用 Cloud Functions 自动演练备份恢复?
解读
面试官问“定期+Cloud Functions+备份恢复”,核心想看三件事:
- 你是否理解 Cloud SQL 备份机制(自动 vs 手动、PITR、跨区域存储)。
- 能否用 无服务器方式(Cloud Functions + Cloud Scheduler + IAM)把“恢复”做成可重复、可观测、低成本的演练,而不是真的把生产库冲掉。
- 是否具备 国内合规 意识(数据不出境、敏感等级保护、操作审计)。
回答时要体现“演练”二字:只验证备份可用,不破坏线上,结果可量化(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 Transparency、Cloud Audit Logs 写入中国项目日志桶
- 演练指标:RTO(恢复耗时)、RPO(数据丢失量)、校验和、连接探活、业务黄金 SQL 返回结果
- 成本优化:克隆实例使用共享 CPU(db-f1-micro)+自动删除(label:ttl=6h)
- 通知链路:Cloud Monitoring 告警 → PagerDuty 或钉钉(通过 EventBridge 国内版)
答案
整体思路:定时触发 → 创建克隆实例 → 运行校验脚本 → 上报指标 → 清理资源,全部用 Cloud Functions 编排,零人工干预。
-
准备阶段
a. 启用 Cloud SQL Admin API、Cloud Functions API、Cloud 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 降低公网费用。 -
部署 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、校验结果。 -
定时触发
Cloud Scheduler 每周一 03:00(上海时区)发 Pub/Sub 消息 topic=backup-drill,CF 订阅该 topic。
国内合规:Scheduler 作业区域选 shanghai,确保调度数据不出境。 -
观测与告警
- 在 Cloud Monitoring 创建告警策略:若 backup_drill_result==0 连续 1 次,则电话告警。
- 备份窗口外若自动备份失败,也会触发 backup_drill_result=0,实现联动。
-
权限与审计
- 所有操作写入 Cloud Audit Logs(DATA_WRITE 类型),日志桶保存在 中国项目(shanghai 区域),保存 365 天,满足等保三级。
- 使用 CMEK 加密的实例,克隆时自动继承密钥,确保演练数据同样加密。
-
成本评估
- 克隆实例存活 30 分钟,db-f1-micro 单价 0.015 USD/h,每周一次,月成本 < 0.1 USD。
- 网络走 Private IP,无出流量费。
一句话总结:用 Cloud Functions 无服务器编排克隆恢复,每周自动验证备份可用性,30 分钟内完成并自动删库,结果量化到 RTO/RPO 并对接国内告警通道,既满足 Google Cloud 最佳实践,也符合中国数据合规要求。
拓展思考
- 如果实例开启 CMEK,但密钥轮换后旧备份密钥版本被禁用,克隆会失败。解决方案:在演练前调用 cloudkms.cryptoKeyVersions.get 确认密钥版本仍 ENABLED,否则自动回退到最新 on-demand 备份。
- 对于 SQL Server 实例,clone API 不支持,可改用 导出 bak 到 Cloud Storage → 新建临时实例 → import bak 的方式,耗时更长,需在 CF 里把 RTO 阈值动态调到 2h。
- 国内多项目场景,可用 Terraform + Cloud Build 把 CF、Scheduler、IAM 做成一键基准包,通过 Cloud Source Repositories(shanghai 区域)做 GitOps,实现百套环境统一演练。
- 未来可升级到 Cloud Workflows,把“克隆→校验→删库→报告”做成可视化 DAG,支持并行演练多个实例,并内置重试策略,进一步降低单点失败。