Запрос AWS RDSDataService не выполняется - PullRequest
1 голос
/ 01 мая 2019

Я пытаюсь использовать RDSDataService для запроса базы данных Aurora Serverless.Когда я пытаюсь сделать запрос, моя лямбда просто отключается (я установил ее на 5 минут, чтобы убедиться, что это не проблема).У меня есть 1 запись в моей базе данных, и когда я пытаюсь запросить ее, я не получаю никаких результатов, и не вызываются ни ошибки, ни потоки данных.Я проверил, что executeSql вызывается путем удаления dbClusterOrInstanceArn из моих параметров, и он выдает исключение из-за его отсутствия.

Я также запустил SHOW FULL PROCESSLIST в редакторе запросов, чтобы убедиться, что запросы все еще выполняются, иони не.Я дал лямбда-правила как AmazonRDSFullAccess, так и AmazonRDSDataFullAccess, но безуспешно.Как видно из приведенного ниже кода, я уже попробовал то, что было рекомендовано в выпуске № 2376.

Не то, чтобы это имело значение, но эта лямбда запускается триггером Kinesis.

const AWS = require('aws-sdk');

exports.handler = (event, context, callback) => {
  const RDS = new AWS.RDSDataService({apiVersion: '2018-08-01', region: 'us-east-1'})
  for (record of event.Records) {
    const payload = JSON.parse(new Buffer(record.kinesis.data, 'base64').toString('utf-8'));
    const data = compileItem(payload);
    const params = {
      awsSecretStoreArn: 'arn:aws:secretsmanager:us-east-1:149070771508:secret:xxxxxxxxx,
      dbClusterOrInstanceArn: 'arn:aws:rds:us-east-1:149070771508:cluster:xxxxxxxxx',
      sqlStatements: `select * from MY_DATABASE.MY_TABLE`
      // database: 'MY_DATABASE'
    }
    console.log('calling executeSql');
    RDS.executeSql(params, (error, data) => {
      if (error) {
        console.log('error', error)
        callback(error, null);
      } else {
        console.log('data', data);
        callback(null, { success: true })
      }
    });
  }
}

РЕДАКТИРОВАТЬ: мы выполнили команду через aws cli, и она возвращает результаты.

РЕДАКТИРОВАТЬ 2: я могу подключиться к нему с помощью пакета mysql2 и подключиться к нему через URIтак что это вызывающе проблема либо с aws-sdk, либо с тем, как я его использую.

Ответы [ 2 ]

1 голос
/ 01 мая 2019

Исключение Nodejs не ожидает результата, поэтому процесс завершается до завершения запроса.

использовать библиотеку mysql https://www.npmjs.com/package/serverless-mysql
ИЛИ
использовать context.callbackWaitsForEmptyEventLoop = false

0 голосов
/ 18 мая 2019

Проблема состояла в том, что RDS должен был быть упакован в VPC, в котором лямбда не была в

...