使用 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 - 超时错误