如何在Cloud Run中通过redis.StrictRedis创建带认证的Google Cloud Redis连接池
解决方案:Cloud Run中带SSL认证的Redis连接池配置
错误原因分析
- 第一种写法报错是因为
ConnectionPool构造函数不直接支持ssl、ssl_cert_reqs这类SSL相关参数——这些参数属于底层连接对象的配置,而非连接池本身的参数。 - 第二种拆分写法出现连接重置,是因为连接池创建的是非SSL连接,但客户端强制要求SSL,导致与Google Cloud Redis的SSL要求不匹配,被服务端主动断开。
正确实现方式
方式1:显式指定SSL连接类并传递认证参数
通过connection_class指定使用SSL连接,同时用connection_kwargs传递SSL认证所需的参数:
from redis import StrictRedis, ConnectionPool, SSLConnection # 创建带SSL配置的连接池 pool = ConnectionPool( host=redis_webhooks_host, port=redis_webhooks_port, password=redis_webhooks_authstring, db=1, # 指定使用SSL连接类 connection_class=SSLConnection, # 传递SSL认证相关参数 connection_kwargs={ "ssl_cert_reqs": "required", "ssl_ca_certs": f"/tmp/{redis_webhooks_server_ca_pem_name}" }, # 连接池性能配置(可选) max_connections=100, socket_timeout=5, retry_on_timeout=True ) # 通过连接池初始化Redis客户端 redis_webhooks_client = StrictRedis(connection_pool=pool)
方式2:使用rediss://URL简化配置
利用rediss://协议自动启用SSL,通过URL查询字符串传递认证参数,再用ConnectionPool.from_url解析配置:
from redis import StrictRedis, ConnectionPool # 构造Redis SSL连接URL redis_ssl_url = ( f"rediss://:{redis_webhooks_authstring}@{redis_webhooks_host}:{redis_webhooks_port}/1" f"?ssl_cert_reqs=required&ssl_ca_certs=/tmp/{redis_webhooks_server_ca_pem_name}" ) # 从URL创建连接池 pool = ConnectionPool.from_url( redis_ssl_url, max_connections=100, socket_timeout=5, retry_on_timeout=True ) # 初始化客户端 redis_webhooks_client = StrictRedis(connection_pool=pool)
注意事项
- 确保你的
redis-py版本≥3.0(支持SSLConnection和connection_kwargs参数),如果版本过低建议升级。 - 确认Cloud Run服务有权限访问Google Cloud Redis实例(需配置VPC连接器或将Cloud Run的出站IP加入Redis的授权网络)。
- 验证
/tmp/{redis_webhooks_server_ca_pem_name}路径下的CA证书文件存在且可读(Cloud Run的临时目录可正常访问)。
内容的提问来源于stack exchange,提问作者Luke_V
相关产品推荐
相关产品推荐

