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

部署GCP App Engine后无法连接Cloud SQL,提示ETIMEDOUT错误

App Engine Flex连接Cloud SQL超时问题修复

核心问题

你遇到的ETIMEDOUT错误,根源是代码里同时配置了host(公网IP)和socketPath(Cloud SQL套接字),导致Sequelize优先尝试通过公网IP连接,而App Engine Flex环境下这种方式会被网络限制拦截,最终超时。本地用Auth Proxy正常是因为代理帮你处理了连接路径,和部署环境的连接逻辑完全不同。

修复方案

1. 调整Sequelize连接配置

删掉host参数,只保留socketPath——App Engine Flex通过Cloud SQL套接字连接时不需要公网IP:

const Sequelize = require("sequelize").Sequelize;
const dotenv = require("dotenv");
dotenv.config();

const sequelize = new Sequelize(
  process.env.DB_NAME,
  process.env.DB_USER,
  process.env.DB_PASSWORD,
  {
    dialect: "mysql",
    socketPath: process.env.INSTANCE_CONNECTION, // 格式必须是 `/cloudsql/[项目ID]:[区域]:[实例名]`
  }
);

module.exports = { sequelize };

2. 修正app.yml的实例连接名

beta_settings里的cloud_sql_instances不需要加/cloudsql/前缀,直接填完整的实例连接名:

runtime: nodejs
env: flex

runtime_config:
  operating_system: "ubuntu22"
  runtime_version: "18"

beta_settings:
  cloud_sql_instances: "你的项目ID:实例区域:实例名称"

3. 确认服务账号权限

检查App Engine默认服务账号([项目ID]@appspot.gserviceaccount.com)是否拥有Cloud SQL Client角色,没有的话去IAM页面添加这个角色——否则应用没有权限访问Cloud SQL实例。

4. 验证环境变量

确保部署时INSTANCE_CONNECTION环境变量的值是/cloudsql/你的实例连接名,和app.yml里的实例名完全对应。可以通过命令行部署时设置:

gcloud app deploy --set-env-vars INSTANCE_CONNECTION=/cloudsql/你的项目ID:实例区域:实例名称

或者在App Engine控制台的“环境变量”面板里配置。

额外提醒

  • App Engine Flex会自动把Cloud SQL实例的套接字挂载到/cloudsql/目录,所以代码里的socketPath必须严格对应这个路径
  • 不要同时启用host和socketPath,否则Sequelize会优先走公网IP连接,触发超时

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 04:02:43