Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Ruby

AWS Lambda पर Ruby में महारत हासिल करें: स्केलेबल, इवेंट-ड्रिवन फंक्शन्स बनाएं

AWS Lambda हमें ओवरहेड को कम करते हुए स्केलेबल फंक्शन्स सेटअप करने की अनुमति देता है। संपूर्ण Ruby on Rails ऐप लिखने, होस्ट करने और मेंटेन करने के बजाय, हम व्यक्तिगत घटनाओं पर स्वतंत्र रूप से प्रतिक्रिया करने के लिए Lambda फंक्शन्स का उपयोग कर सकते हैं। यह लेख आपको AWS नौसिखिए से अपने स्वयं के Lambda फंक्शन्स में Ruby लिखने तक ले जाएगा।

Lambda आपको सर्वर प्रबंधित किए बिना घटनाओं के जवाब में कोड चलाने की अनुमति देता है। यह इवेंट-ड्रिवन आर्किटेक्चर सुनिश्चित करता है कि आप अपने कोड के लिए केवल तभी भुगतान करते हैं जब वह आपके लिए काम कर रहा हो, न कि जब वह निष्क्रिय हो। जबकि Lambda का उपयोग आमतौर पर AWS पारिस्थितिकी तंत्र के भीतर घटनाओं का जवाब देने के लिए किया जाता है, जैसे S3 बकेट में फ़ाइल हटाना, इसे AWS API Gateway के साथ संयोजन में API के रूप में कार्य करने के लिए भी कॉन्फ़िगर किया जा सकता है।

कोई समय-आधारित कार्यों को स्वचालित करने के लिए Lambda का उपयोग कर सकता है, जैसे Cron Jobs, या घटनाओं के जवाब में। यह डेटा प्रोसेसिंग तक विस्तारित हो सकता है, अक्सर अन्य AWS सेवाओं के साथ, जैसे DynamoDB, या यहां तक कि एक स्केलेबल API में। उदाहरण के लिए, Amazon के दस्तावेज़ से निम्न आरेख एक सरल आर्किटेक्चर दिखाता है जहां एक मोबाइल क्लाइंट एक HTTP अनुरोध करता है, संभवतः डेटाबेस पर कुछ CRUD एक्शन करने के लिए। API Gateway अनुरोध को संबंधित Lambda फंक्शन पर रूट करता है (बहुत कुछ वैसे ही जैसे Rails HTTP अनुरोधों को कंट्रोलर पर रूट करता है), और यह व्यावसायिक तर्क करता है और अनुरोध को पूरा करने के लिए AWS DynamoDB के साथ संचार करता है।

AWS Lambda पर Ruby में महारत हासिल करें: स्केलेबल, इवेंट-ड्रिवन फंक्शन्स बनाएं

चूंकि हमारा कोड एक कंटेनर में चलता है, Amazon का इन्फ्रास्ट्रक्चर स्वचालित रूप से फंक्शन को एक प्रकार के स्लीप मोड में डाल देता है जब इसका उपयोग नहीं किया जा रहा हो। जब एक नया अनुरोध आता है, तो कंटेनर को कोल्ड स्टेट से शुरू करना होगा, जो निष्पादन समय को 2000ms तक बढ़ा सकता है। यह न केवल प्रतिक्रिया समय के संदर्भ में आपकी सेवा की गुणवत्ता को खराब कर सकता है बल्कि आपको पैसा भी खर्च कर सकता है। इस कारण से, उपयोगकर्ता ईमेल भेजने या UI घटनाओं का जवाब देने जैसे समय-संवेदनशील कार्य के लिए Lambda का उपयोग करना एक बॉटलनेक बना सकता है। आप AWS CloudWatch को आवधिक अनुरोध करने के लिए शेड्यूल करके इस समस्या को कम कर सकते हैं ताकि फंक्शन 'वार्म' रहे, लेकिन इससे होस्टिंग लागत बढ़ जाएगी।

AWS Lambda का उपयोग क्यों करें

Amazon Web Services (AWS) दुनिया में सबसे लोकप्रिय क्लाउड कंप्यूटिंग सेवा है। यह स्वतंत्र डेवलपर्स के उपयोग के लिए पर्याप्त सरल है लेकिन दुनिया की कुछ सबसे बड़ी कंपनियों के लिए इन्फ्रास्ट्रक्चर के रूप में सेवा करने के लिए पर्याप्त शक्तिशाली और स्केलेबल भी है।

