Экспорт SQL попыток входа на сервер и выгрузка отчета в AWS S3 - PullRequest
0 голосов
/ 06 августа 2020

У меня настроен сервер RDS SQL, для которого мне нужно получить все успешные / неудачные попытки входа в систему и создать на его основе отчет (файл csv) и загрузить его в корзину S3.

Я используя следующие запросы для получения как успешных, так и неудачных входов в систему:

# Fetch failed login attempts
SELECT * 
FROM msdb.dbo.rds_fn_get_audit_file ('D:\\rdsdbdata\\SQLAudit\\*.sqlaudit', default, default ) 
WHERE action_id = 'LGIF';
 
# Fetch successful login attempts
SELECT * 
FROM msdb.dbo.rds_fn_get_audit_file ('D:\\rdsdbdata\\SQLAudit\\*.sqlaudit', default, default) 
WHERE action_id ='LGIS';

Мне нужно сделать это с помощью лямбда-функции на основе node js в AWS. Как мне это сделать? Я совершенно не знаком с node js и не могу найти ни одного примера.

Ответы [ 2 ]

1 голос
/ 20 августа 2020

Вам нужно будет написать лямбда, которая может взаимодействовать с SQL, REF: AWS Лямбда NodeJS вызов SQL Сервер не возвращает данных и ошибок

var sql = require("mssql");

// config for your database
var config = {
    user: 'xxuser',
    password: 'xxxx',
    server: 'mydns', 
    database: 'tavier' 
};


module.exports.rdsquery = async event => {

console.log('called rdsquery')
  try{
    // connect to your database
    await sql.connect(config, function (err) {

      console.log('connected')
        if (err) 
          console.log('rdsquery: '+err)

        // create Request object
        var request = new sql.Request(); 
        // query to the database and get the records
        request.query('SELECT * 
                      FROM msdb.dbo.rds_fn_get_audit_file 
                      ('D:\\rdsdbdata\\SQLAudit\\*.sqlaudit', default, default ) 
                      WHERE action_id = 'LGIF'', function (err, recordset) {

            if (err)
            console.log('rdsquery-sql: '+err)   
            
            // send records as a response
            console.log('logging recordset')
            console.log(recordset);
            return {statusCode: 200, headers: {'Access-Control-Allow-Origin': '*'},body: JSON.stringify(recordset)};
           
        });
    });
  }
  catch(e)
  {
    console.log('rdsquery-catch: '+e)   
    return {statusCode: 200, headers: {'Access-Control-Allow-Origin': '*'},body: JSON.stringify('ERR: '+e)};
  }

  //return {statusCode: 200, headers: {'Access-Control-Allow-Origin': '*'},body: JSON.stringify('test here')};
};

Вместо того, чтобы возвращать набор записей, сохраните его в S3, REF: { ссылка }

var AWS = require('aws-sdk');
function putObjectToS3(bucket, key, data){
    var s3 = new AWS.S3();
        var params = {
            Bucket : bucket,
            Key : key,
            Body : data
        }
        s3.putObject(params, function(err, data) {
          if (err) console.log(err, err.stack); // an error occurred
          else     console.log(data);           // successful response
        });
}
0 голосов
/ 17 августа 2020

Я предполагаю, что ваш файл создается на вашем собственном сервере, а не в облаке. IMHO не вижу причин использовать лямбда, поскольку цель состоит в том, чтобы просто загрузить файл в местоположение, и вот как это можно сделать без лямбда.

  • Лямбда и ваш SQL сервер, возможно не будет в одном облаке
  • Дополнительные усилия для настройки лямбда-выражения и данных публикации, которые перемещаются только в s3

Что вам нужно:

  1. сценарий для генерации отчета

  2. сценарий оболочки upload-report-s3.sh

    • Используйте aws cli для загрузки сгенерированного файла aws s3 cp ./path-to-report-file.csv s3://your-bucket/extra-path/target-location.csv
  3. задание cron для интеграции пунктов 1) и 2)

Примечание: корзина S3 уже создана

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...