我试图弄清楚如何使用 TypeORM 在 lambda 函数中连接到 RDS PG 代理(因此建立连接没有问题)。我能够使用 Lambda 函数成功连接到 RDS 实例 - 但是,当我将信息指向代理时(更改 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 等于 RDS 代理提供的 URL,USERNAME 是在密钥中为 RDS 代理分配的用户名。Lambda 函数和 RDS 代理都被授予了管理员访问权限,只是为了确保那里没有干扰(我知道这很可怕,一旦我开始工作就会降低权限!)。IAM 身份验证已设置为代理所需。
2020 年 8 月 14 日更新
本文解释了如何将 RDS MySQL Proxy 与 TypeORM 连接,但仍然没有弄清楚如何连接到 RDS PG Proxy。