Я пытаюсь проверить, могу ли я подключиться к своей базе данных RDS, но ничего не регистрируется в обещании/обратном вызове соединения. Мне удалось подключиться с моей локальной машины, но не на AWS. У меня нет идей о том, как еще я могу отладить это, поскольку я сделал все, что мог найти в Интернете.
Я проверил, что экземпляр RDS и Lambda функционируют в одном и том же VPC, группе безопасности VPC и подсетях, как это было предложено этот вопрос. Для этой группы безопасности VPC я добавил 0.0.0.0/0
и ::/0
, а правила входящего трафика можно увидеть ниже:
Экземпляр RDS настроен как общедоступный, и установка недоступного для всех значения не имеет значения. Ниже приведен вывод, который я получаю при запуске лямбда-функции.
START RequestId: 9567a1be-d8d1-4b61-b9c4-4dd06ff36a4b Version: $LATEST
2021-07-21T23:52:47.115Z 9567a1be-d8d1-4b61-b9c4-4dd06ff36a4b INFO Lambda invoked
END RequestId: 9567a1be-d8d1-4b61-b9c4-4dd06ff36a4b
REPORT RequestId: 9567a1be-d8d1-4b61-b9c4-4dd06ff36a4b Duration: 52.71 ms Billed Duration: 53 ms Memory Size: 128 MB Max Memory Used: 71 MB Init Duration: 193.40 ms
Я использую код pg, полученный из документации node-postgres. Я изучил руководство Amazon по подключению лямбда-функция для rds, присвоив ей роль с AWSLambdaVPCAccessExecutionRole
(я не использовал CLI, как они, я использовал графический интерфейс на веб-сайте). Я также читал, что консольный объект внутри обещаний не всегда возвращается, поэтому я завернул каждое обещание в блок try catch, и все равно ничего не возвращается.
const {Client, Pool} = require('pg')
const pool = new Pool({
user: 'myusername',
password: 'mypassword',
host: 'blahblah.somestuff.us-east-2.rds.amazonaws.com',
port: 5432,
database: 'postgres'
})
pool.on('error', (err, client) => {
console.error('Unexpected error on idle client', err)
process.exit(-1)
})
exports.handler = function(event, context) {
console.log('Lambda invoked') // this logs just fine
try {
var client = pool.connect((err, client, done) => {
if (err) throw err
console.log('connected')
try {
client.query('SELECT * FROM users WHERE id = $1', [1], (err, res) => {
done()
console.log('query has run')
if (err) {
throw err;
// console.log(err.stack)
} else {
console.log(res.rows[0])
}
})
} catch(err) {
throw err
}
})
}
catch(err) {
console.warn(err)
}
};
Узел-postgres 6.4.2, PostgreSQL 12.6R1