2015-02-01 9 views
7

मैं एक एडब्ल्यूएस लैम्ब्डा समारोह है कि बनाया के बाद बाहर: JDBC यूआरएल conecting एडब्ल्यूएस लैम्ब्डा लाल विचलन के लिए - टाइम्स 60 सेकंड

  • के माध्यम से Redshift पर

    • लॉग

    स्थानीय स्तर पर एक प्रश्न चलाता है, नोड का उपयोग करते हुए , मैं सफलतापूर्वक JDBC के माध्यम से Redshift उदाहरण के लिए कनेक्ट, और एक प्रश्न पर अमल कर सकते हैं।

    var conString = "postgresql://USER_NAME:[email protected]_URL”; 
    var client = new pg.Client(conString); 
    client.connect(function(err) { 
        if(err) {
    
         console.log('could not connect to redshift', err);
   
        } 
   
    // omitted due to above error 
    

    हालांकि, जब मैं एडब्ल्यूएस लैम्ब्डा (जहां यह एक async#waterfall ब्लॉक में लिपटे है) पर समारोह को अंजाम, एडब्ल्यूएस Cloudwatch लॉग मुझसे कहता है कि एडब्ल्यूएस लैम्ब्डा समारोह 60 सेकंड के बाद का समय समाप्त हो।

    क्यों मेरे समारोह कनेक्ट करने में सक्षम नहीं है पर कोई भी विचार?

  • उत्तर

    3

    मुझे लगता है कि यह या तो आप अपने Redshift सुरक्षा समूह को सभी स्रोतों, या किसी भी व्यक्ति को सार्वजनिक रूप से खोलते हैं। क्योंकि एक लैम्ब्डा समारोह एक निश्चित पते या यहाँ तक कि आईपी पतों की एक निश्चित सीमा है, जो पूरी तरह से उपयोगकर्ताओं के लिए पारदर्शी है (उर्फ सर्वर-कम) पर नहीं चल रहा है।

    मैं सिर्फ अमेज़न कल VPC समर्थन करने के लिए नई लैम्ब्डा सुविधा की घोषणा देखा। मैं हम एक VPC में एक Redshift क्लस्टर चला सकते हैं, इस समस्या का समाधान कर सकता है लगता है।

    1

    आप serverless-ढांचे v1.5.0 का उपयोग कर रहे हैं, तो आप जोड़ना चाहिए:

    iamRoleStatements: - Effect: Allow Action: - ec2:CreateNetworkInterface Resource: '*' - Effect: Allow Action: - ec2:DeleteNetworkInterface - ec2:DescribeNetworkInterfaces Resource: 'arn:aws:ec2:${self:provider.region}:*:network-interface/*'

    भी नीचे की तरह सीमा में नियम के लिए सभी securityGroupIds जोड़ना चाहिए,: screenshot 2017-01-09 23 02 33

    और जानकारी: https://serverless.com/framework/docs/providers/aws/guide/functions/#vpc-configuration

    1

    एक कदम पीछे जाकर, मैं लैम्ब्डा और रेडशिफ्ट को जोड़ने के लिए किनेसिस [1] फायरहोज का उपयोग करने की सलाह दूंगा। यह बेहतर दृष्टिकोण के रूप में डॉक्स में सुझाव दिया है [2]।

    किनेसिस स्वचालित रूप से प्रतिलिपि कमांड का उपयोग करके डेटा को धक्का देने के लिए डेटा को धक्का देने के लिए इंटरमीडिएट स्टोरेज के रूप में एस 3 का उपयोग कर सकते हैं।

    "एक प्रति आदेश एक मेज लोड करने के लिए सबसे कारगर तरीका है। आप भी डेटा अपनी तालिकाओं में सम्मिलित करें आदेशों का उपयोग करते, जोड़ सकते हैं, हालांकि यह बहुत कम कॉपी का उपयोग करने से कुशल है"

    फुटनोट: [1] http://docs.aws.amazon.com/firehose/latest/dev/what-is-this-service.html

    [2] http://docs.aws.amazon.com/redshift/latest/dg/t_Loading_data.html

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