AWS लैम्ब्डा हमें ओवरहेड को कम करते हुए स्केलेबल फ़ंक्शन सेट करने की अनुमति देता है। पूरे रूबी ऑन रेल्स ऐप को लिखने, होस्ट करने और बनाए रखने के बजाय, हम अलग-अलग घटनाओं पर स्वतंत्र रूप से प्रतिक्रिया देने के लिए लैम्ब्डा फ़ंक्शन का उपयोग कर सकते हैं। यह लेख आपको एडब्ल्यूएस नवागंतुक से रूबी को अपने लैम्ब्डा कार्यों में लिखने के लिए लाएगा।
लैम्ब्डा आपको सर्वरों को प्रबंधित किए बिना घटनाओं के जवाब में कोड चलाने की अनुमति देता है। यह घटना-संचालित आर्किटेक्चर सुनिश्चित करता है कि आप केवल अपने कोड के लिए भुगतान करते हैं, जबकि यह आपके लिए काम कर रहा है, न कि निष्क्रिय होने पर। जबकि लैम्ब्डा का उपयोग आमतौर पर AWS पारिस्थितिकी तंत्र के भीतर की घटनाओं का जवाब देने के लिए किया जाता है, जैसे कि S3 बाल्टी में किसी फ़ाइल को हटाना, इसे AWS API गेटवे के संयोजन में API के रूप में कार्य करने के लिए भी कॉन्फ़िगर किया जा सकता है।
समय के आधार पर कार्यों को स्वचालित करने के लिए लैम्ब्डा का उपयोग किया जा सकता है, जैसे क्रॉन जॉब्स, या घटनाओं के जवाब में। यह डेटा प्रोसेसिंग में विस्तारित हो सकता है, अक्सर अन्य एडब्ल्यूएस सेवाओं, जैसे डायनेमोडीबी, या यहां तक कि एक स्केलेबल एपीआई में भी। उदाहरण के लिए, अमेज़ॅन के दस्तावेज़ से निम्न आरेख एक साधारण वास्तुकला दिखाता है जहां एक मोबाइल क्लाइंट HTTP अनुरोध करता है, संभवतः डेटाबेस पर कुछ सीआरयूडी कार्रवाई करने के लिए। एपीआई गेटवे अनुरोध को संबंधित लैम्ब्डा फ़ंक्शन के लिए रूट करता है (जैसे कि रेल एक नियंत्रक के लिए HTTP अनुरोधों को रूट करता है), और यह व्यावसायिक तर्क करता है और अनुरोध को पूरा करने के लिए AWS DynamoDB के साथ संचार करता है।
चूंकि हमारा कोड एक कंटेनर में चलाया जाता है, इसलिए जब इसका उपयोग नहीं किया जा रहा हो तो अमेज़ॅन का बुनियादी ढांचा स्वचालित रूप से फ़ंक्शन को स्लीप मोड में डाल देता है। जब कोई नया अनुरोध आता है, तो कंटेनर को ठंडे राज्य से शुरू होना चाहिए, जो निष्पादन समय को 2000ms तक बढ़ा सकता है। यह न केवल प्रतिक्रिया समय के मामले में आपकी सेवा की गुणवत्ता को कम कर सकता है बल्कि आपके पैसे भी खर्च कर सकता है। इस कारण से, समय-संवेदी कार्य के लिए लैम्ब्डा का उपयोग करना, जैसे उपयोगकर्ता ईमेल भेजना या UI ईवेंट का जवाब देना, एक अड़चन पैदा कर सकता है। फ़ंक्शन को 'गर्म' रखने के लिए समय-समय पर अनुरोध करने के लिए आप AWS CloudWatch को शेड्यूल करके इस समस्या को कम कर सकते हैं, लेकिन इससे होस्टिंग की लागत बढ़ जाएगी।
AWS लैम्ब्डा का उपयोग क्यों करें
Amazon Web Services (AWS) दुनिया की सबसे लोकप्रिय क्लाउड कंप्यूटिंग सेवा है। स्वतंत्र डेवलपर्स के लिए इसका उपयोग करना काफी आसान है लेकिन दुनिया की कुछ सबसे बड़ी कंपनियों के लिए बुनियादी ढांचे के रूप में काम करने के लिए शक्तिशाली और स्केलेबल है।
एडब्ल्यूएस लैम्ब्डा अमेज़ॅन की एक ऐसी पेशकश है जो 'सर्वर रहित कंप्यूट सेवा' के रूप में कार्य करती है, जो हमें केवल घटनाओं के जवाब में कोड चलाने की अनुमति देती है। यह ओवरहेड को कम करता है और हमें पूरे सर्वर को होस्ट किए बिना या एक संपूर्ण ऐप बनाए बिना, एपीआई कॉल जैसी किसी चीज़ पर प्रोग्रामेटिक रूप से प्रतिक्रिया करने की अनुमति देता है।
सही उपयोग के मामले में, यह सर्वर रहित आर्किटेक्चर लागत में काफी बचत कर सकता है। मूल्य निर्धारण की गणना लागत प्रति अनुरोध और लागत प्रति अवधि गणना समय के साथ की जाती है। किसी दिए गए महीने में पहले दस लाख अनुरोधों के बाद, मूल्य निर्धारण $0.20 प्रति दस लाख अनुरोध प्लस . है फ़ंक्शन द्वारा उपयोग किए जाने वाले गणना समय के प्रत्येक GB-सेकंड के लिए $0.000166667। जैसा कि आप कल्पना कर सकते हैं, यह दर-आधारित मूल्य निर्धारण लैम्ब्डा पर एक छोटी सी सेवा चलाने के लिए उल्लेखनीय रूप से सस्ता बनाता है, जबकि उसी दर पर असीमित स्केलिंग के विकल्प को बनाए रखता है।
रूबी डेवलपर्स इस क्लाउड सेवा से एपीआई कॉल या यहां तक कि अन्य एडब्ल्यूएस घटनाओं पर प्रतिक्रिया करने के लिए एक स्टेटलेस तरीके के रूप में उपयोग करके लाभ उठा सकते हैं।
एक परीक्षण AWS खाता सेट करना
एडब्ल्यूएस एक उदार मुक्त स्तर प्रदान करता है जिसमें एडब्ल्यूएस लैम्ब्डा के साथ एक मिलियन मुफ्त अनुरोध और प्रति माह 3.2 मिलियन सेकंड तक गणना समय शामिल है! यदि आपके पास पहले से ही एक खाता है, तो आप इस चरण को छोड़ सकते हैं, लेकिन इसे स्थापित करना बहुत आसान है।
यहां साइन अप करने के लिए आगे बढ़ें और आरंभ करने के लिए अपनी जानकारी भरें!
आपको खाता प्रकार और संपर्क जानकारी सहित अधिक जानकारी भरने के लिए प्रेरित किया जाएगा, और फ्री टियर के बाहर किसी भी उपयोग को कवर करने के लिए आपको क्रेडिट/डेबिट कार्ड जानकारी दर्ज करनी होगी। लैम्ब्डा का हमारा सरल उपयोग फ्री टियर में शामिल है, लेकिन यदि आप आकस्मिक अधिकता के बारे में चिंतित हैं, तो आप अपने उपयोग को नियंत्रित करने और अप्रत्याशित बिलिंग को रोकने के लिए एक बजट सेट कर सकते हैं।
रूबी के साथ लैम्ब्डा फंक्शन बनाना
एक बार पंजीकृत हो जाने के बाद, उत्पादों . पर होवर करें , फिर गणना करें , और लैम्ब्डा . चुनें ।
एक बार जब आप लैम्ब्डा कंसोल में हों (आपको 'आरंभ करें' हिट करना पड़ सकता है), तो आपको "फ़ंक्शन बनाएं" के लिए नारंगी बटन के साथ कार्यों की एक खाली सूची देखनी चाहिए। जैसा कि आपने अनुमान लगाया होगा, हम उस नारंगी रंग का "फ़ंक्शन बनाएँ" बटन दबा रहे होंगे।
फिर, हम "स्क्रैच से लेखक" चुनेंगे, क्योंकि रूबी के लिए अभी तक कोई टेम्प्लेट फ़ंक्शन नहीं है, और स्क्रैच से काम करना सीखने का सबसे अच्छा तरीका है।
आपको अपने फ़ंक्शन को उचित रूप से नाम देना चाहिए और रूबी संस्करण का चयन करना चाहिए जिसके साथ आप काम करना चाहते हैं। प्रसिद्ध प्रोग्रामिंग समस्या के बाद मैंने अपने FizzBuzz को कॉल किया।
आपको lambda_function.rb
. पर डबल-क्लिक करना पड़ सकता है स्रोत कोड प्रदर्शित करने के लिए नेविगेशन फलक में फ़ाइल।
फ़ंक्शन पहले से लिखा हुआ आता है और इसका शीर्षक है lambda_handler
. जैसा कि यह खड़ा है, जब इसे लागू किया जाता है तो फ़ंक्शन "हैलो फ्रॉम लैम्ब्डा!" पाठ के साथ 200 प्रतिक्रिया लौटाएगा, जैसा कि आप नीचे देख सकते हैं।
लैम्ब्डा फंक्शन के लिए टेस्ट ट्रिगर का उपयोग करना
जैसा कि परिचय में चर्चा की गई है, लैम्ब्डा कार्यों को विभिन्न तरीकों से शुरू किया जा सकता है। एपीआई कॉल के माध्यम से सबसे आम में से एक है। हालाँकि, इसके लिए AWS API गेटवे स्थापित करने की आवश्यकता है, जो इस लेख के दायरे से थोड़ा बाहर है। एपीआई गेटवे बहुत कम कॉन्फ़िगरेशन और अनंत मापनीयता वाले एपीआई बनाने के लिए लैम्ब्डा के साथ अद्भुत रूप से काम करता है।
सौभाग्य से हमारे लिए, फ़ंक्शन कंसोल के माध्यम से API कॉल का अनुकरण करना बहुत कठिन नहीं है, और हमारे लिए एक परीक्षण ईवेंट पहले से ही कतारबद्ध है ।
फ़ंक्शन ओवरव्यू के नीचे एक टूलबार है जिसमें वर्तमान में "कोड" चयनित है। जैसा कि पिछले स्क्रीनशॉट में दिखाया गया है, "कोड" के ठीक बगल में "परीक्षण . शीर्षक वाला एक टैब है "। आगे बढ़ें और "टेस्ट" चुनें, और आप देखेंगे कि कोड स्रोत के स्थान पर टेस्ट कंसोल दिखाई देगा।
पूर्व-कॉन्फ़िगर परीक्षण ईवेंट एक JSON ऑब्जेक्ट है जो लैम्ब्डा फ़ंक्शन को event
के रूप में भेजा जाता है ऑब्जेक्ट, जिसे फ़ंक्शन एक पैरामीटर के रूप में लेता है। यदि आप API गेटवे के माध्यम से किसी समापन बिंदु को कॉल कर रहे थे, तो यह अनुरोध का मुख्य भाग होगा।
चूंकि प्लेसहोल्डर लैम्ब्डा फ़ंक्शन घटना को नहीं पढ़ता है, इससे कोई फर्क नहीं पड़ता कि हम शरीर के रूप में क्या भेजते हैं। जैसे, हम नारंगी "आमंत्रण . पर टैप करके लिखित रूप में आगे बढ़ सकते हैं "बटन।
यदि आपने फ़ंक्शन को सही तरीके से सेट किया है, तो आपको "निष्पादन सफल" शीर्षक वाला एक हरा बॉक्स दिखाई देना चाहिए, जिसे आप अपने फ़ंक्शन से JSON प्रतिक्रिया देखने के लिए विस्तारित कर सकते हैं।
FizzBuzz लिखना
अब जब हमने पुष्टि कर दी है कि हमारा लैम्ब्डा फ़ंक्शन सही ढंग से काम कर रहा है, तो हम इसे अपने स्वयं के कस्टम रूबी कोड के साथ कस्टमाइज़ कर सकते हैं। इस उदाहरण में, हम प्रसिद्ध FizzBuzz समस्या के लिए हमारे लैम्ब्डा फ़ंक्शन का जवाब देंगे। FizzBuzz एक पसंदीदा साक्षात्कार है, और संकेत कुछ इस प्रकार है
<ब्लॉकक्वॉट>एक प्रोग्राम लिखें जो 1 से 50 तक की संख्याओं को प्रिंट करता है। लेकिन, तीन के गुणकों के लिए, संख्या के बजाय "फ़िज़" प्रिंट करें, और पाँच के गुणकों के लिए, "बज़" प्रिंट करें। वे नंबर जो तीन और पांच प्रिंट "FizzBuzz" दोनों के गुणज हैं।
अपने लैम्ब्डा फ़ंक्शन में कोड को my FizzBuzz समाधान से बदलें -
require 'json'
def lambda_handler(event:, context:)
max_val = event['max_val']
textResponse = ''
1.upto(max_val) do |i|
if i % 5 == 0 and i % 3 == 0
textResponse += "FizzBuzz"
elsif i % 5 == 0
textResponse += "Buzz"
elsif i % 3 == 0
textResponse += "Fizz"
else
textResponse += i.to_s
end
end
{ statusCode: 200, body: JSON.generate(textResponse) }
end
यह सामान्य FizzBuzz पर थोड़ा सा स्पिन है। केवल 50 के माध्यम से लूप करने के बजाय, हम उस संख्या के माध्यम से लूप कर रहे हैं जो घटना के साथ भेजी जाती है। ईवेंट ऑब्जेक्ट को डिक्शनरी की तरह पास किया जाता है, इसलिए event[max_val]
. के लिए पूछना max_val
. पर मान लौटाता है चाभी। अंत में, FizzBuzz समाधान को प्रिंट करने के बजाय, हम इसे केवल एक स्ट्रिंग में जोड़ देते हैं जिसे हम JSON ऑब्जेक्ट के रूप में वापस कर देते हैं।
इसके बाद, सुनिश्चित करें कि आपने अपने लैम्ब्डा फ़ंक्शन को नए कोड के साथ अपडेट करने के लिए नारंगी "तैनाती" बटन दबाया है ।
समाधान लिखने और उसे परिनियोजित करने के बाद, परीक्षण कंसोल पर वापस आएं। अपने परीक्षण ईवेंट को केवल max_val
. में पास करने के लिए बदलें कुंजी/मूल्य जोड़ी। यह इस तरह दिखना चाहिए:
JSON बस है
{
"max_val": 70
}
अंत में, अपना परीक्षण चलाने के लिए "आमंत्रण" दबाएं! आप यह दिखाने के लिए परिणाम का विस्तार कर सकते हैं कि फ़ंक्शन इनपुट पढ़ता है और FizzBuzz समस्या का परिणाम लौटाता है।
आसान विकास
वेब कंसोल में काम करना सीखने के उद्देश्यों के लिए सुविधाजनक रहा है, लेकिन इसे सीमित रखना एक दुःस्वप्न होगा। एडब्ल्यूएस लैम्ब्डा के साथ विकसित करने के सबसे लोकप्रिय तरीकों में से एक सीएलआई का उपयोग करना है, जो कमांड लाइन इंटरफेस के लिए है।
एक बार जब आप IAM भूमिकाओं के माध्यम से सही अनुमतियाँ बना लेते हैं, तो अपनी मशीन पर CLI स्थापित करें और इसे अपने क्रेडेंशियल के साथ कॉन्फ़िगर करें। फिर, आप लैम्ब्डा सीएलआई का उपयोग अपने फ़ंक्शन का परीक्षण करने के लिए कर सकते हैं क्योंकि आप स्थानीय रूप से विकसित होते हैं (अपनी पसंद के आईडीई में) और कमांड लाइन के माध्यम से अपने परिवर्तनों को तैनात करते हैं।
एक अन्य लोकप्रिय विकास विधि फ्रेमवर्क के माध्यम से है, जैसे सर्वर रहित। सर्वर रहित बहुत अधिक बोझिल कॉन्फ़िगरेशन को संभालता है जिससे AWS त्रस्त है, जिसमें API गेटवे सेट करना शामिल है, यदि आपको अपने फ़ंक्शन के लिए इसकी आवश्यकता है। सर्वर रहित लॉगिंग को भी बढ़ाता है, रूबी जेम प्रबंधन को आसान बनाता है, और सीआई/सीडी के विन्यास की अनुमति देता है, ताकि आप पाइपलाइनों के आधार पर अपने भंडार से स्वचालित रूप से तैनात कर सकें।
रूबी रत्न सहित सर्वर रहित या समान ढांचे का उपयोग किए बिना कुछ हुप्स के माध्यम से कूदने की आवश्यकता होती है। आपको एक फ़ोल्डर शामिल करने के लिए अपने फ़ंक्शन का विस्तार करना होगा, और फिर एक .bundle/config
बनाना होगा। अपनी रूट डायरेक्टरी में फ़ाइल करें जिसमें निम्नलिखित इनिशियलाइज़ेशन कोड है जो बंडलर को यह बताने के लिए कि आपके द्वारा इंस्टॉल किए गए रत्न कहाँ रखे जाएँ:
---
BUNDLE_PATH: "vendor/bundle"
फिर, आप सीएलआई का उपयोग bundle add
. के लिए कर सकते हैं आपको जिन रत्नों की आवश्यकता है और require
उन्हें सीधे आपके कोड में।
AWS लैम्ब्डा की सीमाएं
बधाई हो, आपने रूबी में अपना पहला AWS लैम्ब्डा फंक्शन लिखा है! पहले, रूबी के साथ एपीआई चलाने का एकमात्र व्यवहार्य समाधान अक्सर एक संपूर्ण रेल ऐप बनाना था। अब, आप एक पूर्ण एप्लिकेशन के साथ आने वाले सभी ब्लोट को छोड़कर, एक बार में एक एंडपॉइंट बना सकते हैं। लैम्ब्डा माइक्रोसेकंड में उपयोग के लिए बिल करता है, इसलिए यह त्वरित समाधान के लिए उल्लेखनीय रूप से सस्ता हो सकता है। इसके अलावा, इस क्लाउड ऑफ़रिंग का लाभ उठाने से हम कम लागत पर काम कर सकते हैं लेकिन फिर भी अविश्वसनीय रूप से तेज़ी से बढ़ सकते हैं। AWS यही कारण है कि नेटफ्लिक्स लगातार अधिकतम-क्षमता वाले सर्वर बैंडविड्थ के लिए भुगतान किए बिना पीक आवर्स के दौरान काम करता है।
सभी जीत के बावजूद, एडब्ल्यूएस लैम्ब्डा एक कैच-ऑल समाधान नहीं है। यह अपने आप में एक एपीआई के रूप में कार्य नहीं करेगा और इसकी राज्य क्षमताओं में सीमित है। लैम्ब्डा फ़ंक्शन चलाने में 15 मिनट से अधिक समय नहीं ले सकता है, और मेमोरी 6GB तक सीमित है। लैम्ब्डा फ़ंक्शंस का परीक्षण करना भी एक चुनौती है, क्योंकि आपको अक्सर अपने संपूर्ण बुनियादी ढांचे को एक अलग वातावरण में डुप्लिकेट करना होगा।
अगर आपके पास कोई ऐप या सुविधा है जिसे 24/7 चलाने की आवश्यकता नहीं है, तो लैम्ब्डा हो सकता है एक अच्छा फिट हो। यदि आपके फ़ंक्शन को AWS पारिस्थितिकी तंत्र के बाहर किसी प्रकार की स्थिति बनाए रखने या डेटा को अपडेट करने की आवश्यकता है, तो लैम्ब्डा एक अच्छा फिट नहीं है। लैम्ब्डा 1,000 समवर्ती कनेक्शनों में भी चूक करता है, इसलिए एक ऐसा एप्लिकेशन जो लगातार उससे अधिक उपयोग देखता है, लैम्ब्डा पर बहुत अविश्वसनीय होगा। अनिवार्य रूप से, लैम्ब्डा का उपयोग अल्पकालिक घटना-संचालित स्वचालन कार्यों में किया जाता है, जिन्हें स्थायी स्थिति की आवश्यकता नहीं होती है।
लैम्ब्डा फंक्शन एक शक्तिशाली टूल हो सकता है, खासकर आप जैसे रूबी डेवलपर के हाथों में।