GCP云函数连接Cloud SQL报错:模块缺失及路由不可达
解决GCP云函数连接Cloud SQL MySQL的两个问题
1. 处理ModuleNotFoundError: No module named 'google.cloud.sql'
- 本地调试检查:如果是本地测试云函数,先确认已激活虚拟环境,执行
pip install -r requirements.txt安装所有依赖,再通过pip list | grep cloud-sql-python-connector验证包是否安装成功、版本是否为1.2.0。 - 部署环节检查:GCP云函数部署时会自动读取
requirements.txt安装依赖,但如果部署命令未指向正确目录,或依赖安装过程中因网络问题失败,都会导致包缺失。查看云函数的构建日志,确认是否有依赖安装报错;若有,尝试升级cloud-sql-python-connector到较新版本(如1.13.0)后重新部署。 - 运行时兼容性:确认云函数选择的Python运行时版本与依赖兼容,cloud-sql-python-connector 1.2.0支持Python 3.7~3.10,避免使用不匹配的运行时。
2. 解决OSError: [Errno 113] No route to host
- 确认私有IP配置:Cloud SQL实例必须启用私有IP,且该IP所属VPC与云函数配置的VPC完全一致。
- 防火墙规则验证:在VPC中配置防火墙规则,允许云函数所在子网的IP段访问Cloud SQL实例的3306端口。规则需设置:来源为云函数子网IP范围,目标为Cloud SQL实例的标签或私有IP范围,协议TCP,端口3306。
- 云函数VPC配置:确保云函数已连接到目标VPC的指定子网,该子网需与Cloud SQL的私有IP子网处于同一VPC(或已完成VPC peering连通)。
- 实例状态与权限:确认Cloud SQL实例处于运行状态,且云函数的服务账号已被授予
Cloud SQL Client角色,并添加到Cloud SQL实例的IAM权限列表中。
改用mysql.connector的连接实现
如果倾向使用mysql.connector,可以按以下方式修改代码:
导入语句
import requests import os from google.cloud.sql.connector import Connector, IPTypes import mysql.connector
连接函数
def _get_connection(db='bot_config'): ip_type = IPTypes.PRIVATE connector = Connector(ip_type) # 替换为你的Cloud SQL实例连接名(格式:项目ID:区域:实例名) conn = connector.connect( 'x:y:z', "mysql-connector", user='user', password='password', db=db, ) return conn
依赖调整
如果不再使用PyMySQL,可以从requirements.txt中移除PyMySQL==1.0.2,保留mysql-connector-python==8.0.32和cloud-sql-python-connector==1.2.0即可。
内容的提问来源于stack exchange,提问作者Maanav
相关产品推荐
相关产品推荐

