使用 lambda 函数 nodejs 从 Amazon Redshift 查询选择

Posted

技术标签:

【中文标题】使用 lambda 函数 nodejs 从 Amazon Redshift 查询选择【英文标题】:Query select from Amazon Redshift using a lambda function nodejs 【发布时间】:2021-08-19 21:02:01 【问题描述】:

我需要从我们在 Amazon Redshift 上的 dw 中的表中进行查询。我一直在阅读,但找不到从那里的表中查询的方法,我通常这样做是为了使用 sequelize 进行连接。

const fs = require('fs');
const path = require('path');
const Sequelize = require('sequelize');

const basename = path.basename(__filename);
const db = ;

const sequelize = new Sequelize(
  process.env.DB_REDSHIFT,
  process.env.DB_USER,
  process.env.DB_PASS,
  
    host: process.env.DB_HOST,
    dialect: 'postgres',
    ...process.env.NODE_ENV !== 'dev' && 
      logging: false,
    ,
    define: 
      underscored: true,
    ,
    dialectOptions: 
      multipleStatements: true,
      dateStrings: true,
      typeCast: (field, next) => 
        if (field.type === 'DATETIME' || field.type === 'TIMESTAMP') 
          return field.string();
        
        return next();
      ,
    ,
    pool: 
      max: 1,
      min: 0,
      idle: 10000,
    ,
  ,
);

fs.readdirSync(__dirname).filter((file) => 
  return (file.indexOf('.') !== 0) && (file !== basename) && (file.slice(-3) === '.js');
).forEach((file) => 
  const model = sequelize.import(path.join(__dirname, file));
  db[model.name] = model;
);

Object.keys(db).forEach((modelName) => 
  if (db[modelName].associate) 
    db[modelName].associate(db);
  
);

db.sequelize = sequelize;
db.Sequelize = Sequelize;

module.exports = db;


但我得到了SequelizeHostNotFoundError: getaddrinfo ENOTFOUND,我尝试过使用端点、jdbc 和 odbc,我对此真的很陌生,所以任何事情都会有所帮助。

【问题讨论】:

【参考方案1】:

Amazon Redshift 公开了一个允许您执行 CRUD 操作的数据客户端。见:

Redshift Client - AWS SDK for javascript v3

您可以在 Lambda 函数中使用此客户端对 Redshift 表执行 CRUD 操作。无需使用JDBC、ODBC等。

【讨论】:

以上是关于使用 lambda 函数 nodejs 从 Amazon Redshift 查询选择的主要内容,如果未能解决你的问题,请参考以下文章

从 NodeJS AWS Lambda 函数查询 MySQL 数据库

AWS Lambda 无法调用没有 VPC 的另一个 AWS Lambda - NodeJs

使用 AWS Lambda (NodeJS) 创建 AWS AppSync

适用于 postgreSQL 的 AWS Lambda 函数 NodeJs - 超时错误

AWS Lambda - 下载文件,并在同一个函数中使用它 - nodejs

AWS Lambda nodejs 函数中的事件对象为空