AWS SQS + SNS + लैम्ब्डा


11

मैं सोच रहा था कि क्या मैं SQS कतार को एक संदेश भेज सकता हूं और ईमेल भेजने के लिए एक लैम्ब्डा को ट्रिगर करने के लिए एक एसएनएस विषय की सदस्यता ले सकता हूं।

SQS -> SNS -> (लैम्ब्डा) -> SES

मुझे पता है कि एसएनएस संदेश एसक्यूएस को भेजे जा सकते हैं लेकिन अगर दूसरा रास्ता संभव है तो मैं उत्सुक हूं

जवाबों:


11

एक बात मैंने SQS कतार के लिए ApproximateNumberOfMessagesVisible( >= 1 for 5 minutes) पर CloudWatch अलार्म बनाने के लिए किया था । अलार्म एक SNS विषय पर प्रकाशित होता है जो लैम्बडा फ़ंक्शन को ट्रिगर करता है। लैंबडा फंक्शन छोरों को तब तक साफ करता है जब तक कि वह कतार को साफ न कर दे।

अलार्म से ट्रिगर करने में 5 मिनट तक का समय लग सकता है, लेकिन यह कतार को प्रदूषित किए बिना बैच-शेड्यूल किए गए कार्यों के लिए काल्पनिक रूप से काम करता है। (सक्रिय कतारों के लिए अलार्म ग्रैन्युलैरिटी 5 मिनट है।)


मैं यह ठीक वही काम करने के बारे में सोच रहा हूं। क्या आप जानते हैं कि अगर आपको हर बार क्लाउडवाच आपकी कतार की जाँच करता है ऐसा नहीं है कि हम वास्तव में इस तरह की चीज़ों के साथ मोटी रकम की बात कर रहे हैं।
ब्रायन एफ लेटी

इसके अलावा, मैं मान रहा हूं कि आप क्या कहते हैं कि अलार्म अलार्म के SNS को बार-बार भेजता रहता है? आपके लैम्बडा फंक्शन पर आने वाले समय में क्या होता है?
ब्रायन एफ लेटी

एक बात और। सभी टिप्पणियों के लिए क्षमा करें। मैं "लगभग" भाग से थोड़ा चिंतित था कि क्या आपके पास कभी ऐसा समय था जहां एक संदेश था, जो वहां इंतजार कर रहा था, जो इससे नहीं निपटता था क्योंकि यह सोचा था कि वहां 1 आइटम के बजाय केवल 0 आइटम थे?
ब्रायन एफ लेटी

@BrianFLeighty चेक मुफ्त हैं। लेकिन यह लगातार अलार्म नहीं करता है; इसे कतार पर बैठे संदेशों के लिए दूसरे अलार्म की आवश्यकता हो सकती है (लंबो निष्पादन निष्पादन और अगले अलार्म के बीच जोड़ा गया)। मतदान एक बेहतर समाधान हो सकता है; मेरा आम तौर पर बहुत शांत कतार के लिए काम करता है (इसलिए मतदान के लायक नहीं है।)
स्क्वीडपल्स

"अनुमानित" टिप्पणी को याद किया। यह ठीक काम करने के लिए लगता है, लेकिन ymmv
स्क्वीडपिकल्स

7

आप जा नहीं सकते SQS -> SNS, केवल SNS -> SQS

लैंबडा अब शेड्यूलिंग का समर्थन करता है इसलिए एक विकल्प लैम्बडा फ़ंक्शन में एक एसक्यूएस पोलर को लागू करना और इसे अक्सर चलाना है।

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


3
लैम्ब्डा के साथ पारंपरिक कतार के पोलर ट्रिक्स का उपयोग करने में कुछ भी गलत नहीं है: उदाहरण के लिए यदि लैम्बडा निष्पादन के दौरान एक संदेश को समाप्त करता है, तो अंत में फ़ंक्शन को फिर से लागू करें; अन्यथा इसे निर्धारित समय के अनुसार निष्पादित करें
nik.shornikov

1

SQSकतार को SNSविषय के लिए सब्सक्राइब किया जा सकता है और इसलिए प्राप्त SNSसंदेशों को संसाधित करने के लिए । वर्तमान में, यह अतिरिक्त कोडिंग के बिना अन्य दिशा में उल्लेखनीय नहीं है (उदाहरण के लिए LambdaFAQ देखें )।

मैं कहूंगा कि कुछ विकल्प हैं कि इसे कैसे किया जाए लेकिन यह इतना सामान्य नहीं है क्योंकि अधिक सामान्य ईवेंट-चालित प्रणाली का उपयोग करना है AWS event->SQS->Lambda। अन्यथा आपको कोड को अनुकूलित / कार्यान्वित करने की आवश्यकता हो सकती है कि SQSकतार कैसे संसाधित होती हैं:

  1. आप अपने स्वयं के ईवेंट स्रोतों को लागू कर सकते हैं
  2. आपके पास कतारों को सुनने और फिर SQS घटनाओं पर ट्रिगर करने के लिए कुछ मध्यवर्ती EC2 उदाहरण हो सकते हैंSQSLambda

0

यह कुछ समय पहले पूछा और उत्तर दिया गया था, लेकिन सिर्फ अपने बारे में सोचा था, मुझे लगा कि मैं एक दृष्टिकोण जोड़ूंगा।

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

 1. Create a SNS topic.............................: SNS-topic-01
 2. Subscribe a SQS queue to that topic............: SQS-queue-01
 3. Subscribe a Lambda Function to that topic......: LAMBDA-func-01

इस कॉन्फ़िगरेशन का उपयोग करते हुए, SNS विषय को एक संदेश सबमिट करना इसे SQS कतार में संलग्न करेगा, साथ ही साथ एक साथी लैंबडा फ़ंक्शन को ट्रिगर करेगा। उस लैम्ब्डा फ़ंक्शन को उसी SQS कतार को पढ़ने के लिए लिखा जाएगा, लेकिन लांग पोलिंग सक्षम (20 सेकंड तक) सक्षम है ताकि यह एन्क्यू पूरा होने से पहले कतार को न पढ़े (यानी दौड़ की स्थिति)।

संक्षेप में, यह स्कीम सिर्फ-इन-टाइम प्रत्येक एनक्यूड एसक्यूएस संदेश के लिए एक लैम्बडा फ़ंक्शन को आमंत्रित करती है। मुझे नहीं पता कि एक साथ लांग पोल पाठक SQS पर काम कैसे करते हैं ... (क्या कोई गिरा हुआ है?), लेकिन इसे हल करने पर विचार करने का यह एक और तरीका है। = :)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.