You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Cloud Functions将Cloud SQL生产实例最新备份恢复至staging实例?

自动化将Cloud SQL生产实例备份恢复至Staging实例方案

一、前置准备与权限配置

  1. 启用Cloud SQL Admin API:在GCP控制台的API库中搜索并启用「Cloud SQL Admin API」
  2. 配置Cloud Functions服务账号权限:
    • 为Cloud Functions默认服务账号(PROJECT_ID@appspot.gserviceaccount.com)添加Cloud SQL Admin角色,或更精细化的权限:
      • cloudsql.instances.restoreBackup:允许恢复备份到实例
      • cloudsql.backups.list:允许列出生产实例的备份
      • cloudsql.instances.get:允许获取实例信息

二、创建Cloud Functions函数(Python示例)

创建一个HTTP触发的Cloud Functions,核心逻辑是获取生产实例的最新备份,再恢复到Staging实例:

from googleapiclient import discovery
from oauth2client.client import GoogleCredentials

def restore_prod_backup_to_staging(request):
    # 替换为你的GCP项目ID、生产/Staging实例名称
    PROJECT_ID = "your-gcp-project-id"
    PROD_INSTANCE = "production"
    STAGING_INSTANCE = "staging"

    # 初始化SQL Admin客户端
    credentials = GoogleCredentials.get_application_default()
    sql_admin = discovery.build('sqladmin', 'v1', credentials=credentials)

    # 1. 获取生产实例的所有备份,按创建时间倒序排序
    backups_response = sql_admin.backups().list(
        project=PROJECT_ID,
        instance=PROD_INSTANCE
    ).execute()
    
    if not backups_response.get('items'):
        return "生产实例无可用备份", 400
    
    # 获取最新备份(第一个元素是最新的)
    latest_backup = backups_response['items'][0]
    backup_id = latest_backup['id']
    backup_time = latest_backup['startTime']
    
    # 2. 调用恢复API,将最新备份恢复到Staging实例
    restore_request = {
        "restoreBackupContext": {
            "backupId": backup_id,
            "instanceId": PROD_INSTANCE,
            "project": PROJECT_ID
        }
    }

    try:
        response = sql_admin.instances().restoreBackup(
            project=PROJECT_ID,
            instance=STAGING_INSTANCE,
            body=restore_request
        ).execute()
        return f"已触发恢复任务:将生产实例[{PROD_INSTANCE}]的备份({backup_id},创建于{backup_time})恢复至Staging实例[{STAGING_INSTANCE}]", 200
    except Exception as e:
        return f"恢复任务失败:{str(e)}", 500

三、配置Cloud Scheduler触发

  1. 在GCP控制台创建Cloud Scheduler任务:
    • 选择「HTTP」作为目标类型,输入Cloud Functions的触发URL
    • 请求方法选择「POST」,请求体可留空
    • 设置触发频率的Cron表达式(示例:每周一、三、五凌晨2点触发:0 2 * * 1,3,5,可根据需求调整)
    • 身份验证选择「服务账号」,使用具有调用Cloud Functions权限的账号(如Cloud Scheduler默认服务账号,需添加Cloud Functions Invoker角色)

注意事项

  • 恢复操作会重启Staging实例,且会覆盖现有数据,请确保Staging实例的业务可接受此操作
  • 若生产实例备份较多,可在代码中添加过滤条件(如仅选择最近24小时内的备份)
  • 可扩展函数逻辑,添加错误告警(如通过Pub/Sub发送告警消息)

内容的提问来源于stack exchange,提问作者Jonathan Lazarus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 04:55:24