Я пытаюсь подключить службу Cloud Run к экземпляру Postgres Cloud SQL. Кажется, я почти у цели, но у меня возникли проблемы с правильным подключением развернутого экземпляра. Моя локальная среда может подключаться (через SSL) к базе данных, предназначенной для производства, но развернутая версия не может...
Я использую TypeORM, и все правильно настроено в конфигурации...
@Module({
imports: [
TypeOrmModule.forRootAsync({
imports: [ConfigModule],
inject: [ConfigService],
useFactory: (configService: ConfigService) => {
const socketPath = configService.get('DB_SOCKET_PATH');
const extra = socketPath ? {
socketPath: socketPath,
ssl: {
rejectUnauthorized: false,
ca: Buffer.from(process.env.DB_SSL_CA, 'base64').toString('ascii'),
cert: Buffer.from(process.env.DB_SSL_CERT, 'base64').toString('ascii'),
key: Buffer.from(process.env.DB_SSL_KEY, 'base64').toString('ascii'),
}
} : { };
return ({
type: 'postgres',
host: socketPath || configService.get('DB_HOST'),
port: configService.get('DB_PORT'),
username: configService.get('DB_USER'),
password: configService.get('DB_PASS'),
database: configService.get('DB_NAME'),
extra: extra,
entities: [__dirname + '/../../modules/**/*.entity{.ts,.js}'],
namingStrategy: new SnakeNamingStrategy(),
synchronize: true,
});
}
})
]
})
export class DatabaseModule { }
Несмотря на это, я получаю сообщение об ошибке, когда пытаюсь использовать socketPath в качестве хоста, а не фактическую переменную хоста (необходимую для GCP). Кажется, что TypeORM добавляет дополнительные символы /.s.PGSQL.5432
в конец моей строки подключения, которые мне не нужны. И просто чтобы уточнить, путь к сокету имеет форму /cloudsql/<PROJECT_ID>:<REGION>:<INSTANCE>
.
[Nest] 28532 - 02/15/2021, 2:25:07 PM [ExceptionHandler] connect ENOENT <DB_SOCKET_PATH>/.s.PGSQL.5432 +3ms
Error: connect ENOENT <DB_SOCKET_PATH>/.s.PGSQL.5432
at PipeConnectWrap.afterConnect [as oncomplete] (net.js:1141:16)
Раньше это работало для меня, но я предполагаю, что что-то изменилось в библиотеке TypeORM. У кого-нибудь есть идеи по этому поводу? Спасибо!
РЕДАКТИРОВАТЬ: На данный момент я получил его для правильного подключения к серверу, но теперь он выдает мне ошибку, в которой говорится, что сервер не поддерживает SSL-соединения, что не имеет смысла, учитывая, что я могу нормально подключаться через SSL на моем локальном компьютере. машина...?