Использование AWS Lammbda для запроса базы данных и отправки результатов в Geckoboard
Я пытаюсь настроить функцию AWS Lambda, которая будет запрашивать базу данных MySQL и загружать результаты в Geckoboard для анализа. Тем не менее, это всегда будет время ожидания. Вот мой код:
'use strict';
var API_KEY = [API KEY];
var gb = require('geckoboard')(API_KEY);
var AWS = require('aws-sdk');
var mysql = require('mysql');
var connection = mysql.createConnection({
[DATABASE DETAILS]
});
var mysqlQuery = '
SELECT DATE(created_at) as date, COUNT(DATE(created_at)) as number_of_entries
FROM table
WHERE updated_at IS NOT NULL
GROUP BY date
';
var schema = {
id: 'geckoboard_target',
fields: {
date: {
type: 'datetime',
name: 'date'
},
number_of_entries: {
type: 'number',
name: 'number_of_entries'
}
}
};
function uploadToGeckoboard(schema, data, context) {
gb.datasets.findOrCreate( schema,
function (err, dataset) {
if (err) {
console.error('Error connecting to Geckoboard:',err);
context.fail('Failed');
}
dataset.put(
data,
function (err) {
if (err) {
console.error('Error uploading to Geckoboard',err);
context.fail('Failed');
}
console.log('Dataset created and data added');
context.succeed('Success');
}
);
}
);
}
exports.handler = (event, context) => {
connection.connect(function(err) {
if (!err) {
connection.query(mysqlQuery, function(err, data) {
if (!err) {
console.log("Results:", JSON.stringify(data));
uploadToGeckoboard(schema, data, context);
connection.end();
} else {
console.log("Query error:", err);
context.fail();
}
});
} else {
console.log("Error connecting database:", err.message);
context.fail();
}
});
};
Это успешно до момента, когда данные возвращаются и uploadToGeckoboard
функция называется. После этого это просто время ожидания. Я попробовал тот же код с удаленным лямбда-обработчиком и контекстом, и он отлично работает с моей локальной машины.
Любая помощь будет принята с благодарностью!
1 ответ
Как оказалось, код просто отлично. Проблема заключалась в том, что в процессе разработки мы включили VPC в лямбда-конфигурации - в надежде включить то, что мы считали необходимыми способностями чтения RDS.
Отключение этого параметра решило постоянные тайм-ауты и показало, что для выполнения запросов RDS не требуется VPC. К сожалению!