尝试通过 AWS Lambda 连接到 Redshift

Kev*_*ith 5 jdbc node.js amazon-redshift

我正在使用Node-Postgres客户端连接我的 AWS Redshift 数据库。

在本地,我可以在 中运行以下代码node,获取“>>已连接”和“>>>>成功查询的打印语句。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;
  });
});
Run Code Online (Sandbox Code Playgroud)

我很困惑除了“>>尝试连接...”之外如何没有打印语句出现在这段代码中。

The*_*heo 3

您应该检查两件事

  1. 确保您的 Lambda 函数不会提前返回,您发布的代码片段不包含任何调用,context.done()因此很难知道您是否正确处理了这个问题。您正在打电话到context.done()其他地方吗?
  2. 您的 Redshift 集群是否向互联网开放?当您手动连接到 Redshift 集群时,您是从 EC2 实例还是通过互联网进行连接?如果是前者,您的 Lambda 函数可能无法连接到集群,因为集群不可寻址(但它来自您的 EC2 实例,因为您已将集群的安全组配置为允许实例的安全组连接)。您可以在此处阅读有关如何配置对集群的访问的更多信息