2016-03-08 9 views
6

मैं आरडीएस लैम्ब्डा समारोह का उपयोग कर कनेक्ट करने का प्रयास कर रहा हूँ, लेकिन मैं एक त्रुटि हो रही है:त्रुटि: कनेक्ट ETIMEDOUT आरडीएस लैम्ब्डा

var mysql = require('mysql'); 
exports.handler = function(event, context) { 
      //Connect to RDS 

var connection = mysql.createConnection({ 
host  : 'hostname', 
user  : 'username', 
password : 'password', 
database : 'database' 

}); 

connection.connect(function(err) 
{ 
    if (err) 
    { 
    throw err; 
    } 
else 
    { 
    console.log('DB connection establish'); 
    } 
    }); 

}; 

त्रुटि मैं हो रही है:

START RequestId: 9711e650-e582-11e5-af5f-97ba391a42ae Version: $LATEST 

2016-03-08T23:08:06.737Z 9711e650-e582-11e5-af5f-97ba391a42ae  
Error: connect ETIMEDOUT 
    at Connection._handleConnectTimeout (/var/task/node_modules/mysql/lib/Connection.js:412:13)  
     at Socket.g (events.js:180:16) 
    at Socket.emit (events.js:92:17) 
    at Socket._onTimeout (net.js:327:8)  
    at _makeTimerTimeout (timers.js:429:11) 
    at Timer.unrefTimeout [as ontimeout] (timers.js:493:5)  
    -------------------- 
    at Protocol._enqueue (/var/task/node_modules/mysql/lib/protocol /Protocol.js:141:48)  
    at Protocol.handshake (/var/task/node_modules/mysql/lib/protocol /Protocol.js:52:41)  
    at Connection.connect (/var/task/node_modules/mysql  /lib/Connection.js:123:18)  
    at exports.handler (/var/task/exports.js:21:12)  
END RequestId: 9711e650-e582-11e5-af5f-97ba391a42ae   
REPORT RequestId: 9711e650-e582-11e5-af5f-97ba391a42ae 
Duration: 10988.17ms  
Process exited before completing request 

उत्तर

2

मैं था एक ही मुद्दा और googling के दौरान अपनी प्रविष्टि मिली लेकिन अब मैं इसे हल किया।

  • आप नहीं करते हैं तो VPCs का उपयोग देख अगर यह एक सार्वजनिक रूप से सुलभ आरडीएस के साथ काम करता है कम से कम परीक्षण प्रयोजनों
  • अनुदान के लिए: दुर्भाग्य से मैं निश्चित रूप से सुनिश्चित करें, जो कार्रवाई वास्तव में इसे हल लेकिन जाँच नहीं कर रहा हूँ आपकी भूमिका (उदाहरण के लिए lambda_basic_execution) AmazonRDSFullAccess पहचान और एक्सेस प्रबंधन क्षेत्र में
  • आरडीएस के भीतर आपके डीबी इंस्टेंस के अवलोकन के भीतर, आप उन्हें संपादित करने के लिए चुने गए सुरक्षा समूह (विज्ञापनों) पर क्लिक कर सकते हैं: निम्न विंडो में आप इनबाउंड निर्दिष्ट कर सकते हैं और आउटबाउंड यातायात नियम। मेरे कामकाजी उदाहरण में, मैंने सभी बंदरगाहों और सभी आईपी (0.0.0.0/0) से सभी तरीकों से सभी ट्रैफिक की अनुमति दी। बेशक यह एक सुरक्षित समाधान नहीं है लेकिन आपके उदाहरण के बारे में मुझे लगता है कि आप हैं - मेरे जैसे - बस एडब्ल्यूएस में शामिल होना और पहले कामकाजी उदाहरण बनाने की कोशिश करना। यातायात को धीरे-धीरे सीमित करने के लिए आप बाद में उन नियमों को संपादित कर सकते हैं। मैं इस किया था पहले

पर मेरे अपने कंप्यूटर के माध्यम से आरडीएस तक मेरी पहुंच को परीक्षण करने के लिए मैं इसे लैम्ब्डा समारोह में VPC विकल्प या एपीआई अंतिम बिंदुओं की स्थापना के बिना काम कर दिया और

exports.handler = function(event, context) { 
var mysql  = require('mysql'); 
var connection = mysql.createConnection({ 
host  : 'hostwithoutport', 
user  : 'user', 
password : 'password', 
database : 'database' 
}); 

connection.query('SELECT * FROM Xy WHERE ID = "1"', function(err, rows) { 
if (err) { 
console.error('error connecting: ' + err.stack); 
context.fail(); 
return; 
} 

console.log('connected as id ' + connection.threadId); 
context.succeed(rows); 
}); 
}; 

आप के माध्यम से एक कनेक्शन स्थापित इसे अलग-अलग भी कर सकते हैं लेकिन हमेशा सफल होने और विफल होने (या किए गए) को लैम्ब्डा फ़ंक्शन के लिए ध्यान में रखें, अधिमानतः बयान के बाद किसी खंड के भीतर। अन्यथा आपको परिणाम निर्धारित करने से पहले लैम्ब्डा फ़ंक्शन सफल होने के कारण समस्याएं हो सकती हैं और आपको उचित परिणाम नहीं मिलते हैं। यदि आप किसी भी तरह से लैम्ब्डा फ़ंक्शन को समाप्त नहीं करते हैं, तो फ़ंक्शन स्वयं समय समाप्त हो जाएगा, जो अलग-अलग दिखाई देगा।

भी हमेशा कनेक्शन समाप्त करना याद रखें, यह सीधे एक क्वेरी का उपयोग करके निहित है - यह विधि स्वयं से जुड़ती है और समाप्त होती है। जो मैंने एक अलग थ्रेड में पढ़ा है, उसके अनुसार, यह समस्या सैद्धांतिक रूप से तब भी हो सकती है जब आप एक बार फिर से खुले कनेक्शन के कारण होते हैं।

11

मुझे इस तरह की एक ही समस्या थी और इसे ठीक कर दिया गया। यह देखकर कि यह समस्या स्टैक ओवरफ्लो पर इस समस्या के लिए शीर्ष खोज परिणाम है, मैं यहां अपना समाधान पोस्ट करने जा रहा हूं।

यह जवाब एक VPC

  1. जगह के अंदर एक आरडीएस उदाहरण आपके आरडीएस उदाहरण
  2. अपने लैम्ब्डा निष्पादन भूमिका आप VPC निष्पादन में जुड़ते करने की आवश्यकता होगी के रूप में ही VPC में लैम्ब्डा समारोह के लिए है IAM
  3. , लैम्ब्डा समारोह
  4. सुरक्षा आरडीएस उदाहरण से जुड़ी में करने के लिए एक सुरक्षा समूह आवंटित mysql/औरोरा (पोर्ट 3306) के लिए एक इनबाउंड नियम जोड़ने और अपने लैम्ब्डा के लिए इसे जोड़ने के बजाय एक आईपी पते के लिए इसे जोड़ने से कार्य सुरक्षा समूह।

संक्षेप में यह वही वीपीसी में आरडीएस के रूप में लैम्ब्डा रखता है और लैम्ब्डा फ़ंक्शन के आईपी के बावजूद लैम्ब्डा फ़ंक्शन को MYSQL तक पहुंच प्रदान करता है।

+0

इसने मेरे लिए एक टाइमआउट मुद्दा हल किया। धन्यवाद! – SexxLuthor

संबंधित मुद्दे