尝试通过AWS Lambda连接到Redshift

时间:2015-01-30 22:47:19

标签: node.js jdbc amazon-redshift

我正在将node-postgres客户端用于我的AWS Redshift数据库。

在本地,我可以在node中运行以下代码,获取“>> connected”和“>>>成功查询的打印语句.jsonResult:”。

但是,当我在Amazon Lambda中运行此代码时,除了“尝试连接...”之外,我没有看到任何日志语句。

console.log("trying to connect...");
var r = pg.connect(conString, function(err, client) { 
  if(err) {
    return console.log('>> could not connect to redshift', err);
  }
  console.log(">> connected");
  client.query('SELECT * FROM my_table', function(err, result) {
    if(err) {
      return console.log('error running query', err);
    }
    var jsonResult = JSON.stringify( result );
    console.log(">>> successful query. jsonResult: " +  jsonResult);
    client.end();
    return jsonResult;
  });
});

我很困惑,除了“>>尝试连接......”之外,没有打印声明可以显示在此代码中。

2 个答案:

答案 0 :(得分:2)

您应该检查两件事

  1. 确保您的Lambda函数不会提前返回,您发布的snipplet不包含对context.done()的任何调用,因此很难知道您是否正确处理此问题。你在其他地方打电话给context.done()吗?
  2. 您的Redshift群集是否对互联网开放?当您手动连接到Redshift群集时,是通过EC2实例还是通过Internet进行操作?如果是前者,则Lambda函数可能无法连接到群集,因为群集不可寻址(但它来自您的EC2实例,因为您已配置群集的安全组以允许实例的安全组连接)。 You can read more about how to configure access to your cluster here

答案 1 :(得分:0)

您是否可能没有将Lambda附加到VPC?如果是这种情况,我建议将其连接到两个专用子网,并确保有一个可用于这些子网的NAT网关。您可以在本教程中找到更多信息:https://github.com/awslabs/aws-lambda-redshift-loader