【问题标题】:Connect to Amazon RDS PostgresQL Proxy with IAM Credentials using TypeORM使用 TypeORM 使用 IAM 凭证连接到 Amazon RDS PostgresQL 代理
【发布时间】:2020-11-24 00:45:38
【问题描述】:

我试图弄清楚如何使用 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。

https://dev.to/vikasgarghb/rds-proxy-via-sam-15gn

【问题讨论】:

  • 我遇到了同样的问题,即使在我的机器上也无法正常工作。就我而言,我使用的是 Postgres,我只能认为它是 pg 驱动程序或 NodeJS 本身的问题。通过使用 JDBC 的 RDBMS 工具连接工作正常。
  • 您实际上只能连接到 VPC 内的 RDS 代理!因此,如果您尝试在本地计算机上运行它,我认为您永远无法让它工作。我绝对认为这可能是某种驱动程序问题,我只是想知道是否有解决方法。将能够在 Lambda 函数中使用一个不错的 ORM 来创建无服务器应用程序@EdmundoRodrigues
  • 我设置了 VPN,因此我可以访问 VPC 资源。同样,它适用于我的 RDSMS 工具(Datagrip,使用 JDBC),这是 pg-driver/nodejs 的问题,我不知道......
  • 不错!那肯定会起作用哈哈。可能会开始挖掘内部结构以开始弄清楚这一点......

标签: postgresql proxy amazon-rds typeorm amazon-rds-proxy


【解决方案1】:

我终于在 AWS 文档中找到了为 PG 设置 DB 用户的说明。在这里发布此内容以供任何也找不到它们的人使用。

https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.IAMDBAuth.DBAccounts.html#UsingWithRDS.IAMDBAuth.DBAccounts.PostgreSQL

基本上你只需要将用户添加到现有的rds_iam 组。

CREATE USER lambda;
GRANT ALL PRIVILEGES ON DATABASE postgres TO lambda;
GRANT rds_iam TO lambda;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-04
    • 1970-01-01
    • 1970-01-01
    • 2022-12-10
    • 1970-01-01
    • 2020-09-03
    • 2018-05-21
    • 2021-11-17
    相关资源
    最近更新 更多