AWS Lambda Amazon का एक ऐसा प्रस्ताव है जो 'सर्वरलेस कंप्यूट सेवा' के रूप में कार्य करता है, जो हमें केवल घटनाओं के जवाब में कोड चलाने की अनुमति देता है। यह ओवरहेड को कम करता है और हमें प्रोग्रामेटिक रूप से किसी चीज़ पर प्रतिक्रिया करने की अनुमति देता है, जैसे API कॉल, बिना संपूर्ण सर्वर होस्ट किए या संपूर्ण ऐप बनाए।

सही उपयोग के मामले के लिए, यह सर्वरलेस आर्किटेक्चर लागत में एक बड़ी बचत कर सकता है। मूल्य निर्धारण प्रति अनुरोध लागत और कंप्यूट समय की अवधि प्रति लागत के साथ गणना की जाती है। किसी दिए गए महीने में पहले दस लाख अनुरोधों के बाद, मूल्य निर्धारण $0.20 प्रति दस लाख अनुरोध प्लस $0.0000166667 प्रति GB-सेकंड कंप्यूट समय है जो फंक्शन उपयोग करता है। जैसा कि आप कल्पना कर सकते हैं, यह दर-आधारित मूल्य निर्धारण Lambda पर एक छोटी सेवा चलाने के लिए उल्लेखनीय रूप से सस्ता बनाता है जबकि अभी भी उसी दर पर अनंत रूप से स्केल करने का विकल्प बनाए रखता है।

Ruby डेवलपर्स इस क्लाउड सेवा से लाभ उठा सकते हैं, इसे API कॉल्स या अन्य AWS घटनाओं पर प्रतिक्रिया करने के लिए एक स्टेटलेस तरीके के रूप में उपयोग करके।

ट्रायल AWS अकाउंट सेटअप करना

AWS एक काफी उदार फ्री टियर प्रदान करता है जिसमें AWS Lambda के साथ प्रति माह दस लाख मुफ्त अनुरोध और 3.2 मिलियन सेकंड तक का कंप्यूट समय शामिल है! यदि आपके पास पहले से अकाउंट है, तो आप इस चरण को छोड़ सकते हैं, लेकिन एक सेटअप करना बहुत सरल है।

यहां साइन अप करें और शुरू करने के लिए अपनी जानकारी भरें! AWS Lambda पर Ruby में महारत हासिल करें: स्केलेबल, इवेंट-ड्रिवन फंक्शन्स बनाएं

आपको खाता प्रकार और संपर्क जानकारी सहित अधिक जानकारी भरने के लिए प्रेरित किया जाएगा, और फ्री टियर के बाहर किसी भी उपयोग को कवर करने के लिए क्रेडिट/डेबिट कार्ड जानकारी दर्ज करने की आवश्यकता होगी। Lambda का हमारा सरल उपयोग फ्री टियर में शामिल है, लेकिन यदि आप आकस्मिक ओवरएज के बारे में चिंतित हैं, तो आप अपने उपयोग को नियंत्रित करने और अप्रत्याशित बिलिंग को रोकने के लिए बजट सेटअप कर सकते हैं।

Ruby के साथ Lambda फंक्शन बनाना

एक बार पंजीकृत होने के बाद, Products पर होवर करें, फिर Compute, और Lambda चुनें।

AWS Lambda पर Ruby में महारत हासिल करें: स्केलेबल, इवेंट-ड्रिवन फंक्शन्स बनाएं

एक बार जब आप Lambda Console में हों (आपको 'Get Started' दबाना पड़ सकता है), तो आपको फंक्शन्स की एक खाली सूची दिखाई देगी जिसमें "Create Function" के लिए एक नारंगी बटन होगा। जैसा कि आपने अनुमान लगाया होगा, हम उस नारंगी "Create Function" बटन को दबाएंगे।

AWS Lambda पर Ruby में महारत हासिल करें: स्केलेबल, इवेंट-ड्रिवन फंक्शन्स बनाएं

फिर, हम "Author from Scratch" चुनेंगे, क्योंकि Ruby के लिए अभी तक कोई टेम्पलेट फंक्शन नहीं हैं, और स्क्रैच से काम करना सीखने का सबसे अच्छा तरीका है।

