从 App Engine 连接到 Google Cloud SQL 时出现 ENOENT

问题描述 投票:0回答:5

我正在尝试在 Google App Engine 上部署我的 Node.js 应用程序,它部署得很好,但由于某种原因无法连接到 Google Cloud SQL。这是它抛出的内容:

Error: connect ENOENT /cloudsql/my-project-id:asia-east1:my-sql-instance

这是我配置连接的方法:

if (process.env.INSTANCE_CONNECTION_NAME) {
     exports.mysqlConfig = {
         user: process.env.GCLOUD_SQL_USERNAME,
         password: process.env.GCLOUD_SQL_PASSWORD,
         socketPath: '/cloudsql/' + process.env.INSTANCE_CONNECTION_NAME
     }
} else {
    // Use settings for localhost
}

我正在使用

node-mysql
模块连接到数据库。

App Engine 和 Cloud SQL 已位于同一个项目中。 我的理论是,App Engine 和 Cloud SQL 必须位于同一项目同一区域,但我不确定。

mysql node.js google-app-engine
5个回答
20
投票

使用以下命令检查启动过程中的日志是否有任何错误:

  1. 以下cmd

    gcloud app logs tail -s default
    或,

  2. 使用日志查看器https://console.cloud.google.com/logs/viewer

您可能尚未为项目启用 Cloud SQL API:https://console.developers.google.com/apis/api/sqladmin/overview


11
投票

确保您已在 app.yaml 中添加以下设置

beta_settings:
  # The connection name of your instance, available by using
  # 'gcloud beta sql instances describe [INSTANCE_NAME]' or from
  # the Instance details page in the Google Cloud Platform Console.
  cloud_sql_instances: YOUR_INSTANCE_CONNECTION_NAME

参考:https://cloud.google.com/appengine/docs/flexible/nodejs/using-cloud-sql-postgres


5
投票

对于任何使用第二代云功能的人 - 他们在文档中添加了一部分:

如果您使用的是 Cloud Functions(第二代)而不是 Cloud Functions(第一代) gen),需要以下内容(另请参阅配置 Cloud Run):

他们继续列出所需的步骤。它们有点吓人,但最终会起作用。

(如果您发现自己在新的 Cloud Run 版本中寻找 SQL 连接,请注意有一个单独的“连接”选项卡)


1
投票

显然你做事的顺序很重要......

  1. 启用 Cloud SQL API
  2. 然后(重新)部署您的应用程序(gcloud 应用程序部署)

当我这样做时

deploy -> create databases -> enable sql ipi
我收到了ENOENT错误


0
投票

正如 Oded Ben Dov 在他的回答中指出的那样,第二代 Cloud Functions 需要额外的步骤来启用 Cloud SQL 连接。我添加了更多信息,以帮助将来遇到此问题的其他人。 (Oded,感谢您的回答!您的线索节省了我很多时间。)

  1. 首先,您必须部署第二代云功能。它必须先存在,然后才能配置它。

  2. 然后您转到 Cloud Run 实例以获取新函数。单击以编辑并部署新修订版。

  3. 按照Google 文档中的步骤操作。请注意,Google 似乎定期对 GCP UI 的各个方面进行更改,但没有更新引用它的文档。就我而言(2023 年末),UI 中的标题已经与文档中的内容略有不同。但最终您会在 Cloud Run 配置中寻找允许您添加新 Cloud SQL 连接的部分。您必须在此处选择您的 Cloud SQL 实例,以允许 Cloud Run 实例访问它。

困难的部分是找到在哪里执行此操作。实际上添加连接很简单,只需几秒钟。

  1. 重要提示:即使添加新的 Cloud SQL 连接后,您可能仍然需要再次手动部署 Cloud Function。就我而言,保存 Cloud SQL 连接后,Cloud Run 开始显示错误,指出无法找到新部署的映像。

我第二次手动部署 Cloud Function 后,新部署继承了新的 Cloud SQL 连接设置,然后开始正常工作。

© www.soinside.com 2019 - 2024. All rights reserved.