将 AWS Lambda 连接到 Redshift - 60 秒后超时
Posted
技术标签:
【中文标题】将 AWS Lambda 连接到 Redshift - 60 秒后超时【英文标题】:Conecting AWS Lambda to Redshift - Times out after 60 seconds 【发布时间】:2015-03-31 15:33:30 【问题描述】:我创建了一个 AWS Lambda 函数:
通过 JDBC URL 登录 Redshift 运行查询在本地,使用Node,我可以通过JDBC成功连接到Redshift实例,并执行查询。
var conString = "postgresql://USER_NAME:PASSWORD@JDBC_URL”;
var client = new pg.Client(conString);
client.connect(function(err)
if(err)
console.log('could not connect to redshift', err);
// omitted due to above error
但是,当我在 AWS Lambda 上执行该函数时(它包含在 async#waterfall 块中),AWS Cloudwatch 日志告诉我 AWS Lambda 函数在 60 秒后超时。
关于为什么我的函数无法连接的任何想法?
【问题讨论】:
【参考方案1】:我发现要么您将 Redshift 安全组公开给所有来源,要么不公开。因为 Lambda 函数不在固定地址甚至固定范围的 IP 地址上运行,这对用户完全透明(AKA 无服务器)。
我刚刚看到亚马逊昨天宣布了支持 VPC 的新 Lambda 功能。我想如果我们可以在 VPC 中运行 Redshift 集群,这可以解决问题。
【讨论】:
这不是连接问题,而是长时间查询时超时 @MartijnScheffer 一个数据库连接问题通常会导致超时。不难在数据库端验证是否有任何查询实际运行 是的,但这不是这里的主题,他在谈论 AWS lambda 超时,这就是我的理解,但是,它可能是连接失败,或者是长查询达到 lambda 的超时,它很容易找到,运行一个非常短的查询(select count(*) ....)如果可行,那就是 lambda 是的,它的连接,我错了,可能是 IAM 问题,角色,访问权限?【参考方案2】:如果你使用 serverless-framework v1.5.0,你应该添加:
iamRoleStatements:
- Effect: Allow
Action:
- ec2:CreateNetworkInterface
Resource: '*'
- Effect: Allow
Action:
- ec2:DeleteNetworkInterface
- ec2:DescribeNetworkInterfaces
Resource: 'arn:aws:ec2:$self:provider.region:*:network-interface/*'
还应将所有 securityGroupIds 添加到入站规则中,如下所示:
更多信息:https://serverless.com/framework/docs/providers/aws/guide/functions/#vpc-configuration
【讨论】:
再说一次,这与访问权限无关,而是由于一分钟超时以上是关于将 AWS Lambda 连接到 Redshift - 60 秒后超时的主要内容,如果未能解决你的问题,请参考以下文章
从没有 VPC 的 Lambda 连接到公共 Redshift 数据库
无法从 AWS lambda 连接 AWS redshift
Lambda 函数无法连接到 Redshift:名称解析暂时失败
Google Data Studio 目前可以连接到 AWS RDS 或 Redshift 吗?