सर्वर रहित कंप्यूटिंग एक क्लाउड प्रदाता को सर्वर के प्रबंधन और प्रावधान के काम को उतारने में मदद करती है और तेजी से अधिकांश प्रौद्योगिकी टीमों के लिए एक चीज बन रही है। AWS लैम्ब्डा एक प्रकार की सर्वर रहित तकनीक है जिसका उपयोग कई तकनीकी टीमों द्वारा किया जाता है। AWS लैम्ब्डा NodeJS, Java, Python और Ruby सहित अधिकांश मुख्य प्रोग्रामिंग भाषाओं का समर्थन करता है। हालांकि कोर प्रोग्रामिंग भाषाओं का समर्थन किया जाता है, ऐसे समय हो सकते हैं जब आप सर्वर रहित कार्यों को उन विशेषताओं पर निर्भर करना चाहते हैं जो इन भाषाओं के साथ निर्मित ढांचे का हिस्सा हैं। इस पोस्ट में, हम यह पता लगाएंगे कि AWS लैम्ब्डा में रेल एप्लिकेशन कैसे चलाया जाता है। यह पोस्ट मानता है कि आप सर्वर रहित कंप्यूटिंग और AWS लैम्ब्डा से परिचित हैं और आप यह पता लगाना चाहते हैं कि AWS लैम्ब्डा पर रेल कैसे चलाना है। लैम्बी नामक एक उपकरण एडब्ल्यूएस लैम्ब्डा में रेल चलाना लगभग आसान बना देता है, और हम कवर करेंगे कि लैम्बी का उपयोग लैम्ब्डा को रेल बनाने और तैनात करने के लिए कैसे किया जा सकता है। मैं इसे "रेल ऑन लैम्ब्डा" कहूंगा।
लैम्बी क्या है?
लैम्ब्डा आपको अपने सर्वर को बनाए रखने के बिना अपने कोड को तैनात करने और इसे किसी भी पैमाने पर चलाने देता है। आप बस अपना कोड AWS पर अपलोड करें। जब भी यह किसी ईवेंट द्वारा ट्रिगर होता है, तो इसे चलाया जाएगा, जैसे कोई उपयोगकर्ता वेब पेज का अनुरोध करने के लिए कतारबद्ध हो रहा है।
लैम्ब्डा को उम्मीद है कि आपका कोड एक निश्चित तरीके से संरचित होगा। इसलिए, यदि आप इसका उपयोग किसी रेल ऐप की तरह होस्ट करने के लिए करना चाहते हैं, तो आपको लैम्बी जैसे एडेप्टर का उपयोग करना होगा।
लैम्बी एक साधारण रैक अडैप्टर है। यह आपके रेल ऐप और एडब्ल्यूएस लैम्ब्डा के बीच बैठता है और विभिन्न एडब्ल्यूएस स्रोतों से लैम्ब्डा आमंत्रण घटनाओं को परिवर्तित करता है, जैसे एपीआई गेटवे या एप्लिकेशन लोड बैलेंसर, रैक इवेंट में जिसे आपका रेल ऐप सुन सकता है।
रेल लैम्ब्डा आर्किटेक्चर स्रोत:लैम्बी डॉक्स
लैम्बी, लैम्ब्डा के लिए एक रेल ऐप बनाने, पैकेज करने और तैनात करने के लिए डॉकर और एडब्ल्यूएस एसएएम का लाभ उठाता है।
<ब्लॉकक्वॉट>AWS सर्वर रहित एप्लिकेशन मॉडल (AWS SAM) एक ओपन-सोर्स फ्रेमवर्क है जिसका उपयोग आप AWS पर सर्वर रहित एप्लिकेशन बनाने के लिए कर सकते हैं। सर्वर रहित एप्लिकेशन लैम्ब्डा फ़ंक्शंस, इवेंट सोर्स और अन्य संसाधनों का एक संयोजन है जो कार्यों को करने के लिए एक साथ काम करते हैं। ध्यान दें कि सर्वर रहित एप्लिकेशन केवल लैम्ब्डा फ़ंक्शन से अधिक है—इसमें अतिरिक्त संसाधन शामिल हो सकते हैं, जैसे कि एपीआई, डेटाबेस और ईवेंट स्रोत मैपिंग।-- AWS SAM दस्तावेज़ीकरण
लैम्बी के साथ शुरुआत करने के लिए, हमें डॉकर इंस्टॉल करना होगा, एडब्ल्यूएस अकाउंट बनाना होगा और आपके एडब्ल्यूएस अकाउंट में प्रोग्रामेटिक एक्सेस को कॉन्फ़िगर करना होगा।
डॉकर इंस्टॉल करना
AWS SAM लैम्ब्डा रनटाइम वातावरण का अनुकरण करने के लिए डॉकर का उपयोग करता है। डॉकर एडब्ल्यूएस सीएलआई और एसएएम सीएलआई को स्थापित करने की जटिलता को भी कम करता है, जो दोनों पायथन पर निर्भर हैं। यदि आपके पास पहले से डॉकर स्थापित नहीं है, तो डॉकर स्थापित करना बहुत आसान है, क्योंकि आप इसे आधिकारिक वेबसाइट से डाउनलोड और इंस्टॉल कर सकते हैं। यह जांचने के लिए कि क्या डॉकर स्थापित किया गया है, अपने टर्मिनल में नीचे दी गई कमांड चलाएँ। यदि डॉकर स्थापित है, तो आप एक संस्करण संख्या देखेंगे और नीचे दिखाए गए के समान निर्माण करेंगे:
$ docker --version
डॉकर स्थापना पुष्टिकरण
एडब्ल्यूएस खाता सेट करना
यदि आपके पास पहले से AWS खाता नहीं है, तो आपको एक सेट अप करना होगा। अमेज़ॅन की एक फ्री-टियर योजना है, जो लैम्ब्डा में रेल ऐप बनाने और परीक्षण करने के साथ-साथ एडब्ल्यूएस खाता बनाने और सक्रिय करने के तरीके पर एक गाइड भी शामिल करेगी। अपना खाता सेट करने के लिए मार्गदर्शिका का पालन करें।
AWS प्रोग्रामेटिक एक्सेस सेट करना
अब जब आपके पास AWS खाता है, तो आपको अपने खाते की AWS एक्सेस कुंजी आईडी और AWS गुप्त एक्सेस कुंजी का उपयोग करके प्रोग्रामेटिक एक्सेस को कॉन्फ़िगर करने की आवश्यकता होगी। यदि आपके पास ये पहले से नहीं हैं, तो आप निम्न कार्य करके इन्हें बना सकते हैं।
- अपने एडब्ल्यूएस खाते में लॉगिन करें।
- अपने एडब्ल्यूएस प्रबंधन कंसोल में, टूलबार में "सेवाएं" पर क्लिक करें।
- खोजें और "IAM" चुनें।
- बाईं ओर के नेविगेशन से "उपयोगकर्ता" पर क्लिक करें।
- यदि "IAM" पहले से मौजूद है, तो अपना उपयोगकर्ता नाम चुनें।
- "सुरक्षा क्रेडेंशियल" टैब पर क्लिक करें।
- "एक्सेस कुंजी बनाएं" बटन क्लिक करें।
- अपनी कुंजी आईडी और गुप्त को सुरक्षित स्थान पर कॉपी करें।
- यदि कोई "IAM" उपयोगकर्ता मौजूद नहीं है,
- "उपयोगकर्ता जोड़ें" पर क्लिक करें।
- उपयोगकर्ता नाम जोड़ें और "प्रोग्रामेटिक एक्सेस" विकल्प चुनें।
- प्रक्रिया को पूरा करने के लिए संकेतों का पालन करें।
आइए सीएलआई प्रोग्रामेटिक एक्सेस को कॉन्फ़िगर करने के लिए डॉकर का उपयोग करें। नीचे दिए गए कोड को अपने टर्मिनल पर कॉपी करें। आपको एडब्ल्यूएस एक्सेस कुंजी आईडी और एडब्ल्यूएस सीक्रेट एक्सेस कुंजी के लिए प्रेरित किया जाएगा; पिछले चरण की कुंजियाँ दर्ज करें।
$ docker run \
--interactive \
--tty \
--rm \
--volume "${HOME}/.aws:/root/.aws" \
"amazon/aws-cli" \
configure
नई रेल एप्लिकेशन बनाना
हम अपने रेल प्रोजेक्ट को बूटस्ट्रैप करने के लिए SAM CLI का उपयोग करेंगे। एडब्ल्यूएस एसएएम सीएलआई आपको गिटहब रिपोजिटरी टेम्पलेट से एक नई परियोजना शुरू करने की अनुमति देता है, जिसे आमतौर पर कुकीकटर कहा जाता है। एक नया SAM प्रोजेक्ट शुरू करने के लिए, हम sam init
. चलाने के लिए एक डॉकर कंटेनर का उपयोग करेंगे , जो आपके लिए एक नया प्रोजेक्ट फ़ोल्डर किकस्टार्ट करने के लिए लैम्बी कुकीकटर प्रोजेक्ट टेम्पलेट का लाभ उठाता है। आपको प्रोजेक्ट का नाम देने के लिए कहा जाएगा, लेकिन मैंने "rails_on_lambda" का इस्तेमाल किया है।
$ docker run \
--rm \
--interactive \
--volume "${PWD}:/var/task:delegated" \
lambci/lambda:build-ruby2.7 \
sam init --location "gh:customink/lamby-cookiecutter"
आपके नए एसएएम प्रोजेक्ट फ़ोल्डर में लैम्ब्डा प्रोजेक्ट पर आपके नए रेल के लिए आवश्यक सब कुछ है। उच्च स्तर से, आपके नए प्रोजेक्ट में जो जेनरेट किया गया है वह यहां दिया गया है।
- Dockerfile और docker-compose दोनों का उपयोग करके Docker सेटअप।
- एक कार्यशील रूबी परियोजना जिसमें एक lib निर्देशिका, बंडलर और परीक्षण हैं।
- एक सैम
template.yaml
फ़ाइल।
सेट अप और डिप्लॉय करें
अब जब हमने एक नया रेल ऐप बना लिया है, तो हमें इसे लैम्ब्डा परिनियोजन के लिए सेट करने की आवश्यकता है। नीचे दिए गए दो आदेश स्क्रिप्ट चलाते हैं जो डॉकर विकास छवि और बंडल रत्न बनाते हैं। bootstrap
कमांड एक बार की प्रक्रिया है, जबकि setup
हर बार जब आप एक नई परियोजना निर्भरता जोड़ते हैं तो कमांड चलाया जाएगा।
$ ./bin/bootstrap
$ ./bin/setup
पिछले आदेशों के सफल निष्पादन पर, आपकी परियोजना एसएएम के माध्यम से परिनियोजन के लिए तैयार है। परिनियोजन एक लैम्बी स्क्रिप्ट का उपयोग करके किया जाता है जो आपके रेल एप्लिकेशन को बनाता है, पैकेज करता है और तैनात करता है।
./bin/deploy
deploy
कमांड एक लैम्बी बिल्ड स्क्रिप्ट चलाता है जो आपकी वर्तमान प्रोजेक्ट निर्देशिका को स्थानीय .lamby
. में डुप्लिकेट करती है निर्देशिका और आपके एप्लिकेशन को परिनियोजित करने के लिए आवश्यक तीन SAM कमांड चलाता है।
- सैम बिल्ड
- सैम पैकेज
- सैम परिनियोजन
यदि स्क्रिप्ट अपेक्षित रूप से चलती हैं, तो आपको SAM के CloudFormation परिनियोजन कार्यों के लिए आउटपुट कुछ इस तरह से समाप्त होते हुए देखना चाहिए:
आपको टर्मिनल आउटपुट के हिस्से के रूप में एक URL भी देखना चाहिए। यूआरएल एक एपीआई गेटवे HTTP एपीआई एंडपॉइंट है जो रैक का उपयोग करके आपके रेल एप्लिकेशन को आमंत्रित करता है। इसे अपने ब्राउज़र में खोलें, और आपको परिचित "वेलकम टू रेल्स" स्क्रीन दिखाई देगी:
एडब्ल्यूएस कंसोल से अपने रेल ऐप का आह्वान करना
हम लैम्ब्डा डैशबोर्ड से अपने ऐप का परीक्षण भी कर सकते हैं। एडब्ल्यूएस प्रबंधन कंसोल में लॉग इन करें:
- टूलबार में "सेवाएं" पर क्लिक करें।
- खोज सेवाएं फ़ील्ड में "लैम्ब्डा" दर्ज करें, चुनें।
इस पेज से, आप अपना नया तैनात "RailsOnLambda" प्रोजेक्ट देखेंगे।
- "RailsOnLambda" फ़ंक्शन खोलें।
- ऊपरी दाईं ओर "परीक्षण" बटन पर क्लिक करें।
- "अमेज़ॅन एपीआई गेटवे प्रॉक्सी" ईवेंट टेम्प्लेट का उपयोग करें (संबंधित फ़ील्ड को अपडेट करने के लिए नीचे दिए गए JSON टेम्प्लेट का उपयोग करें)।
- इसे "RailsOnLambdaTest" का नाम दें।
- "बनाएं" बटन पर क्लिक करें।
- अपने लैम्ब्डा का आह्वान करने के लिए "परीक्षण" बटन पर क्लिक करें।
{
"body": "",
"path": "/",
"httpMethod": "GET",
"queryStringParameters": {},
"multiValueQueryStringParameters": {},
"pathParameters": {
"proxy": "/"
},
"stageVariables": {},
"requestContext": {
"path": "/",
"httpMethod": "GET"
}
}
यह मानते हुए कि सब कुछ सुचारू रूप से चला, आपको नीचे दिए गए आउटपुट के समान आउटपुट देखना चाहिए।
बधाई हो! अब आपके पास लैम्ब्डा पर रेल हैं, हालांकि लैम्ब्डा पर एक रेल एप्लिकेशन अभी भी एक सामान्य रेल एप्लिकेशन है। फर्क सिर्फ इतना है कि लैम्बी रत्न एपीआई गेटवे एचटीटीपी एपीआई, एपीआई गेटवे रेस्ट एपीआई, और एप्लिकेशन लोड बैलेंसर टारगेट इवेंट को रैक-संगत env
में कनवर्ट करता है। वस्तुओं और उन्हें रेल को भेजता है। रेल तब घटना के परिणाम को आपके प्रोजेक्ट में परिभाषित लैम्ब्डा हैंडलर को वापस भेज देता है।
def handler(event:, context:)
Lamby.handler $app, event, context
end
लैम्ब्डा पर रेल का प्रदर्शन कितना अच्छा है?
लैम्ब्डा पर रेल तैनाती के बाद पहले अनुरोध के लिए धीमी प्रतिक्रिया समय का अनुभव करेगी। इस घटना को "कोल्ड स्टार्ट" कहा जाता है। हालांकि, पहले अनुरोध के बाद, प्रदर्शन उत्कृष्ट है और ईसी 2 को पूरा या हरा सकता है। यदि पहले अनुरोध के बाद कोई अनुरोध नहीं है, तो रेल ऐप की सेवा करने वाले सर्वर संसाधन लगभग 5-7 मिनट के बाद अन्य लैम्ब्डा कार्यों को गतिशील रूप से असाइन किए जाएंगे। यह नए अनुरोधों के लिए एक ठंडी शुरुआत का कारण बनेगा। ठंडी शुरुआत से बचने और रेल ऐप को गर्म रखने के कुछ तरीके हैं।
CloudWatch टाइमर
आप अपने रेल को लैम्ब्डा फ़ंक्शन पर गर्म रखने के लिए हर मिनट पिंग करने के लिए एक समय निर्धारित कर सकते हैं। AWS कंसोल खोलें और CloudWatch खोजें। वहां से इवेंट में जाएं और क्रिएट रूल पर क्लिक करें। ईवेंट प्रकार को शेड्यूल पर सेट करें, और हम इस ईवेंट को हर 1 मिनट में चलाएंगे।
प्रावधानित समरूपता
प्रोविजन्ड कंसीडर एक एडब्ल्यूएस फीचर है जो आपको एडब्ल्यूएस को हर समय एक अप्रयुक्त कंटेनर को चालू रखने के लिए टॉगल करने और अधिक भुगतान करने के लिए सहमत होने की अनुमति देता है। रेल ऐप के लिए प्रावधानित मुद्रा को कॉन्फ़िगर करने के लिए, अपना एडब्ल्यूएस कंसोल खोलें और लैम्ब्डा सेवा पृष्ठ खोलें।
- एक फ़ंक्शन चुनें (रेल-ऑन-लैम्ब्डा)।
- कॉन्फ़िगरेशन चुनें और फिर Concurrency चुनें।
- प्रावधानित समवर्ती विन्यास के तहत, विन्यास जोड़ें पर क्लिक करें।
- उपनाम या संस्करण चुनें।
- आवंटित करने के लिए प्रावधानित समवर्ती (उदा., 500) की राशि दर्ज करें।
- अपने परिवर्तन सहेजें। निम्न आदेश का उपयोग करके एडब्ल्यूएस सीएलआई के माध्यम से प्रावधानित मुद्रा को भी कॉन्फ़िगर किया जा सकता है:
aws lambda put-provisioned-concurrency-config --function-name my-function \
--qualifier BLUE --provisioned-concurrent-executions 100
AWS पर लैम्ब्डा की कीमत क्या है?
एडब्ल्यूएस लैम्ब्डा के साथ, आप केवल वही भुगतान करते हैं जो आप उपयोग करते हैं। लागत अनुरोधों की संख्या और कोड निष्पादन की अवधि का एक संयोजन है। अवधि मूल्य आपके द्वारा अपने फ़ंक्शन के लिए आवंटित मेमोरी की मात्रा पर निर्भर करता है। मेमोरी का आकार 128 एमबी से लेकर 10,240 एमबी तक होता है, और आप अपनी आवश्यकताओं के आधार पर अपने फ़ंक्शन के लिए कितनी भी मेमोरी आवंटित कर सकते हैं। नीचे एक चार्ट है जो अलग-अलग समय में लैम्ब्डा फ़ंक्शन के 100,000 इनवोकेशन चलाने की लागत दिखाता है।
लैम्ब्डा लागत
जब आपको लैम्ब्डा पर रेल नहीं चलानी चाहिए
हमने देखा है कि हम एडब्ल्यूएस लैम्ब्डा पर एक रेल ऐप चला सकते हैं, लेकिन क्या हर रेल एप्लिकेशन लैम्ब्डा पर चलना चाहिए? रेल मानता है कि आपका एप्लिकेशन पारंपरिक सर्वर पर चल रहा है और सर्वर रहित नहीं है। पारंपरिक रेल सर्वर ऐप में आसानी से काम करने वाले कुछ ऑपरेशन सर्वर रहित काम नहीं कर सकते हैं। उदाहरण के लिए, फ़ाइल या छवि अपलोड लैम्ब्डा ऐप पर रेल में काम नहीं करेंगे क्योंकि ऐप के पास लगातार फाइल सिस्टम तक पहुंच नहीं है। साथ ही, WebSocket संचार लैम्ब्डा पर काम नहीं करेगा क्योंकि जब कोई अनुरोध नहीं होता है तो आपका सर्वर मौजूद नहीं होता है।
निष्कर्ष
हमने केवल यह दिखाया है कि मूल रेल एप्लिकेशन को कैसे तैनात किया जाए, लेकिन बड़े अनुप्रयोगों के लिए भी यही प्रक्रिया अपनाई जाती है। नियंत्रकों और मार्गों को जोड़ने और कंसोल से या पोस्टमैन और किसी भी अन्य HTTP क्लाइंट के माध्यम से परीक्षण करने के लिए स्वतंत्र महसूस करें।