आपको अपने फंक्शन का उचित नाम देना चाहिए और उस Ruby संस्करण का चयन करना चाहिए जिसके साथ आप काम करना चाहते हैं। मैंने प्रसिद्ध प्रोग्रामिंग समस्या के बाद मेरा नाम FizzBuzz रखा।

सोर्स कोड प्रकट करने के लिए नेविगेशन पेन में lambda_function.rb फाइल पर डबल-क्लिक करना पड़ सकता है।

फंक्शन पूर्व-लिखित आता है और इसका शीर्षक lambda_handler है। जैसा कि यह खड़ा है, जब इसे आमंत्रित किया जाता है तो फंक्शन "Hello From Lambda!" टेक्स्ट के साथ 200 प्रतिक्रिया लौटाएगा, जैसा कि आप नीचे देख सकते हैं। AWS Lambda पर Ruby में महारत हासिल करें: स्केलेबल, इवेंट-ड्रिवन फंक्शन्स बनाएं

Lambda फंक्शन के लिए टेस्ट ट्रिगर का उपयोग करना

जैसा कि परिचय में चर्चा की गई है, Lambda फंक्शन्स को विभिन्न तरीकों से ट्रिगर किया जा सकता है। सबसे आम में से एक API कॉल के माध्यम से है। हालांकि, इसके लिए AWS API Gateway सेटअप करने की आवश्यकता होती है, जो इस लेख के दायरे से थोड़ा बाहर है। API Gateway Lambda के साथ अद्भुत रूप से काम करता है ताकि बहुत कम कॉन्फ़िगरेशन और अनंत स्केलेबिलिटी के साथ APIs बनाए जा सकें।

सौभाग्य से हमारे लिए, फंक्शन कंसोल के माध्यम से API कॉल का अनुकरण करना बहुत कठिन नहीं है, और एक टेस्ट इवेंट पहले से ही हमारे लिए कतारबद्ध है।

फंक्शन अवलोकन के नीचे एक टूलबार है जिसमें वर्तमान में "Code" चयनित है। अंतिम स्क्रीनशॉट में दिखाए अनुसार, "Code" के ठीक बगल में "Test" शीर्षक वाला एक टैब है। आगे बढ़ें और "Test" चुनें, और आप कोड सोर्स के स्थान पर टेस्ट कंसोल देखेंगे।

AWS Lambda पर Ruby में महारत हासिल करें: स्केलेबल, इवेंट-ड्रिवन फंक्शन्स बनाएं

प्री-कॉन्फ़िगर्ड टेस्ट इवेंट एक JSON ऑब्जेक्ट है जो Lambda फंक्शन को event ऑब्जेक्ट के रूप में भेजा जाता है, जिसे फंक्शन पैरामीटर के रूप में लेता है। यदि आप API Gateway के माध्यम से एक एंडपॉइंट कॉल कर रहे थे, तो यह अनुरोध का बॉडी होगा।

चूंकि प्लेसहोल्डर Lambda फंक्शन इवेंट को नहीं पढ़ता, इसलिए यह ज्यादा मायने नहीं रखता कि हम बॉडी के रूप में क्या भेजते हैं। जैसे, हम नारंगी "Invoke" बटन को टैप करके लिखित रूप में आगे बढ़ सकते हैं।

यदि आपने फंक्शन को सही ढंग से सेटअप किया है, तो आपको "Execution Succeeded" शीर्षक वाला एक हरा बॉक्स दिखाई देगा, जिसे आप अपने फंक्शन से JSON प्रतिक्रिया देखने के लिए विस्तारित कर सकते हैं।

FizzBuzz लिखना

अब जब हमने पुष्टि कर ली है कि हमारा Lambda फंक्शन सही ढंग से काम कर रहा है, तो हम इसे अपने स्वयं के कस्टम Ruby कोड के साथ अनुकूलित कर सकते हैं। इस उदाहरण में, हम अपने Lambda फंक्शन को प्रसिद्ध FizzBuzz समस्या का जवाब देंगे। FizzBuzz एक साक्षात्कार पसंदीदा है, और संकेत कुछ इस तरह जाता है:

एक प्रोग्राम लिखें जो 1 से 50 तक की संख्याएं प्रिंट करे। लेकिन, तीन के गुणकों के लिए, संख्या के बजाय "Fizz" प्रिंट करें, और पांच के गुणकों के लिए "Buzz" प्रिंट करें। उन संख्याओं के लिए जो तीन और पांच दोनों के गुणक हैं, "FizzBuzz" प्रिंट करें।

