Не могу получить доступ PostgreSQL в Google Cloud SQL из проекта Nest JS в Google App Engine - PullRequest
1 голос
/ 27 февраля 2020

Это мой первый вопрос в переполнении стека, поэтому, пожалуйста, извините, если мне не хватает информации.

Проблема

Я пытаюсь подключиться PostgreSQL в облаке SQL из Nest JS в Google App Engine. Когда я пытаюсь использовать приложение в локальной среде, программа работает, но когда дело доходит до производства в Google App Engine, то оно не работает.

Поскольку я боролся с трудностями, я решил спросить об этом замечательное сообщество.

Мое окружение

  • Node.js: v10.19.0
  • Гнездо JS: 6.10.5
  • TypeORM
  • 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

Также Я добавил Cloud SQL Client Authority моей учетной записи службы GAE (что-то вроде этого service-PROJECT_ID@gae-api-prod.google.com.iam.gserviceaccount.com).

Я также добавил пакет. json, как написано ниже:

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

В опциях typeorm я добавил дополнительный socketpath.

extra: {
   socketPath: `/cloudsql/<INSTANCE_CONNECTION_NAME>/`,
            },
Я не понимаю, должна ли быть установлена ​​эта опция или нет (я пробовал оба).
socketPath: `/cloudsql/<INSTANCE_CONNECTION_NAME>/.s.PGSQL.5432

or 

socketPath: `/cloudsql/<INSTANCE_CONNECTION_NAME>

1 Ответ

0 голосов
/ 29 февраля 2020

В соответствии с примером, представленным в 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

Возможно, это может быть причиной того, что имя экземпляра не разрешается для прокси.

...