7

से प्रकाशित करते समय टाइमआउट मैं लैम्बडा फ़ंक्शन कॉल से एसएनएस को कुछ डेटा प्रकाशित करने की कोशिश कर रहा हूं, लेकिन ऐसा लगता है कि यह काम नहीं कर रहा है। मेरा फ़ंक्शन कोड है -एडब्ल्यूएस लैम्ब्डा से एसएनएस

public class Handler implements RequestHandler<DynamodbEvent, Void> { 

    private static final String SNS_TOPIC_ARN = "arn:aws:sns:us-west-2:account_number:function_name"; 

    @Override 
    public Void handleRequest(DynamodbEvent dynamodbEvent, Context context) { 

     LambdaLogger logger = context.getLogger(); 

     AmazonSNSClient snsClient = new AmazonSNSClient(new DefaultAWSCredentialsProviderChain()); 
     snsClient.setRegion(Region.getRegion(Regions.US_WEST_2)); 

     for (DynamodbStreamRecord record : dynamodbEvent.getRecords()) { 
      Map<String, AttributeValue> newImage = record.getDynamodb().getNewImage(); 

      if (newImage == null) { 
       continue; 
      } 

      String sensorId = newImage.get("sensorID").getS(); 
      long timestamp = Long.parseLong(newImage.get("timestamp").getS()); 
      double temperature = Double.parseDouble(newImage.get("payload").getM().get("temp").getN()); 

      String data = sensorId + " " + timestamp + " " + temperature; 

      logger.log(data); 

      PublishRequest publishRequest = new PublishRequest(SNS_TOPIC_ARN, data); 

      PublishResult publishResult = snsClient.publish(publishRequest); 

      logger.log("Publish Successful " + publishResult.getMessageId()); 
     } 

     snsClient.shutdown(); 

     return null; 
    } 
} 

इस कॉल के परिणामस्वरूप टाइमआउट (10 सेकंड) और लैम्ब्डा आमंत्रण विफल हो जाता है। अगर मैं एसएनएस प्रकाशन भाग पर टिप्पणी करता हूं, यानी, अगर मैं सिर्फ डायनेमो डीबी से प्राप्त डेटा लॉग करता हूं, तो यह ठीक काम करता है। जैसे ही एसएनएस प्रकाशन कोड जोड़ा जाता है, यह समय समाप्त हो जाता है।

टाइमआउट CloudWatch में लॉग इन संदेश है -

START RequestId: 8db74187-459b-42c5-8a06-b3a74873b236 Version: $LATEST END RequestId: 8db74187-459b-42c5-8a06-b3a74873b236 REPORT RequestId: 8db74187-459b-42c5-8a06-b3a74873b236 Duration: 10001.66 ms Billed Duration: 10000 ms Memory Size: 128 MB Max Memory Used: 37 MB Task timed out after 10.00 seconds

मैं ही स्थान में सभी उचित अनुमतियां हैं, और मैं अपने पीसी पर चल रही निम्नलिखित कोड का उपयोग कर एसएनएस को प्रकाशित करने में सक्षम हूँ -

PublishRequest publishRequest = new PublishRequest(SNS_TOPIC_ARN, data); 
PublishResult publishResult = snsClient.publish(publishRequest); 
System.out.println("Publish Successful " + publishResult.getMessageId()); 

मैंने AmazonSNSClient के बजाय AmazonSNSAsyncClient का उपयोग करने का भी प्रयास किया है, यह वही परिणाम देता है।

मुझे यहां क्या याद आ रही है?

+0

अधिकतम आवंटित स्मृति सेटिंग को अधिकतम करने का प्रयास करें। यह एसएनएस एपीआई कॉल करने के लिए आवश्यक प्रसंस्करण को तेज करेगा। वर्तमान में आप इसे सबसे धीमी सेटिंग में रखते हैं। फिर टाइमआउट सेकंड को बढ़ाने का प्रयास करें। आप प्रत्येक एडब्ल्यूएस लैम्ब्डा फ़ंक्शन आमंत्रण में कितनी डायनेमोडीबी घटनाएं प्राप्त कर रहे हैं जो समय समाप्त हो जाती है? –

+0

@EricHammond मुझे प्रति लैम्ब्डा कॉल केवल 1 ईवेंट प्राप्त हो रहा है। मुझे संदेह है कि अधिक स्मृति और समय की आवश्यकता है। पेलोड भी बहुत छोटा है। साथ ही, जब मैं एसएनएस भाग जोड़ता हूं, तो 'logger.log()' (जो प्राप्त डेटा लॉग करता है) तक पहला कॉल तक नहीं पहुंचता है। – Rohan

+0

जावा फ़ंक्शंस निश्चित रूप से शुरू करने के लिए धीमे हैं और नोडजेएस या पायथन कार्यों की तुलना में लैम्ब्डा पर अधिक मेमोरी की आवश्यकता है। मैं निश्चित रूप से टाइमआउट और उपलब्ध स्मृति को बढ़ाकर शुरू करूंगा। –

उत्तर

5

ठीक है, क्योंकि मेरे प्रश्न पर टिप्पणी करने वाले लोगों में से कोई भी जवाब दे रहा है, मैं इसे स्वयं जवाब दूंगा।

मेमोरी उपयोग को 256 एमबी तक बढ़ाकर 30 मिनट तक टाइमआउट में समस्या हल हो गई है।

+0

जहां विशेष रूप से स्मृति उपयोग और समय बढ़ाया गया था? – TheQ

+0

भविष्य के पाठकों के लिए: यदि आपके लैम्ब्डा के वीपीसी में एनएटी गेटवे गुम हो रहा है तो यह नेटवर्क समस्या बहुत अच्छी तरह से हो सकता है। उदाहरण देखें https://stackoverflow.com/a/43234476/2442804 – luk2302

2

लैम्ब्डा ऑपरेशन के लिए आवंटित स्मृति की मात्रा बढ़ाएं।

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