2016-04-08 25 views
6

मैं अपने एडब्ल्यूएस लैम्ब्डा से http अनुरोध करने की कोशिश कर रहा हूं लेकिन यह समय समाप्त हो गया है।एडब्ल्यूएस लैम्ब्डा में पाइथन अनुरोध

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

import requests 

def lambda_handler(event, context): 
    print('Im making the request') 
    request.get('http://www.google.com') 
    print('I recieved the response') 

लेकिन जब मैं यह परीक्षण, मैं एक समय समाप्ति मिलता है।

उत्पादन

Im making the request 
END RequestId: id 
REPORT RequestId: id Duration: 15003.25 ms Billed Duration: 15000 ms Memory Size: 128 MB Max Memory Used: 18 MB 
2016-04-08T20:33:49.951Z id Task timed out after 15.00 seconds 

तो मैं जानता हूँ कि इस मुद्दे को यह अनुरोध पैकेज नहीं मिल नहीं है, और यह मेरी अजगर कोड चल रहा है। मैं सिर्फ यह समझता हूं कि उस अनुरोध पर क्यों समय लगता है।

+0

के बजाय requests.get को प्रतिबिंबित करना चाहिए? –

+0

हाँ, वीपीसी एक्सेस सक्षम। – user2734679

उत्तर

3

मुझे timeout problem का सामना करना पड़ता है, कारण नीचे है।

AWS document:

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

शायद आपके वीपीसी को सेट करते समय कुछ त्रुटि हो सकती है। मुझे सलाह है कि आप एनएटी बनाने के लिए इस blog का अनुसरण कर सकते हैं।

4

वीपीसी एक्सेस के साथ एक लैम्ब्डा फ़ंक्शन में इंटरनेट एक्सेस नहीं होगा जब तक आप अपने वीपीसी में एनएटी गेटवे नहीं जोड़ते। आपको Lambda VPC support announcement के "जानना चीजें" अनुभाग पढ़ना चाहिए।

यदि आपने अपने लैम्ब्डा फ़ंक्शन के लिए वीपीसी समर्थन सक्षम किया है, लेकिन आपके वीपीसी में एनएटी गेटवे नहीं है, तो आपका अनुरोध इंटरनेट तक पहुंचने का प्रयास कर रहा है।

+2

वीपीसी में एक एनएटी गेटवे जोड़ा गया और उस एनएटी के माध्यम से 0.0.0.0 के लिए एक मार्ग जोड़ा गया लेकिन अभी भी कुछ याद आ रहा है। टाइमआउट अभी भी होते हैं। – user2734679

+0

मुझे आश्चर्य है कि यदि सार्वजनिक सबनेट निर्दिष्ट किया गया है तो एनएटी अभी भी आवश्यक है? –

+0

हां यह अभी भी आवश्यक है क्योंकि लैम्ब्डा फ़ंक्शन को सार्वजनिक आईपी पता नहीं मिलता है। –

1

आप निम्न कार्य करके अनुरोध के लिए समय समाप्ति की अवधि को बढ़ा सकते हैं:

response = requests.get(url, timeout=60) 

इसके अलावा, आप अपने लैम्ब्डा समारोह के लिए समय समाप्ति की अवधि बढ़ाने के लिए की आवश्यकता होगी। ऐसा करने के लिए:

  • एडब्ल्यूएस में अपने लैम्ब्डा समारोह खोलें
  • करें 'विन्यास', फिर 'उन्नत सेटिंग्स'
  • (5 मिनट तक) अपने समय के लिए बाहर की अवधि बढ़ाने के
  • करें 'सहेजें'

इसके अलावा, मुझे विश्वास है कि 'request.get' 'request.get' होना चाहिए।

0

लैम्ब्डा में टाइमआउट के लिए डिफ़ॉल्ट मान 3 सेकंड = 3000 माइक्रोसॉन्ड है। उन्नत सेटिंग्स पर जाएं और 5 मिनट जोड़ें। यह एकमात्र मुद्दा हो सकता है, यदि टाइमआउट बिल्कुल 3 सेकंड पर होता है। अन्य सभी त्रुटियां इससे कुछ कम या कम लेती हैं।

+0

स्टैक ओवरव्लो में आपका स्वागत है और आपकी मदद के लिए धन्यवाद। आप कुछ स्पष्टीकरण जोड़कर अपना जवाब और भी बेहतर बनाना चाहते हैं। –

0

डिफ़ॉल्ट रूप से, एडब्ल्यूएस लैम्ब्डा में 3 सेकंड का टाइमआउट होता है, इसलिए यदि आपका कोड 3 सेकंड से अधिक समय तक चल रहा है, तो यह स्वचालित रूप से आपको यह त्रुटि दे देगा।

आप अपने लैम्ब्डा फ़ंक्शन के लिए 5 मिनट तक (300 सेकंड - एडब्लूएस भविष्य में इस सीमा को बढ़ा सकते हैं) के लिए टाइमआउट बढ़ा सकते हैं और इससे समस्या का ख्याल रखना चाहिए।

इसके अलावा आप अपने लैम्ब्डा समारोह के लिए VPC पहुँच सक्षम था अपने कोड request.get

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