Как завершить и освободить зависающую лямбда-функцию при использовании пула соединений mysql - PullRequest
0 голосов
/ 28 мая 2020

У меня есть лямбда-функция, которая вставляет входящие данные в базу данных 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. Однако после локального тестирования лямбда-функция по-прежнему зависает и никогда не завершается.

...