У меня есть простая лямбда-функция, которая запрашивает базу данных Redshift. Сам запрос занимает <1 с, если я делаю это из прямого соединения с sqlWorkbench. Один и тот же запрос всегда занимает> 10 секунд при выполнении запроса через функцию Lambda.
База данных Redshift внутри VPC с доступом к Интернету.
Лямбда-функция живет вне VPC.
Это упрощенный лямбда-код:
const db = require('./functions/dbFunctions');
const database = require('./config/database');
var handler = function (event, context, callback) {
callEndpoint(event, callback, database);
};
var callEndpoint = function (event, callback, database) {
var method = event.context['resource-path'].substring(1).toUpperCase();
switch (method) {
case "WEB/GETCLIENTSALT":
db.getClientSalt(event, callback, database);
break;
}
};
module.exports = {
handler: handler,
callEndpoint: callEndpoint
};
dbFunctions:
var getClientSalt = function (event, callback, db) {
var body = event['body-json'];
var userDet = {
userEmail: body.userEmail
};
var respSalt = {
result: "",
clientSalt: ""
};
var sqlSalt = `SELECT salt from user_table WHERE user_email = $1 limit 1`;
db.mobileAdhoc().one(sqlSalt, [userDet.userEmail])
.then(result => {
// Handle Success
})
.catch(() => {
// Handle Error
});
};
module.exports = {
getClientSalt: getClientSalt
};
Я читал о лямбда-холодных запусках, но вышеприведенная функция занимает минимум 10 секунд, даже если вызывается несколько раз подряд. Я даже добавил код в index.js, чтобы проверить, что database.js инициализируется только один раз и повторно используется при последовательных вызовах (проверка того, что лямбда остается горячей).
Есть ли какая-то простая конфигурация, которую мне не хватает? Я ожидаю многого от Lambda-> Redshift? Это клиентское приложение, и эти времена ожидания неприемлемы.