अपने Lambda फंक्शन में कोड को मेरे 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 ऑब्जेक्ट के रूप में लौटाते हैं।

अगला, नए कोड के साथ अपने Lambda फंक्शन को अपडेट करने के लिए नारंगी "Deploy" बटन को हिट करना सुनिश्चित करें।

समाधान लिखने और इसे डेप्लॉय करने के बाद, टेस्ट कंसोल पर वापस जाएं। अपने टेस्ट इवेंट को केवल एक max_val कुंजी/मान जोड़ी पास करने के लिए बदलें। यह इस तरह दिखना चाहिए:

AWS Lambda पर Ruby में महारत हासिल करें: स्केलेबल, इवेंट-ड्रिवन फंक्शन्स बनाएं

JSON बस है

{ "max_val": 70 }

अंत में, अपना टेस्ट चलाने के लिए "Invoke" दबाएं! आप परिणाम का विस्तार करके दिखा सकते हैं कि फंक्शन ने इनपुट पढ़ा और FizzBuzz समस्या का परिणाम लौटाया।

आसान विकास

वेब कंसोल में काम करना सीखने के उद्देश्यों के लिए सुविधाजनक रहा है, लेकिन इससे प्रतिबंधित होना एक बुरा सपना होगा। AWS Lambda के साथ विकसित करने के सबसे लोकप्रिय तरीकों में से एक CLI का उपयोग करना है, जो कमांड लाइन इंटरफेस के लिए खड़ा है।

एक बार जब आप IAM भूमिकाओं के माध्यम से सही अनुमतियां बना लेते हैं, तो अपने मशीन पर CLI इंस्टॉल करें और इसे अपने क्रेडेंशियल्स के साथ कॉन्फ़िगर करें। फिर, आप अपने पसंदीदा IDE में स्थानीय रूप से विकसित करते हुए अपने फंक्शन को टेस्ट करने और कमांड लाइन के माध्यम से अपने परिवर्तनों को डेप्लॉय करने के लिए Lambda CLI का उपयोग कर सकते हैं।

एक अन्य लोकप्रिय विकास विधि Serverless जैसे फ्रेमवर्क के माध्यम से है। Serverless उस बोझिल कॉन्फ़िगरेशन को संभालता है जिससे AWS ग्रस्त है, जिसमें API Gateway सेटअप करना शामिल है यदि आपको अपने फंक्शन के लिए इसकी आवश्यकता है। Serverless लॉगिंग को भी बढ़ाता है, Ruby Gem प्रबंधन को आसान बनाता है, और CI/CD के कॉन्फ़िगरेशन की अनुमति देता है, ताकि आप पाइपलाइनों के आधार पर अपने रिपॉजिटरी से स्वचालित रूप से डेप्लॉय कर सकें।

Serverless या इसी तरह के फ्रेमवर्क का उपयोग किए बिना, Ruby Gems को शामिल करने के लिए कुछ हुप्स से गुजरना पड़ता है। आपको अपने फंक्शन को एक फ़ोल्डर शामिल करने के लिए विस्तारित करना होगा, और फिर अपने रूट डायरेक्टरी में एक .bundle/config फाइल बनानी होगी जिसमें बंडलर को यह बताने के लिए निम्न इनिशियलाइज़ेशन कोड हो कि आपके द्वारा इंस्टॉल किए गए जेम्स कहां रखें:

---
BUNDLE_PATH: "vendor/bundle"

फिर, आप CLI का उपयोग करके bundle add उन जेम्स को जोड़ सकते हैं जिनकी आपको आवश्यकता है और उन्हें सीधे अपने कोड में require कर सकते हैं।

AWS Lambda की सीमाएं

बधाई हो, आपने अभी Ruby में अपना पहला AWS Lambda फंक्शन लिखा है! पहले, Ruby के साथ API चलाने का एकमात्र संभव समाधान अक्सर संपूर्ण Rails ऐप बनाना होता था। अब, आप एक समय में एंडपॉइंट्स बना सकते हैं, पूर्ण एप्लिकेशन के साथ आने वाले सभी ब्लोट को छोड़कर। Lambda माइक्रोसेकंड में उपयोग के लिए बिल करता है, इसलिए यह त्वरित समाधानों के लिए उल्लेखनीय रूप से सस्ता हो सकता है। इसके अलावा, इस क्लाउड पेशकश का लाभ उठाने से हमें कम लागत पर संचालन करने की अनुमति मिलती है लेकिन फिर भी अविश्वसनीय रूप से तेजी से स्केल करते हैं। AWS ही कारण है कि Netflix पीक आवर्स के दौरान बिना लगातार अधिकतम क्षमता वाले सर्वर बैंडविड्थ के लिए भुगतान किए काम करता है।

