使用Node.js使用AWS Lambda函数访问Postgres数据库
我的“handler.js”函数连接到Postgres数据库,并使用node.js执行少量查询。我的函数在本地成功运行,但当作为AWS lambda访问时,查询不起作用使用Node.js使用AWS Lambda函数访问Postgres数据库,node.js,postgresql,aws-lambda,serverless-framework,serverless,Node.js,Postgresql,Aws Lambda,Serverless Framework,Serverless,我的“handler.js”函数连接到Postgres数据库,并使用node.js执行少量查询。我的函数在本地成功运行,但当作为AWS lambda访问时,查询不起作用 var { Pool, Client } = require('pg'); export function apiTest(event, context, callback) { var connectionString = 'postgresql://username:password@database.server.c
var { Pool, Client } = require('pg');
export function apiTest(event, context, callback) {
var connectionString = 'postgresql://username:password@database.server.com:xxxx/dbname';
var client = new Client({
connectionString: connectionString,
})
client.connect();
console.log('Connected to PostgreSQL database');
client.query('SELECT * from table', (err, res) => {
console.log("inside query");
var jsonString = JSON.stringify(res.rows);
var jsonObj = JSON.parse(jsonString);
const headers = {
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Credentials": true
};
// Return status code 500 on error
if (err) {
const response = {
statusCode: 500,
headers: headers,
body: JSON.stringify({
status: false
})
};
callback(null, response);
client.end();
return;
}
const response = {
statusCode: 200,
headers: headers,
body: JSON.stringify(jsonObj)
};
callback(null, response);
console.log("query success")
client.end()
context.succeed(context);
})
}
我还在“serverless.yml”中添加了相应的vpc安全组和子网ID
var { Pool, Client } = require('pg');
export function apiTest(event, context, callback) {
var connectionString = 'postgresql://username:password@database.server.com:xxxx/dbname';
var client = new Client({
connectionString: connectionString,
})
client.connect();
console.log('Connected to PostgreSQL database');
client.query('SELECT * from table', (err, res) => {
console.log("inside query");
var jsonString = JSON.stringify(res.rows);
var jsonObj = JSON.parse(jsonString);
const headers = {
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Credentials": true
};
// Return status code 500 on error
if (err) {
const response = {
statusCode: 500,
headers: headers,
body: JSON.stringify({
status: false
})
};
callback(null, response);
client.end();
return;
}
const response = {
statusCode: 200,
headers: headers,
body: JSON.stringify(jsonObj)
};
callback(null, response);
console.log("query success")
client.end()
context.succeed(context);
})
}
“Cloudwatch”中的错误日志只显示查询前后的console.log语句,函数终止时出现超时错误。我想不出这个问题
var { Pool, Client } = require('pg');
export function apiTest(event, context, callback) {
var connectionString = 'postgresql://username:password@database.server.com:xxxx/dbname';
var client = new Client({
connectionString: connectionString,
})
client.connect();
console.log('Connected to PostgreSQL database');
client.query('SELECT * from table', (err, res) => {
console.log("inside query");
var jsonString = JSON.stringify(res.rows);
var jsonObj = JSON.parse(jsonString);
const headers = {
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Credentials": true
};
// Return status code 500 on error
if (err) {
const response = {
statusCode: 500,
headers: headers,
body: JSON.stringify({
status: false
})
};
callback(null, response);
client.end();
return;
}
const response = {
statusCode: 200,
headers: headers,
body: JSON.stringify(jsonObj)
};
callback(null, response);
console.log("query success")
client.end()
context.succeed(context);
})
}
我已在下面附上示例“handler.js”代码:
var { Pool, Client } = require('pg');
export function apiTest(event, context, callback) {
var connectionString = 'postgresql://username:password@database.server.com:xxxx/dbname';
var client = new Client({
connectionString: connectionString,
})
client.connect();
console.log('Connected to PostgreSQL database');
client.query('SELECT * from table', (err, res) => {
console.log("inside query");
var jsonString = JSON.stringify(res.rows);
var jsonObj = JSON.parse(jsonString);
const headers = {
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Credentials": true
};
// Return status code 500 on error
if (err) {
const response = {
statusCode: 500,
headers: headers,
body: JSON.stringify({
status: false
})
};
callback(null, response);
client.end();
return;
}
const response = {
statusCode: 200,
headers: headers,
body: JSON.stringify(jsonObj)
};
callback(null, response);
console.log("query success")
client.end()
context.succeed(context);
})
}
我认为如果你能提供更多关于实际错误的信息,那将是非常有用的。在哪里暂停?它是否打印出“连接到PostgreSQL数据库”?是的。它打印“连接到PostgreSQL数据库”。我尝试在client.query块之后添加console.log。即使已打印,但client.query中的语句也未打印。如果超时,则查询所用时间超过默认的3秒,或者连接到挂起应用程序的数据库时出错。请先尝试延长Lambda允许运行的时间,以查看是否有其他错误。@deepakasinathan发布代码时,请正确设置格式,以便我们能够轻松阅读。我们越容易理解你的问题,别人就越容易回答你的问题。@AthensHolloway我确实在VPC中托管了数据库,但似乎lamda没有获得AWS中数据库的权限。在设置了“授予访问权限”之后,它工作了。谢谢你的评论