【问题标题】:Node App is not working correctly on Google App Engine节点应用程序在 Google App Engine 上无法正常运行
【发布时间】:2020-08-13 19:33:45
【问题描述】:

我已将我的节点应用程序连接到我的 Cloud SQL 数据库并且它在本地运行良好,但是当我将我的节点应用程序部署到 App Engine 时,API 不再工作。在日志中,我可以看到以下内容:

(node:11) UnhandledPromiseRejectionWarning: SequelizeConnectionError: connect ETIMEDOUT

尽管连接到同一个 Google Cloud SQL DB,但当我在本地运行应用程序时不会发生这种情况。

我认为可能由于安全限制而无法连接,但在 SQL 连接页面上显示如下:

此项目中的应用:所有已授权。

我的节点应用程序部署在同一个项目中,所以这不应该是问题。我还将我的家庭 IP 列入白名单,以便我可以在本地连接,如前所述,这是成功的。任何帮助将不胜感激。

编辑:

这是我连接到数据库的尝试。它现在在本地和我部署时失败。如果我将公共 IP 传递给“主机”,它就可以在本地工作。

    const sequelize = new Sequelize('linkspot', 'kyle', 'password', {
        host: '/cloudsql/linkspot:us-central1:linkspot-mysql',
        dialect: 'mysql',
        port: 3306,
        pool: {
         max: 5,
         min: 1,
         acquire: 30000,
         idle: 10000
  }

});

【问题讨论】:

    标签: express google-cloud-platform cloud


    【解决方案1】:

    当您在本地计算机中连接时,连接是通过 SQL 代理建立的,但是当应用程序部署在应用程序引擎中时,需要几个 steps 来配置应用程序引擎,具体取决于应用程序引擎是使用私有 IP 还是公共 IP。

    例如,私有 IP 连接要求您在与 Cloud SQL 实例相同的 VPC 网络中创建一个无服务器 VPC 访问连接器,而公共 IP 连接要求您使用格式为:/cloudsql/INSTANCE_CONNECTION_NAME 的 unix 域套接字。

    有关这两种情况的说明,请查看doc

    【讨论】:

    • 感谢您的反馈。在尝试了你的建议后,我仍然在挣扎。我检查了我的日志并看到这条消息: (node:10) UnhandledPromiseRejectionWarning: SequelizeHostNotFoundError: getaddrinfo ENOTFOUND /cloudsql/linkspot:us-central1:linkspot-mysql /cloudsql/linkspot:us-central1:linkspot-mysql:3306
    • 我用我尝试连接的代码编辑了我的问题。
    • 您是否检查过您的 GAE 的服务帐户具有所需的 SQL 角色之一? Cloud SQL Client(首选),Cloud SQL Editor,Cloud SQL Admin 我不熟悉 Sequelize,不确定是否考虑到连接必须通过 unix socket GCP NodeJS SQL example 做的事情有点不同没有续集。
    • 您可以尝试使用 Sequelize 的私有 IP 方法(私有 IP 方法不使用 unix 套接字)
    猜你喜欢
    • 1970-01-01
    • 2013-12-20
    • 2012-05-25
    • 1970-01-01
    • 2020-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-14
    相关资源
    最近更新 更多