【问题标题】:Conecting AWS Lambda to Redshift - Times out after 60 seconds将 AWS Lambda 连接到 Redshift - 60 秒后超时
【发布时间】: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 秒后超时。

关于为什么我的函数无法连接的任何想法?

【问题讨论】:

    标签: node.js amazon-web-services amazon-redshift aws-lambda


    【解决方案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

    【讨论】:

    • 再说一次,这与访问权限无关,而是由于一分钟超时
    猜你喜欢
    • 2017-10-22
    • 1970-01-01
    • 2018-09-14
    • 2020-11-18
    • 1970-01-01
    • 2018-07-23
    • 1970-01-01
    • 1970-01-01
    • 2018-05-08
    相关资源
    最近更新 更多