8

我创建了一个 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 秒后超时。

关于为什么我的功能无法连接的任何想法?

4

2 回答 2

2

我发现要么您向所有来源公开您的 Redshift 安全组,要么不公开。因为 Lambda 函数不在固定地址甚至固定范围的 IP 地址上运行,这对用户完全透明(AKA 无服务器)。

我刚刚看到亚马逊昨天宣布了支持 VPC 的新 Lambda 功能。我想如果我们可以在 VPC 中运行 Redshift 集群,这可以解决问题。

于 2015-10-10T04:50:51.550 回答
1

如果您使用的是 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 添加到入站规则,如下所示: 截图 2017-01-09 23 02 33

更多信息:https ://serverless.com/framework/docs/providers/aws/guide/functions/#vpc-configuration

于 2017-01-10T01:22:56.967 回答