AWS Lambda NodeJS Подключение к базе данных RDS Postgres - PullRequest
0 голосов
/ 31 декабря 2018

Я пытаюсь проверить соединение между моей Lambda и экземпляром RDS.У меня они оба в одной частной подсети со всеми открытыми портами в группе безопасности.Когда я запускаю Lambda, я вижу соединение, открытое на экземпляре RDS.Тем не менее, лямбда истекает через 4 минуты 40 секунд.Переменные среды PG задаются в конфигурации Lambda.

const { Client } = require('pg');
const client = new Client();

var hello = [
  { name: 'test', description: 'testerface' }
];

exports.handler = async (event, context, callback) => {
    // Postgres Connect
    client.connect();
    const res = client.query('SELECT $1::text as message', ['Hello world!']);
    console.log(res);
    var response = {
        "statusCode": 200,
        "headers": {
            "Content-Type" : "application/json"
        },
        "body": JSON.stringify(hello),
        "isBase64Encoded": false
    };
    callback(null, response);
};

Как получить ответ от соединения в журналах Lambda - или даже лучше в теле ответа?

1 Ответ

0 голосов
/ 31 декабря 2018

Вам нужно лучше обрабатывать клиентское соединение.Это означает перехват любых исключений, которые клиент может пройти, и правильное освобождение соединения.Этот код вернет вывод запроса в тело ответа:

const pg = require('pg')
const pool = new pg.Pool()

async function query (q) {
  const client = await pool.connect()
  let res
  try {
    await client.query('BEGIN')
    try {
      res = await client.query(q)
      await client.query('COMMIT')
    } catch (err) {
      await client.query('ROLLBACK')
      throw err
    }
  } finally {
    client.release()
  }
  return res
}

exports.handler = async (event, context, callback) => {
    try {
      const { rows } = await query("select * from pg_tables")
      console.log(JSON.stringify(rows[0]))
      var response = {
          "statusCode": 200,
          "headers": {
              "Content-Type" : "application/json"
          },
          "body": JSON.stringify(rows),
          "isBase64Encoded": false
      };
      callback(null, response);
    } catch (err) {
      console.log('Database ' + err)
      callback(null, 'Database ' + err);
    }
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...