Я пытаюсь выяснить, как подключиться к прокси-серверу RDS PG в лямбда-функции с помощью TypeORM (чтобы не было проблем с установкой соединений). Я могу успешно подключиться к экземпляру RDS с помощью функции Lambda, однако, когда я указываю информацию на прокси-сервере (меняю переменные среды в функции Lambda), я получаю следующую ошибку:
{
"errorType": "Error",
"errorMessage": "read ECONNRESET",
"code": "ECONNRESET",
"errno": "ECONNRESET",
"syscall": "read",
"stack": [
"Error: read ECONNRESET",
" at TCP.onStreamRead (internal/stream_base_commons.js:205:27)"
]
}
Вот код, используемый для создания соединения с TypeORM:
const config = getDBConfig();
connection = await createConnection(config);
// Retrieve database connection options
const getDBConfig = (): ConnectionOptions => {
// Use IAM-based authentication to connect
const signer = new RDS.Signer({
region: "us-east-1",
username: process.env.USERNAME,
hostname: process.env.HOSTNAME,
port: 5432,
});
// Retrieve password dynamically from RDS
const token = signer.getAuthToken({
username: process.env.USERNAME,
});
// Return configuration object
return {
username: process.env.USERNAME,
host: process.env.HOSTNAME,
port: 5432,
password: token,
ssl: {
ca: fs.readFileSync("./config/rds-ca-2019-root.pem").toString(),
},
type: "postgres",
database: "postgres",
synchronize: false,
entities: [],
};
};
С точки зрения двух переменных среды HOSTNAME равно URL-адресу, предоставленному прокси RDS, а USERNAME - это имя пользователя, назначенное в секрет прокси RDS. И функция Lambda, и прокси-сервер RDS получили доступ администратора, чтобы убедиться, что там нет никакого вмешательства (я знаю, что это ужасно, уменьшу привилегии, как только я заработаю!). Для прокси-сервера установлена необходимая проверка подлинности IAM.
Обновление 14.08.2020
В этой статье объясняется, как подключить прокси-сервер RDS MySQL к TypeORM, до сих пор не понял, как подключиться к прокси-серверу RDS PG.
https://dev.to/vikasgarghb/rds-proxy-via-sam-15gn