जब कल एडब्ल्यूएस लैम्ब्डा पर रूबी समर्थन की घोषणा की गई, तो मैं इसे लेकर इतना उत्साहित था कि मुझे इसे तुरंत आज़माना पड़ा। हम हनीबैगर में कुछ समय के लिए लैम्ब्डा का उपयोग कर रहे हैं, और मैं रूबी में अपने कार्यों को लिखने में सक्षम होना चाहता हूं। कुछ घंटों के लिए नए रूबी समर्थन के साथ खेलने के बाद, मुझे विश्वास है कि हम नोड, गो और पायथन के साथ कम समय बिताएंगे। :)पी>
एक त्वरित उदाहरण
जबकि एडब्ल्यूएस से घोषणा ब्लॉग पोस्ट आपको लैम्ब्डा पर रूबी के साथ जल्दी से चल सकता है, मैं आपके रूबी लैम्ब्डा कार्यों को तैनात करने के लिए सर्वर रहित ढांचे का उपयोग करने का एक उदाहरण साझा करना चाहता था। मैंने पाया है कि यह ढांचा लैम्ब्डा कार्यों के साथ काम करने की परेशानी को दूर करने का एक शानदार काम करता है। जबकि ढांचे के वर्तमान संस्करण (1.34) में रूबी परियोजनाओं के लिए अभी तक तैयार टेम्पलेट पीढ़ी नहीं है (इस पोस्ट को लिखना शुरू करने से कुछ घंटे पहले पीआर को विलय कर दिया गया था), जनरेटर के बिना शुरू करना काफी आसान है। यहाँ नमूना कॉन्फ़िग फ़ाइल है जिसका उपयोग मैं इस पूर्वाभ्यास के लिए करूँगा, जो एक सरल कार्य है जो एक डायनेमोडीबी तालिका को S3 ऑब्जेक्ट से संबद्ध मेटाडेटा के साथ पॉप्युलेट करेगा जब वे बनाए जाते हैं:
कॉन्फ़िगरेशन के संसाधन अनुभाग के परिणामस्वरूप एक नई डायनेमोडीबी तालिका का स्वचालित निर्माण होता है, और नव-निर्मित तालिका का नाम फ़ंक्शन के लिए एक पर्यावरण चर में रखा जाता है, जिसका उपयोग हम कोड में करेंगे। फ़ंक्शन को पहले बनाए गए SNS विषय के लिए SNS ईवेंट द्वारा ट्रिगर किया जाता है। वह SNS विषय S3 बकेट पर PUTईवेंट के लिए सूचनाएं प्राप्त करता है, जिसे मैन्युअल रूप से भी बनाया जाता है।
ये रहा रूबी कोड:
कोड बहुत कुछ नहीं करता है - यह एसएनएस घटनाओं को प्राप्त करता है, एसएनएस संदेशों में रिकॉर्ड्स को लूपथ्रू प्रत्येक एस 3 ऑब्जेक्ट के बारे में जानकारी प्राप्त करने के लिए प्राप्त करता है, मेटाडेटा प्राप्त करने के लिए एस 3 ऑब्जेक्ट पर एक हेड अनुरोध करता है, फिर डालता है (बनाता है) या अपडेट) DynamoDB तालिका में एक आइटम। इस फ़ंक्शन के लिए एकमात्र निर्भरता AWS SDK है, जो रनटाइम वातावरण में शामिल है, इसलिए आपको Gemfile के बारे में चिंता करने की भी आवश्यकता नहीं है। हालाँकि, यदि आपके पास कुछ अतिरिक्त रत्न हैं जिन्हें आप पार्टी में लाना चाहते हैं, तो यह करना आसान है। आइए देखें कि जब हम परिनियोजन के बारे में बात करते हैं तो अतिरिक्त रत्नों को कैसे शामिल किया जाए।
तैनाती
इस कोड को लैम्ब्डा में अपनी वर्तमान स्थिति में लाना बहुत आसान है, सर्वर रहित ढांचे के लिए धन्यवाद:
sls deploy
वह एक आदेश आपके लिए यह सब करेगा:
- अपना कोड ज़िप करें
- ज़िप फ़ाइल को S3 पर रखें
- कार्य को लैम्ब्डा में परिनियोजित करें (पर्यावरण चर और एसएनएस ट्रिगर के साथ पूर्ण)
- IAM नीतियां बनाएं
- डायनेमोडीबी तालिका बनाएं
एक बार परिनियोजन हो जाने के बाद, बकेट में ऑब्जेक्ट बनाने से डायनेमोडीबी टेबल में नए आइटम जोड़े जाएंगे।
निर्भरता
अपने परिनियोजित फ़ंक्शन के साथ अतिरिक्त रत्न निर्भरताएं शामिल करना आसान है -- आपको बस एक Gemfile बनाने की ज़रूरत है, उन रत्नों को जोड़ें जिन्हें आप बंडल करना चाहते हैं, और bundle install --path vendor/bundle
चलाएं . यह रत्नों को स्थानीय निर्देशिका में बंडल करेगा, और वे ज़िप हो जाएंगे और आपके शेष कोड के साथ फ़ंक्शन में जुड़ जाएंगे।
निर्भरता के लिए एक चेतावनी, हालांकि, रत्न हैं जिन्हें संकलित करने के लिए कुछ प्रकार के सी एक्सटेंशन की आवश्यकता होती है। चूंकि आपका विकास पर्यावरण लैम्ब्डा रनटाइम पर्यावरण से अलग है, इसलिए आपको उन एक्सटेंशन को एडब्ल्यूएस में काम करने के लिए संकलित करने के लिए थोड़ा और काम करने की ज़रूरत है। लैम्ब्सी डॉकर छवियों के लिए धन्यवाद, हालांकि, और उनकी रूबी छवि के शीर्ष पर बनाई गई डॉकर छवि के लिए धन्यवाद , करना मुश्किल नहीं है। अपनी निर्भरता को बंडल करने के लिए और उन्हें ठीक से संकलित करने के लिए, बस मेरी डॉकर छवि चलाएं, जैसे:
docker run --rm -v $(pwd):/var/task stympy/lambda-ruby2.5
यह केवल ऊपर बताए गए बंडलर कमांड लाइन को चलाता है, इसलिए रत्नों को vendor/bundle
में रखा जाएगा। , ज़िप फ़ाइल में शामिल होने के लिए तैयार है जो deploy
. द्वारा बनाई गई है आदेश।
इसके साथ, आप दौड़ में शामिल हो गए हैं। मुझे आशा है कि आप मेरे पास जितना है लैम्ब्डा में रूबी चलाने का आनंद लेंगे। :)पी>