मैं एडब्ल्यूएस लैम्डा पर तैनात एक्सप्रेस फ्रेमवर्क के साथ mysql2 पैकेज का उपयोग कर रहा हूं। मेरे पास एडब्ल्यूएस लैम्ब्डा के लिए प्रावधानित समरूपता 3 पर सेट है।

मैं सीधे MySQL से कनेक्ट नहीं हो रहा हूं। मेरे पास बीच में आरडीएस प्रॉक्सी है।

मुझे निम्न त्रुटि मिल रही है, बेतरतीब ढंग से।

{
    "errorType": "Error",
    "errorMessage": "connect ETIMEDOUT",
    "code": "ETIMEDOUT",
    "errorno": "ETIMEDOUT",
    "syscall": "connect",
    "fatal": true,
    "stack": [
        "Error: connect ETIMEDOUT",
        "    at Connection._handleTimeoutError (/var/task/node_modules/mysql2/lib/connection.js:178:17)",
        "    at listOnTimeout (internal/timers.js:554:17)",
        "    at processTimers (internal/timers.js:497:7)"
    ]
}

मेरा कोड इस तरह दिखता है:

var AWS = require("aws-sdk");
const mysql = require('mysql2');

class DBConnection {

    constructor() {

        var signer = new AWS.RDS.Signer({
            region: 'us-east-1',
            hostname: process.env.DB_HOST,
            port: 3306,
            username: process.env.DB_USER
        });
        
        let connectionConfig = {
            host: process.env.DB_HOST,
            user: process.env.DB_USER,
            database: process.env.DB_NAME,
            ssl: 'Amazon RDS',
            authPlugins: { mysql_clear_password: () => () => signer.getAuthToken() }
        };
        
        this.db = mysql.createConnection(connectionConfig);

    }

    query = async (sql, values) => {

        return new Promise((resolve, reject) => {

            this.db.execute(sql, values, (error, result) => {

                if (error) {
                    reject(error);
                    return;
                }

                resolve(result);

            });

        });

    }
}

module.exports = new DBConnection().query;
const results = await query('SELECT COUNT(*) AS total_listens FROM analytics WHERE event_name="PLAYED"');

कोई सुराग जहां मुद्दा हो सकता है?

0
Vikas Roy 21 पद 2020, 11:44
मुझे बहुत यकीन नहीं है, लेकिन ऐसा लगता है कि यह लैम्ब्डा फ़ंक्शन है, यह प्रत्येक कॉल के लिए एक उदाहरण बनाता है, और आप अपना कनेक्शन जारी नहीं कर रहे हैं (कनेक्शन को नष्ट करना), जब कम कनेक्शन होता है (कम लैम्ब्डा फ़ंक्शन इंस्टेंस) यह समवर्ती होने पर काम करता है एकाधिक लैम्ब्डा सक्रिय हैं, इसे कनेक्शन का समय समाप्त हो जाता है। कनेक्शन जारी करने का प्रयास करें क्योंकि काम हो गया है, मुझे यकीन नहीं है कि यह कैसे बड़े पैमाने पर यातायात के साथ जा रहा है।
 – 
r7r
21 पद 2020, 11:54

1 उत्तर

सबसे बढ़िया उत्तर

AWS Lambda function के साथ mysql.createconnection के बजाय mysql.createPool का उपयोग करना बेहतर है। मुझे नहीं पता कि इसका विशिष्ट कारण क्या है, लेकिन mysql.createPool के बजाय mysql.createconnection का उपयोग करने से मेरे लिए भी समस्याएँ उत्पन्न हुई हैं। क्वेरी के सफल होने पर कनेक्शन release के लिए भी आवश्यक है।

1
Muhammad Arsalan Hassan 21 पद 2020, 12:10