У меня есть лямбда-функция, которая вставляет входящие данные в базу данных mysql.
Однако я заметил локально , что функция lamba зависает после вывода результата вставки и никогда не заканчивается . Я также заметил, что после развертывания лямбда-функции в производственной среде время ожидания функции истекает. Я считаю, что эти две проблемы связаны.
Время ожидания задачи истекло через 6,01 секунды "
DB.ts
import Config from "../config";
import mysql from "mysql2/promise";
const DB = (): mysql.Pool => {
const config = Config();
const connectionPool = mysql.createPool({
host: config.db.host,
user: config.db.username,
password: config.db.password,
database: config.db.database,
waitForConnections: true,
connectionLimit: 10,
queueLimit: 0
});
return connectionPool;
}
export default DB;
WebsiteLink.ts
export const InsertWebsiteLink = async (payload: IWebsiteLink) => {
const db = DB();
const connection = await db.getConnection();
try {
const [results] = await connection.query('INSERT INTO website_link SET ?', payload);
return { success: true, data: results };
} catch (err) {
const error = {
code: err.code,
errno: err.errno,
sqlState: err.sqlState,
sqlMessage: err.sqlMessage,
};
return { success: false, error: MAP_SQL_ERROR(error) };
} finally {
connection.release();
}
}
handler.ts
import 'source-map-support/register';
import {InsertWebsiteLink} from "./src/WebsiteLink";
export const main = async (event, _context) => {
let data = event;
if(event.httpMethod === "POST") {
data = JSON.parse(event.body);
}
try {
const result = await InsertWebsiteLink(data);
if(result.success == false) {
const { error } = result;
return { statusCode: error.statusCode, body: JSON.stringify({ errors: [error.error]}) };
}
return { statusCode: 201 }
} catch (err) {
return { statusCode: 500, body: JSON.stringify({ errors: [err] }) }
}
}
Как видите, я пробовал чтобы смягчить эту проблему, освободив соединение mysql с release.connection
. Однако после локального тестирования лямбда-функция по-прежнему зависает и никогда не завершается.