2016-01-14 16 views
5

मैं प्रीसेट एस 3 बाल्टी में ऑब्जेक्ट अपलोड होने पर एक ईमेल भेजने के लिए एक एडब्ल्यूएस लैम्ब्डा फ़ंक्शन (पायथन में लिखा गया) का उपयोग कर रहा हूं। ऑब्जेक्ट को एसडब्ल्यू बाल्टी में एडब्ल्यूएस PHP एसडीके के माध्यम से अपलोड किया गया है और एक मल्टीपार्ट अपलोड का उपयोग कर रहा है। जब भी मैं अपना कोड (लैम्ब्डा कोड संपादक पृष्ठ के भीतर) का परीक्षण करता हूं, ऐसा लगता है कि यह ठीक काम करता है और मुझे केवल एक ही ईमेल मिलता है।एडब्ल्यूएस लैम्ब्डा फ़ंक्शन दो बार गोलीबारी कर रहा है

लेकिन जब ऑब्जेक्ट PHP एसडीके के माध्यम से अपलोड किया जाता है, तो लैम्ब्डा फ़ंक्शन दो बार चलता है और अलग-अलग संदेश आईडी के साथ दो ईमेल भेजता है। मैंने अलग-अलग ईमेल पते की कोशिश की है लेकिन प्रत्येक पते को बिल्कुल दो, डुप्लिकेट ईमेल प्राप्त होते हैं।

क्या कोई मुझे मार्गदर्शन कर सकता है कि मैं गलत कहां जा सकता हूं? मैं boto3 लाइब्रेरी का उपयोग कर रहा हूं जिसे ईमेल भेजने के लिए नमूना पायथन कोड के साथ आयात किया जाता है।

+0

सबसे पहले आप जांच सकते हैं कि आप दो बार अपलोड नहीं कर रहे हैं। PutObject lambda ट्रिगर है? डुप्लिकेट ईमेल के बीच समय अंतर क्या है? – helloV

+0

@helloV ऑब्जेक्ट वास्तव में S3 बाल्टी में अपलोड किया जाता है। PutObject लैम्बडा को ट्रिगर करता है क्योंकि ईमेल भेजा जाता है और ठीक से प्राप्त होता है। दो ईमेल बिल्कुल दो सेकंड अलग हो गए हैं। –

उत्तर

7

हां, हमारे पास यह भी है और यह ईमेल से जुड़ा हुआ नहीं है, यह एक अपलोड के लिए एस 3 फायरिंग एकाधिक घटनाओं से जुड़ा हुआ है। बहुत सारे मैसेजिंग सिस्टम की तरह, अमेज़ॅन एस 3 से इवेंट नोटिफिकेशन की "केवल डिलीवरी" की गारंटी नहीं देता है, इसलिए आपके लैम्ब्डा फ़ंक्शन को इसे स्वयं संभालने की आवश्यकता होगी।

सबसे महान, लेकिन करने योग्य नहीं है।

पिछले कुछ अनुरोधों के विवरण के साथ कैश का कुछ रूप ताकि आप देख सकें कि आपने पहले से ही विशेष ईवेंट संदेश संसाधित कर लिया है या नहीं।

+0

आप लैम्ब्डा फ़ंक्शन के अंदर कैशिंग के बारे में कैसे जाते हैं? – idbehold

+0

शायद रेडिस या डायनेमो डीबी जैसे कुछ का उपयोग करना। कैश को लैम्ब्डा इनवोकेशन के बीच जीवित रहने की आवश्यकता होगी, इसलिए इसे लैम्ब्डा फ़ंक्शन के बाहर होना चाहिए। – smcstewart

1

मुझे भी इसी मुद्दे का सामना करना पड़ रहा है, मेरे मामले में एस 3 बाल्टी में प्रत्येक पॉट इवेंट में एक लैम्ब्डा ट्रिगर होना चाहिए, यह aws_request_id और aws_lambda_arn के साथ दो बार ट्रिगर करता है।

इसे ठीक करने के लिए, aws_request_id (यह आईडी प्रत्येक लैम्बडा ईवेंट के लिए अद्वितीय होगी) का ट्रैक रखें और हैंडलर पर एक जांच करें। यदि वही aws_request_id मौजूद है तो कुछ भी नहीं करें, अन्यथा सामान्य रूप से प्रक्रिया करें।

+0

एकाधिक फायरिंग को रोकने के लिए आप x-amz-request-id के मान को कैसे स्टोर करेंगे, दूसरा ट्रिगर एक नया लैम्ब्डा निकालता है जिसमें तुलना करने के लिए कोई चर नहीं है। जब तक आप सुझाव नहीं दे रहे हैं कि अनुरोध आईडी आरडीएस उदाहरण में संग्रहीत की जानी चाहिए। – Shek

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