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

कुशल सर्वरलेस फंक्शन्स के लिए AWS Lambda पर Ruby का लाभ उठाना

जब कल AWS Lambda पर Ruby सपोर्ट की घोषणा की गई, तो मैं इसके बारे में इतना उत्साहित था कि मुझे इसे तुरंत आज़माना पड़ा। हम Honeybadger पर कुछ समय से Lambda का उपयोग कर रहे हैं, और मैं लंबे समय से अपने फंक्शन्स को Ruby में लिखने में सक्षम होने की लालसा रखता था। नए Ruby सपोर्ट के साथ कुछ घंटे खेलने के बाद, मुझे विश्वास है कि हम Node, Go, और Python के साथ कम समय बिताएंगे। :)

एक त्वरित उदाहरण

जबकि AWS के घोषणा ब्लॉग पोस्ट से आप Ruby को Lambda पर जल्दी से चालू और चला सकते हैं, मैं Serverless फ्रेमवर्क का उपयोग करके अपने Ruby Lambda फंक्शन्स को डेप्लॉय करने का एक उदाहरण साझा करना चाहता था। मैंने पाया है कि यह फ्रेमवर्क Lambda फंक्शन्स के साथ काम करने की झुंझलाहट को दूर करने का शानदार काम करता है। जबकि फ्रेमवर्क का वर्तमान वर्जन (1.34) अभी तक Ruby प्रोजेक्ट्स के लिए टेम्पलेट जनरेशन तैयार नहीं करता है (PR मेरे इसे लिखना शुरू करने से कुछ घंटे पहले मर्ज किया गया था), जनरेटर के बिना शुरू करना काफी आसान है। यहाँ एक सैंपल कॉन्फिग फ़ाइल है जिसका मैं इस वॉकथ्रू के लिए उपयोग करूंगा, जो एक सिंपल फंक्शन है जो S3 ऑब्जेक्ट्स से जुड़े मेटाडेटा के साथ एक DynamoDB टेबल को पॉप्युलेट करेगा जब वे बनाए जाते हैं:

कॉन्फिग के संसाधन सेक्शन के परिणामस्वरूप एक नई DynamoDB टेबल का स्वचालित निर्माण होता है, और नवनिर्मित टेबल का नाम फंक्शन के लिए एक एनवायरनमेंट वेरिएबल में रखा जाता है, जिसका उपयोग हम कोड में करेंगे। फंक्शन एक SNS टॉपिक के लिए SNS इवेंट्स द्वारा ट्रिगर किया जाता है जिसे पहले बनाया गया है। वह SNS टॉपिक S3 बकेट पर PUT इवेंट्स के लिए नोटिफिकेशन प्राप्त करता है, जिसे मैन्युअल रूप से भी बनाया गया है।

यहाँ Ruby कोड है:

कोड बहुत कुछ नहीं करता -- यह SNS इवेंट्स प्राप्त करता है, SNS संदेशों में रिकॉर्ड्स के माध्यम से लूप करता है ताकि प्रत्येक S3 ऑब्जेक्ट के बारे में जानकारी प्राप्त की जा सके जिसे बनाया गया था, S3 ऑब्जेक्ट पर मेटाडेटा प्राप्त करने के लिए एक HEAD रिक्वेस्ट करता है, फिर DynamoDB टेबल में एक आइटम डालता (बनाता या अपडेट करता है)। इस फंक्शन के लिए एकमात्र निर्भरता AWS SDK है, जो रनटाइम एनवायरनमेंट में शामिल है, इसलिए आपको जेमफाइल के बारे में चिंता करने की भी आवश्यकता नहीं है। हालांकि, यदि आपके पास कुछ अतिरिक्त जेम्स हैं जिन्हें आप पार्टी में लाना चाहते हैं, तो यह करना आसान है। आइए देखें कि डेप्लॉयमेंट के बारे में बात करते समय अतिरिक्त जेम्स को कैसे शामिल किया जाए।

डेप्लॉयमेंट

इस कोड को इसकी वर्तमान स्थिति में Lambda पर लाना Serverless फ्रेमवर्क की बदौलत सुपर आसान है:

sls deploy

