【问题标题】:Cant Access PostgreSQL on Google Cloud SQL from NestJS project on Google App Engine无法从 Google App Engine 上的 NestJS 项目访问 Google Cloud SQL 上的 PostgreSQL
【发布时间】:2020-06-11 05:30:30
【问题描述】:

这是我在 Stack Overflow 上的第一个问题,如果我的信息不足,请见谅。

问题

我正在努力从 Google App Engine 上的 NestJS 连接 CloudSQL 上的 PostgreSQL。 当我尝试在本地环境中使用该应用程序时,该程序可以运行,但在 Google App Engine 中进行生产时,它就无法运行。

由于我挣扎了几天,我决定在这里询问很棒的社区。​​p>

我的环境

  • Node.js:v10.19.0
  • NestJS:6.10.5
  • 类型ORM
  • PostgreSQL:11.5.1

我的 app.yaml

runtime: nodejs10
env: standard

default_expiration: "4d 5h"

env_variables:
  DATABASE_HOST: < public IP for Cloud SQL instance >
  DATABASE_USERNAME: username
  DATABASE_PASSWORD: password
  DATABASE_NAME: databasename
  INSTANCE_CONNECTION_NAME: "PROJECT_ID:REGION:INSTANCE_ID:DATABASE_NAME"

handlers:
- url: /.*
  secure: always
  redirect_http_response_code: 301
  script: auto

resources:
  cpu: 1
  memory_gb: 0.5
  disk_size_gb: 10

错误

[Nest] 18   - 02/27/2020, 8:25:46 AM   [TypeOrmModule] Unable to connect to the database. Retrying (3)... +34816ms

2020-02-27 08:25:46 default[20200227t163916]  Error: connect ETIMEDOUT 34.84.188.209:5432      at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1106:

其他操作

GAE 服务帐号

我还为我的 GAE 服务帐户添加了 Cloud SQL 客户端权限(类似于 service-PROJECT_ID@gae-api-prod.google.com.iam.gserviceaccount.com)。

我还添加了如下所示的 package.json:

  "engines": {
    "node": "10.x.x"
  },

在 typeorm 选项中,我添加了额外的套接字路径。

extra: {
   socketPath: `/cloudsql/<INSTANCE_CONNECTION_NAME>/`,
            },
我不明白是否应该设置这个选项(我都试过了)。
socketPath: `/cloudsql/<INSTANCE_CONNECTION_NAME>/.s.PGSQL.5432

or 

socketPath: `/cloudsql/<INSTANCE_CONNECTION_NAME>

【问题讨论】:

  • 为什么需要DATABASE_HOST:。您能否发布您用于连接到 sql 实例的代码?

标签: postgresql google-app-engine nestjs typeorm


【解决方案1】:

根据GitHub中提供的示例

https://github.com/GoogleCloudPlatform/nodejs-docs-samples/blob/master/appengine/cloudsql_postgresql/app.flexible.yaml

INSTANCE_CONNECTION_NAME 环境变量不包含 DATABASE_NAME 作为参数。

例如my-awesome-project:us-central1:my-cloud-sql-instance

这可能会导致没有为代理解析实例名称。

【讨论】:

  • 亲爱的马里奥先生,我已尝试按照您所说的方式连接数据库(无需数据库名称)并且可以成功连接。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-27
  • 2014-03-10
  • 1970-01-01
  • 1970-01-01
  • 2012-02-11
  • 2021-07-20
相关资源
最近更新 更多