Это мой первый вопрос в переполнении стека, поэтому, пожалуйста, извините, если мне не хватает информации.
Проблема
Я пытаюсь подключиться 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>