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

为何无法将Google Cloud Functions连接至Cloud SQL MySQL?

排查Cloud Functions(第一代)连接Cloud SQL MySQL失败的步骤

一、基础配置校验

  • 确认环境变量已正确配置:
    • instance_connection_name 格式必须是 项目ID:区域:实例名,且已在Cloud Functions的环境变量中正确设置
    • db_user、db_pass、db_name 需与Cloud SQL实例中创建的账号、密码、数据库名完全匹配
  • 检查网络配置:
    • 公网IP连接:确认Cloud SQL实例的公网IP已将Cloud Functions的出口IP添加到授权列表(可临时授权0.0.0.0/0测试,排查是否为IP授权问题)
    • 内网IP连接:确认Cloud Functions与Cloud SQL实例处于同一VPC,且已配置Serverless VPC Access连接器

二、代码优化与调试

当前代码仅创建连接池但未触发实际数据库连接,无法生成有效排查日志。建议修改入口函数,添加测试查询并捕获异常:

import os
import logging

from google.cloud.sql.connector import Connector, IPTypes
import pymysql
import sqlalchemy

# 配置日志输出
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)

def connect_with_connector():
    """初始化连接池并测试数据库连接"""
    try:
        # 读取环境变量(需提前在Cloud Functions控制台配置)
        instance_connection_name = os.environ["INSTANCE_CONNECTION_NAME"]
        db_user = os.environ["DB_USER"]
        db_pass = os.environ["DB_PASS"]
        db_name = os.environ["DB_NAME"]

        ip_type = IPTypes.PRIVATE if os.environ.get("PRIVATE_IP") else IPTypes.PUBLIC
        connector = Connector(ip_type)

        def getconn():
            conn = connector.connect(
                instance_connection_name,
                "pymysql",
                user=db_user,
                password=db_pass,
                db=db_name,
            )
            return conn

        # 创建带参数的连接池,提升稳定性
        pool = sqlalchemy.create_engine(
            "mysql+pymysql://",
            creator=getconn,
            pool_size=5,
            max_overflow=2,
            pool_recycle=300,
            pool_pre_ping=True,
        )

        # 执行测试查询,触发实际连接
        with pool.connect() as conn:
            result = conn.execute(sqlalchemy.text("SELECT 1"))
            logger.info(f"连接成功,测试查询结果: {result.fetchone()}")
            return "数据库连接成功"
    except Exception as e:
        # 打印详细异常栈,便于排查
        logger.error(f"连接失败: {str(e)}", exc_info=True)
        return f"连接失败: {str(e)}"

三、依赖与权限检查

  • 优化requirements.txt,指定兼容版本避免依赖冲突:
    google-cloud-sql-connector>=1.14.0
    pymysql>=1.1.0
    sqlalchemy>=2.0.0
    
  • 确认Cloud Functions服务账号权限:
    • 必须拥有Cloud SQL Client角色(roles/cloudsql.client)
    • 使用内网IP时,需额外添加Serverless VPC Access User角色

四、日志排查技巧

  • 在Cloud Functions控制台的日志页面,切换到高级日志过滤器,用以下规则捕获详细错误:
    resource.type="cloud_function"
    resource.labels.function_name="你的函数名"
    severity>=ERROR
    
  • 开启Cloud SQL的审计日志,查看是否有来自Cloud Functions的连接请求被拒绝的记录

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 00:42:41