Snowflake 节点 Lambda 连接挂起

问题描述 投票:0回答:2

我正在使用雪花节点驱动程序连接到数据库。从本地服务器运行连接器时,我没有遇到任何问题。但是,当我尝试在 lambda 中运行相同的函数时,我似乎无法连接。没有错误、异常或超时……什么都没有。这是我根据他们的文档使用的代码。

var snowflake = require("snowflake-sdk");
var connection = snowflake.createConnection({
  account: "****",
  username: "******",
  password: "******",
});

connect(connection);

const response = {
  statusCode: 200,
  body: JSON.stringify("Hello from Lambda!"),
};
return response;

function connect(connection) {
  console.log("in connection");
  let connection_ID;
  try {
    connection.connect(function (err, conn) {
      if (err) {
        console.error("Unable to connect: " + err);
      } else {
        console.log("Successfully connected to Snowflake");
        // Optional: store the connection ID.
        connection_ID = conn.getId();
      }
      console.log(connection_ID);
    });
  } catch (err) {
    console.log(err);
  }
}

为清楚起见,我的 lambda 与其他 API 的连接没有问题,并且没有在 VPC 后面运行。 任何帮助将不胜感激。

node.js amazon-web-services aws-lambda snowflake-cloud-data-platform
2个回答
0
投票

如果您没有为您的 lambda 函数选择任何 VPC,它将使用该区域的默认 VPC。 您能否选择一个 VPC,它可以访问雪花公共端点并进行检查。 如果仍然有问题,请发布 Cloud watch 日志,它应该会提供线索。 如果您从 lambda 收到任何客户端连接请求,您还可以检查雪花历史页面。


0
投票

我遇到了同样的问题。此行为的发生是由于 SDK 的编写方式,它实际上是在使用承诺和异步调用。这在文档中并不直观,这使得代码看起来像是为同步行为而编写的。

我在调查这个问题时偶然发现了这篇文章 David Szmolka-https://github.com/snowflakedb/snowflake-connector-nodejs/issues/464#issuecomment-1495923219

它有很好的参考代码,说明如何将承诺链接在一起以实现同步行为。下面的 connectToSnoflake 用法来自于它。

var snowflake = require("snowflake-sdk");
var connection = snowflake.createConnection({
  account: "****",
  username: "******",
  password: "******",
});


await connectToSnoflake(connection)
        .then( (conn) => {
          let connection_ID = conn.getId();;
          console.log('connection_ID ', connection_ID)
        } );

const response = {
  statusCode: 200,
  body: JSON.stringify("Hello from Lambda!"),
};
return response;


async function connectToSnoflake(connection) {
  return new Promise( (resolve, reject) => {
      connection.connect( (err, conn) => {
        try {
          if (err) {
              console.error('Unable to connect: ' + err.message);
              reject(err)
          }
          console.log('Successfully connected to Snowflake.');
          resolve(conn)
        }catch (err) {
          console.log(err);
        }
      })
  })
}
© www.soinside.com 2019 - 2024. All rights reserved.