You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
注册

使用Lambda+Sequelize连接Aurora Postgres的RDS Proxy失败求助

解决Lambda通过Sequelize连接RDS Proxy(Aurora Postgres)的问题

核心原因

直接连接数据库正常但切换到RDS Proxy失败,且报错SequelizeConnectionError: Connection terminated unexpectedly,本质是Postgres版本的RDS Proxy要求使用IAM认证生成的签名令牌作为密码,而非数据库原生密码,同时需适配代理的SSL连接要求。

解决方案步骤

1. 生成IAM认证令牌

使用AWS SDK v3生成适配Postgres的RDS认证令牌(适配Serverless v4环境):

import { Signer } from '@aws-sdk/rds-signer';

const generateAuthToken = async () => {
  const signer = new Signer({
    region: process.env.AWS_REGION,
    hostname: credentials.proxy_endpoint,
    port: 5432,
    username: credentials.username
  });
  return signer.getAuthToken();
};

2. 调整Sequelize连接配置

将生成的令牌作为密码传入,同时开启SSL配置并优化连接池参数(适配Lambda环境):

const authToken = await generateAuthToken();

const sequelize = new Sequelize(credentials.db_name, credentials.username, authToken, {
  host: credentials.proxy_endpoint,
  port: 5432,
  dialect: 'postgres',
  dialectOptions: {
    ssl: {
      rejectUnauthorized: false // 若使用AWS官方根证书可设为true,默认Proxy提供的证书设为false即可
    }
  },
  pool: {
    // Lambda环境下限制连接池大小,避免连接泄漏
    max: 2,
    min: 0,
    idle: 10000,
    acquire: 30000
  }
});

3. 验证IAM权限

确保Lambda执行角色拥有以下关键权限:

  • rds-db:connect权限,资源格式为arn:aws:rds-db:<区域>:<账号ID>:dbuser:<代理ID>/<数据库用户名>
  • 安全组规则允许Lambda所在IP访问RDS Proxy的5432端口(已确认同VPC,需检查入站规则)

排查要点

  • 确认RDS Proxy已启用IAM认证,且关联的数据库用户为IAM认证类型
  • 查看CloudWatch中RDS Proxy的日志,若出现IAM authentication failed,检查权限或令牌生成逻辑
  • 将Sequelize实例放在Lambda全局作用域,避免冷启动重复创建连接池

内容的提问来源于stack exchange,提问作者John Leal

火山引擎 最新活动