通过AWS Lambda调用Redshift Data SDK执行查询遇ECONNREFUSED错误
使用@aws-sdk/client-redshift-data调用Redshift Serverless时出现ECONNREFUSED 127.0.0.1:80错误
问题详情
调用Redshift Serverless集群执行查询时,Lambda函数返回如下错误:
Error: connect ECONNREFUSED 127.0.0.1:80 at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1487:16) { errno: -111, code: 'ECONNREFUSED', syscall: 'connect', address: '127.0.0.1', port: 80, '$metadata': { attempts: 1, totalRetryDelay: 0 } }
Lambda代码片段:
const client = new RedshiftData({ region: process.env.AWS_REGION, endpoint: process.env.REDSHIFT_HOST }) try { console.log('Send executeStatementCommand...') let queryStatus: StatusString | string | undefined const output: ExecuteStatementCommandOutput = await client.executeStatement({ Sql: sql, Database: process.env.REDSHIFT_DATABASE, WorkgroupName: process.env.REDSHIFT_WORKGROUPNAME }) ...
不清楚为何连接地址指向127.0.0.1,求解决方案。
解决方案
1. 移除endpoint参数
Redshift Data API的客户端不需要手动指定endpoint,SDK会根据你传入的region自动生成对应区域的Data API官方端点。你当前设置的endpoint参数要么是空值,要么是无效值,导致SDK fallback到本地地址127.0.0.1:80尝试连接。
修正后的客户端初始化代码:
const client = new RedshiftData({ region: process.env.AWS_REGION })
2. 验证核心配置
- IAM权限:确保Lambda执行角色拥有
redshift-data:ExecuteStatement权限,同时允许访问目标Redshift Serverless工作组。 - Redshift Serverless工作组配置:确认工作组已启用Data API功能,并且网络配置允许Lambda访问(如果Lambda在VPC内,需确保工作组的VPC与Lambda的VPC连通;如果是公网访问,需开启工作组的公网访问权限)。
- 环境变量有效性:检查
REDSHIFT_DATABASE和REDSHIFT_WORKGROUPNAME环境变量是否正确配置,指向存在的数据库和工作组名称。
内容的提问来源于stack exchange,提问作者remi0291
相关产品推荐
相关产品推荐