वह एक कमांड यह सब आपके लिए करेगा:

  • आपके कोड को ज़िप करें
  • ज़िप फ़ाइल को S3 पर रखें
  • फंक्शन को Lambda में डेप्लॉय करें (एनवायरनमेंट वेरिएबल्स और SNS ट्रिगर के साथ पूरा)
  • IAM पॉलिसीज़ बनाएं
  • DynamoDB टेबल बनाएं

एक बार डेप्लॉयमेंट हो जाने पर, बकेट में ऑब्जेक्ट्स बनाने से DynamoDB टेबल में नए आइटम जोड़े जाएंगे।

निर्भरताएं

अपने डेप्लॉयड फंक्शन के साथ अतिरिक्त जेम निर्भरताओं को शामिल करना आसान है -- आपको बस एक जेमफाइल बनाना है, उन जेम्स को जोड़ें जिन्हें आप बंडल करना चाहते हैं, और bundle install --path vendor/bundle चलाएं। यह जेम्स को स्थानीय डायरेक्टरी में बंडल करेगा, और वे आपके कोड के बाकी हिस्सों के साथ ज़िप हो जाएंगे और फंक्शन में जुड़ जाएंगे।

निर्भरताओं के लिए एक चेतावनी, हालांकि, वे जेम्स हैं जिन्हें संकलित करने के लिए किसी प्रकार के C एक्सटेंशन की आवश्यकता होती है। चूंकि आपका विकास एनवायरनमेंट Lambda रनटाइम एनवायरनमेंट से सबसे अधिक संभावना है, आपको उन एक्सटेंशन्स को AWS में काम करने के लिए संकलित करने के लिए थोड़ा और काम करने की आवश्यकता है। Lambci डॉकर इमेजेस के लिए धन्यवाद, हालांकि, और उनके Ruby इमेज के शीर्ष पर मैंने जो डॉकर इमेज बनाई है, यह करना मुश्किल नहीं है। अपनी निर्भरताओं को बंडल करने और उन्हें ठीक से संकलित करने के लिए, बस मेरी डॉकर इमेज चलाएं, जैसे:

docker run --rm -v $(pwd):/var/task stympy/lambda-ruby2.5

यह केवल उपरोक्त बंडलर कमांड लाइन को चलाता है, इसलिए जेम्स vendor/bundle में रखे जाएंगे, deploy कमांड द्वारा बनाई गई ZIP फ़ाइल में शामिल होने के लिए तैयार।

उसके साथ, आप दौड़ के लिए तैयार हैं। मुझे आशा है कि आप Lambda में Ruby चलाने का उतना ही आनंद लेंगे जितना मुझे मिला है। :)

  1. रूबी में AWS Lambda: एंड-टू-एंड बिल्ड, टेस्ट और डिप्लॉय गाइड रूबी में AWS Lambda: एंड-टू-एंड बिल्ड, टेस्ट और डिप्लॉय गाइड

    सॉफ्टवेयर विकसित करना चुनौतीपूर्ण हो सकता है, लेकिन इसे बनाए रखना कहीं अधिक चुनौतीपूर्ण है। रखरखाव में सॉफ्टवेयर पैच और सर्वर रखरखाव शामिल हैं। इस पोस्ट में, हम सर्वर प्रबंधन और रखरखाव पर ध्यान केंद्रित करेंगे। पारंपरिक रूप से, सर्वर ऑन-प्रिमाइसेस थे, जिसका अर्थ है भौतिक हार्डवेयर खरीदना और बनाए रखन

  1. AWS Lambda पर रूबी ऑन Rails डिप्लॉय करना: चरण-दर-चरण मार्गदर्शिका AWS Lambda पर रूबी ऑन Rails डिप्लॉय करना: चरण-दर-चरण मार्गदर्शिका

    सर्वरलेस कंप्यूटिंग सर्वर को प्रबंधित और प्रोविजन करने के काम को क्लाउड प्रोवाइडर पर उतारने में मदद करता है और अधिकांश प्रौद्योगिकी टीमों के लिए तेजी से एक चीज बन रहा है। AWS Lambda एक प्रकार की सर्वरलेस तकनीक है जिसका उपयोग कई प्रौद्योगिकी टीमों द्वारा किया जाता है। AWS Lambda अधिकांश मुख्य प्रोग्र

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

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