node.js - 如何允许 Google App Engine 访问 Google Cloud PostgreSQL

标签 node.js postgresql google-app-engine google-cloud-sql

我在 Google App Engine 中发现我的 node.js 存在问题,因为它无法连接到 Google Cloud PostgreSQL:

Unhandled rejection SequelizeBaseError: connect ETIMEDOUT ***.***.***.***:5432
at (/app/node_modules/sequelize/lib/dialects/postgres/connection-manager.js:111)
at Connection.<anonymous> (/app/node_modules/pg/lib/client.js:176)
at emitOne (events.js:96)
at Connection.emit (events.js:188)
at Socket.<anonymous> (/app/node_modules/pg/lib/connection.js:59)
at emitOne (events.js:96)
at Socket.emit (events.js:188)
at emitErrorNT (net.js:1281)
at _combinedTickCallback (internal/process/next_tick.js:74)
at process._tickCallback (next_tick.js:98)

我不确定如何在下面添加 IP 地址(也许我错过了在 Google Cloud SQL 中配置的内容)。

enter image description here

最佳答案

how to connect App Engine applications to Cloud SQL instances 有一些非常好的文档。您可以在此处找到有关如何让您的应用程序在本地开发和生产环境中访问 Cloud SQL 实例(针对每种受支持的编程和 SQL 语言)的详细步骤。

假设您在将应用程序部署到生产环境(即 App Engine 环境)时发现连接问题,这里总结了您必须执行的主要步骤:

  1. 使用命令 gcloud sql instances describe [INSTANCE_NAME] 获取 Cloud SQL 实例的全名。它的类型应该是 <PROJECT_ID>:<REGION>:<INSTANCE_NAME> .
  2. 使用与您的 App Engine 应用程序关联的服务帐户授予对 App Engine 的访问权限。它应具有 Cloud SQL 客户端Cloud SQL 编辑器 角色。
  3. app.yaml 中为您的 SQL 实例定义环境变量测试版设置文件。

(将此代码添加到 app.yaml 文件中,并进行编辑以适合您的参数):

env_variables:
  SQL_USER: <YOUR_CLOUD_SQL_USER>
  SQL_PASSWORD: <YOUR_CLOUD_SQL_PASSWORD>
  SQL_DATABASE: <YOUR_CLOUD_SQL_DATABASE>
  INSTANCE_CONNECTION_NAME: <INSTANCE_CONNECTION_NAME>   # With format as <PROJECT_ID>:<REGION>:<INSTANCE_NAME>

beta_settings:
  cloud_sql_instances: <INSTANCE_CONNECTION_NAME>   # With same format
  • 使用 package.json 将 Node.js PostreSQL 客户端库添加到您的应用程序中文件。文档建议使用 Knex.jspg,但想必您将能够使用您选择的一个。
  • (将此代码添加到 package.json 文件):

    "dependencies": {
      "async": "2.5.0",
      "express": "4.15.4",
      "knex": "0.13.0",
      "pg": "7.3.0",
      "prompt": "1.0.0"
    },
    
    <小时/>

    为应用程序设置正确的配置后,您可以查看此 sample Node.js code 。为了找到主脚本中丢失的项目。

    如果您现在部署应用程序,它应该会发挥作用。

    P.S.:请记住,由于 App Engine 和 Cloud SQL 是 Google Cloud Platform 系列的两款产品,因此无需在 Cloud SQL 实例中授权外部网络,因此您也可以忽略这一部分。

    关于node.js - 如何允许 Google App Engine 访问 Google Cloud PostgreSQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48023713/

    相关文章:

    postgresql - 为什么 Postgres 自动增量计数器会在 Heroku DB 故障转移期间向前移动?

    python - 如何 shell 到本地运行的 Python 应用程序?

    node.js - 使用 promises 在 Node.js + Express 中处理错误

    javascript - 服务器上的 Date.now() 相对于客户端提前?

    node.js - 幻影 JS + Docker : html font-family is not respected when converting from HTML

    postgresql - 连接到具有不同语言环境的 postgresql 数据库

    javascript - 在 Nodejs 中将数千个并发 https 请求分成更小的 block

    Postgresql - 来自查询列的百分比

    google-app-engine - Google App Engine 重定向所有裸域请求,导致 letsencrypt 无法工作

    android - 使用 Java 应用引擎的 GCM 服务器无法正常工作