सभी जीत के बावजूद, AWS Lambda एक सर्व-समाधान नहीं है। यह अपने दम पर API के रूप में कार्य नहीं करेगा और इसकी स्टेट क्षमताओं में सीमित है। Lambda फंक्शन्स 15 मिनट से अधिक नहीं चल सकते, और मेमोरी 6GB तक सीमित है। Lambda फंक्शन्स को टेस्ट करना भी थोड़ा चुनौतीपूर्ण है, क्योंकि आपको अक्सर एक अलग वातावरण में अपने पूरे इन्फ्रास्ट्रक्चर को डुप्लिकेट करना होगा।

यदि आपके पास कोई ऐप या फीचर है जिसे 24/7 चलने की आवश्यकता नहीं है, तो Lambda हो सकता है एक अच्छा फिट हो। यदि आपके फंक्शन को किसी प्रकार की स्टेट बनाए रखने या AWS पारिस्थितिकी तंत्र के बाहर डेटा अपडेट करने की आवश्यकता है, तो Lambda एक अच्छा फिट नहीं है। Lambda 1,000 समवर्ती कनेक्शन पर डिफ़ॉल्ट होता है, इसलिए एक एप्लिकेशन जो लगातार उससे अधिक उपयोग देखता है, Lambda पर बहुत अविश्वसनीय होगा। अनिवार्य रूप से, Lambda का उपयोग छोटे-जीवित इवेंट-ड्रिवन ऑटोमेशन कार्यों के लिए सबसे अच्छा किया जाता है जिनके लिए लगातार स्टेट की आवश्यकता नहीं होती।

Lambda फंक्शन्स एक शक्तिशाली उपकरण हो सकते हैं, खासकर आप जैसे Ruby डेवलपर के हाथों में।

  1. मास्टरिंग Bash फंक्शन्स: शेल स्क्रिप्टिंग में गहरा गोता (भाग VI) मास्टरिंग Bash फंक्शन्स: शेल स्क्रिप्टिंग में गहरा गोता (भाग VI)

    फंक्शन्स किसी भी प्रोग्रामिंग भाषा में महत्वपूर्ण भूमिका निभाते हैं। कई वास्तविक प्रोग्रामिंग भाषाओं की तरह, bash में फंक्शन्स होते हैं जिनका उपयोग सीमित कार्यान्वयन के साथ किया जाता है। फंक्शन्स क्या हैं? प्रोग्रामिंग में, फंक्शन्स एक प्रोग्राम के नामित अनुभाग होते हैं जो एक विशिष्ट कार्य करते हैं

  1. Ruby मेथड्स समझाए गए: आसानी से कस्टम फंक्शन्स बनाएं Ruby मेथड्स समझाए गए: आसानी से कस्टम फंक्शन्स बनाएं

    मेथड्स को कैसे परिभाषित करें Ruby प्रोग्रामिंग भाषा में कई शक्तिशाली बिल्ट-इन मेथड्स हैं जिनका आप उपयोग कर सकते हैं, लेकिन आप अपने खुद के भी बना सकते हैं। कैसे? आप def कीवर्ड का उपयोग करके अपनी खुद की इंस्टेंस मेथड को परिभाषित कर सकते हैं। यहाँ सिंटैक्स है: def gimme_bacon puts Bacon plz. end यहा

  1. Ruby 2.6 में 9 प्रमुख संवर्द्धन का अन्वेषण Ruby 2.6 में 9 प्रमुख संवर्द्धन का अन्वेषण

    Ruby का एक नया संस्करण नई सुविधाओं और प्रदर्शन सुधारों के साथ आ रहा है। क्या आप परिवर्तनों के साथ बने रहना चाहेंगे? आइए एक नज़र डालते हैं! अंतहीन रेंज (Endless Ranges) Ruby 2.5 और पुराने संस्करण पहले से ही अंतहीन रेंज का एक रूप (Float::INFINITY के साथ) का समर्थन करते हैं, लेकिन Ruby 2.6 इसे अगले स्त