"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > AWS क्लाउड के लिए एक सरल SaaS का टेक स्टैक

AWS क्लाउड के लिए एक सरल SaaS का टेक स्टैक

2024-11-08 को प्रकाशित
ब्राउज़ करें:335

The Tech Stack of a Simple SaaS for AWS Cloud

परिचय


नोट 1: यहां होस्ट किया गया इंटरैक्टिव डेमो है: डेमो.saasconstruct.com

नोट 2: प्रत्येक SaaS सेटअप के लिए मेरा मासिक बिल 3-5$ प्रति माह है, और यह ज्यादातर सीआई/सीडी लागत है।

नोट 3: टेम्पलेट यहां है: saasconstruct.com।


मैंने AWS पर कई AI PoCs और MVP किए हैं, और यह हमेशा समान चीजें होती हैं:

  • फ्रंटएंड को कहीं होस्ट करें
  • बैकएंड पर कॉल करें
  • बैकएंड बाइनरी स्टोरेज/डेटाबेस से डेटा प्राप्त/अपडेट करता है
  • बैकएंड कुछ एआई तर्क करता है या किसी अन्य सेवा को कॉल करता है और परिणाम वापस भेजता है
  • दो अलग-अलग AWS खाते हैं: dev और prod
  • तैनाती के लिए सीआई/सीडी
  • क्लाउड संसाधन घोषणा के लिए इन्फ्रास्ट्रक्चर-ए-कोड

इसलिए, मैंने सोचा कि मैं AWS पर ऐसी चीज़ों को बूटस्ट्रैप करने के लिए एक सरल समाधान बनाऊंगा। और इसके बारे में एक ब्लॉग पोस्ट लिखें।

मैंने कुछ सुविधाएँ जोड़ने का निर्णय लिया, जैसे स्ट्राइप भुगतान (और यदि आप बिक्री कर/वैट के बारे में चिंता नहीं करना चाहते हैं तो लेमनस्क्वीज़ी भुगतान) और भुगतान प्रबंधन, प्रमाणीकरण, ट्रैफ़िक अलार्म, और अन्य। मैंने यह भी सोचा कि इसे कॉन्फ़िगर करने योग्य बनाने की आवश्यकता है, जैसे लंबे कार्यों के लिए एपीआई गेटवे और एडब्ल्यूएस लैम्ब्डा को ईएलबी और ईसीएस से बदलना।

फ़्रंट एंड

मैंने शुरुआत के लिए आम तौर पर घोषित सबसे आसान ढांचा चुना। यह Vue है, और, जहां तक ​​मैं समझता हूं, वहां दूसरा सबसे लोकप्रिय ढांचा है। मैंने इसे इसलिए चुना क्योंकि न केवल यह सबसे आसान है, बल्कि मुझे इसके साथ कुछ अनुभव भी है।

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

फ्रंटएंड होस्टिंग

दो विकल्प हैं:

  • एस3 और क्लाउडफ्रंट (सीडीएन)
  • AWS एम्प्लीफाई होस्टिंग, जो S3 और CloudFront के चारों ओर एक आवरण है, जिसके साथ काम करना आसान है लेकिन कम कॉन्फ़िगर करने योग्य है। उदाहरण के लिए, आप क्लाउडफ्रंट वितरण के साथ कुछ नहीं कर सकते, क्योंकि यह दिखाई नहीं देता है। आप रीडायरेक्ट के अलावा अपने एप्लिकेशन को जियो-ब्लॉक भी नहीं कर सकते।

मैं फ्रंटएंड होस्टिंग समाधानों में AWS के प्राथमिक फोकस के रूप में एम्प्लीफाई होस्टिंग के साथ गया था और क्योंकि इसे सेट करना, डोमेन संलग्न करना आदि आसान है।

चूँकि यह 'पे-एज़-यू-गो' आधार है, इसलिए मैंने एक ट्रैफ़िक अलार्म स्थापित किया है: यदि प्रति 10 सेकंड में एक निश्चित संख्या से अधिक हिट होती है, तो मुझे एक अधिसूचना मिलती है।

बैकएंड

बैकएंड एपीआई गेटवे है, जो दर सीमित करता है, और एडब्ल्यूएस लैम्ब्डा (पायथन), जो व्यवसाय और सामान्य तर्क करता है:

  • यह जांचा जा रहा है कि उपयोगकर्ता प्रमाणित है या नहीं
  • भुगतान संसाधित करना और सदस्यता प्रबंधित करना (ग्राहक पोर्टल)
  • ईमेल भेजा जा रहा है
  • वगैरह।

मेरे पास एक और AWS लैम्ब्डा फ़ंक्शन भी है जो कॉग्निटो में साइन अप करने के बाद डेटाबेस में एक उपयोगकर्ता बनाता है।

साझा उपयोगिताएँ हैं जहाँ मैंने कुछ साझा कार्यक्षमताएँ रखी हैं, उदाहरण के लिए, ईमेल करना। इसके अलावा, लॉगिंग कार्यक्षमता, उदाहरण के लिए, यदि कोई भुगतान त्रुटि होती है तो मुझे एक ईमेल भेजा जाता है।

प्रमाणीकरण

प्रमाणीकरण कठिन है, मैं जानता हूं, और मैं तृतीय-पक्ष सेवा का उपयोग नहीं करना चाहता था। इसलिए मैं AWS Cognito के साथ रहा। यह काफी सस्ता है।

आप कह सकते हैं, बस AWS Amplify Auth (जो AWS कॉग्निटो के चारों ओर एक आवरण है) का उपयोग करें, लेकिन मुझे इससे कुछ समस्याएं थीं। मैंने Reddit पर एक पोस्ट भी लिखी:

प्रमाणीकरण के लिए एम्प्लीफाई के साथ मेरी समस्याओं की सूची

और कुछ निराश उपयोगकर्ता की और भी बड़ी सूची वाली एक और पोस्ट है (हालाँकि यह एक पुरानी पोस्ट है)।

यहाँ

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

तो मैंने जो किया वह एक हाइब्रिड दृष्टिकोण है (जो Reddit के अनुसार कुछ हद तक लोकप्रिय है): AWS Amplify JS लाइब्रेरी आपको अपने द्वारा बनाए गए क्लाउड संसाधनों को आयात करने की अनुमति देता है, जैसे उपयोगकर्ता पूल, इसलिए मैंने उन्हें बनाया सीडीके के साथ और फिर प्रमाणीकरण के लिए एम्प्लीफाई जेएस लाइब्रेरी का उपयोग किया।

इस मामले में, मैं हमेशा जो कुछ भी चाहता हूं उसे बदल सकता हूं, क्लाउड संसाधनों को स्वैप कर सकता हूं (उदाहरण के लिए, अगर मुझे क्लाउडफ्रंट वितरण तक पहुंच की आवश्यकता है तो मैं एम्प्लीफाई होस्टिंग से क्लाउडफ्रंट एस3 पर जा सकता हूं)।

ईमेल

AWS SES। यह मुख्य AWS ईमेल सेवा है। यह सब कुछ भेजता है, जिसमें कॉग्निटो प्रमाणीकरण ईमेल, संपर्क फ़ॉर्म से अनुरोध आदि शामिल हैं। केवल एक चीज जिसे आपको समझने की आवश्यकता है वह यह है कि आपके डेव एडब्ल्यूएस खाते में, आपको भेजने में सक्षम होने के लिए पहले सत्यापित पहचान बनाने की आवश्यकता होगी (मैंने इसे इसके माध्यम से स्वचालित किया है) IaC), और उत्पादन AWS खाते में, आपको उत्पादन पहुंच का अनुरोध करना होगा (जो कि केवल कुछ क्लिक है)।

AWS SES का उपयोग करके, ईमेल सूचनाएं निम्नलिखित परिदृश्यों में भेजी जाती हैं:

  • जब भुगतान त्रुटियां होती हैं।
  • वेब ट्रैफ़िक में बढ़ोतरी के मामले में।
  • यदि सीआई/सीडी रोलआउट विफल हो जाता है।
  • अन्य स्थितियों के लिए, जैसे प्रमाणीकरण ईमेल और संपर्क फ़ॉर्म से पूछताछ आदि।

भंडारण

DynamoDB एक डेटाबेस के रूप में। आसान, तेज़ और प्रबंधित। हां, मुझे एक्सेस पैटर्न के बारे में सोचना पड़ा, लेकिन आम तौर पर, इसके साथ काम करना अच्छा होता है और सत्यापन/निर्माण करते समय मुझे कुछ भी खर्च नहीं करना पड़ता है। चूंकि मैं कई उत्पादों पर काम करने की योजना बना रहा हूं और उन्हें अलग रखना चाहता हूं, इसलिए मैं प्रति प्रोजेक्ट डेव और प्रोडक्ट खातों में आरडीएस/डॉक्यूमेंटडीबी नहीं डाल सकता (इसकी लागत बहुत अधिक है)।

भुगतान

मैंने दो भुगतान प्रणालियाँ जोड़ीं, और यह चुनना संभव है कि किसका उपयोग किया जाए क्योंकि वे समान रूप से काम करती हैं:

  • स्ट्राइप लोकप्रिय और एकीकृत करने में आसान, सादा और सरल है। जब कोई उपयोगकर्ता कोई उत्पाद खरीदता है, तो मैं स्ट्राइप चेकआउट का उपयोग करता हूं, और सदस्यता प्रबंधित करने के लिए, मैं स्ट्राइप ग्राहक पोर्टल का उपयोग करता हूं।
  • LemonSqueezy स्ट्राइप के समान है, लेकिन यह एक मर्चेंट ऑफ रिकॉर्ड भी है, जिसका अर्थ है कि यह आपके लिए बिक्री कर/वैट कर को संभालता है। इसमें सदस्यता खरीदने के लिए चेकआउट और उन्हें प्रबंधित करने के लिए एक ग्राहक पोर्टल भी है।

मैंने स्ट्राइप/लेमनस्क्वीज़ी वेबहुक के लिए कुछ अंतिम बिंदु लिखे हैं, जो सभी तर्कों को संभालते हैं।

कोड के रूप में बुनियादी ढाँचा

तो चुनने के लिए बहुत सारी चीज़ें हैं:

  • टेराफॉर्म या ओपनटोफू जैसा कुछ (पूरी तरह से ओपन-सोर्स विकल्प जो टेराफॉर्म पर आधारित है)
  • पुलुमी
  • सीडीके
  • बादल निर्माण

मैंने AWS CDK चुना, और यहां मेरे कारण हैं:

  • इसके साथ काम करना आसान है
  • यह काफी लोकप्रिय और परिपक्व है
  • मेरी राय में, यह AWS क्लाउडफॉर्मेशन से कहीं बेहतर है
  • यह एक AWS लाइब्रेरी है, और मैं AWS का उपयोग करता हूं
  • मैं इसे पायथन, टाइपस्क्रिप्ट या अन्य भाषाओं में लिख सकता हूं। चूंकि मैं बैकएंड पर पायथन और फ्रंटएंड पर टाइपस्क्रिप्ट का उपयोग करता हूं, इसलिए यह एक अच्छा विकल्प है।

मैंने टेराफॉर्म को न चुनने का कारण यह बताया कि सीडीके आसान है; यह सरल तरीके से संसाधन बनाने की अनुमति देता है, कम से कम मेरी राय में। मुझे ओओपी पसंद है और मैं उसी के अनुसार अपना क्लाउड इंफ्रास्ट्रक्चर बनाने का प्रयास करता हूं। एक बड़ा लाभ यह है कि सीआई/सीडी (सीडीके पाइपलाइन) शामिल है, इसलिए मुझे इसका आविष्कार करने की ज़रूरत नहीं है।

सीआई/सीडी

मैंने सीडीके पाइपलाइन को चुना क्योंकि यह फिर से आसान है। बस पाइपलाइन को GitHub रिपॉजिटरी से कनेक्ट करें, और आप जाने के लिए तैयार हैं। विकास शाखा को गिट पुश -> इसे विकास खाते में ले जाया जाएगा। मुख्य (या पुल अनुरोध) पर गिट पुश -> उत्पादन रोलआउट।

अलार्म और दर सीमाएँ

मैंने एपीआई गेटवे के माध्यम से स्पैम होने से रोकने के लिए रेट लिमिटिंग की स्थापना की है। मैंने दो क्लाउडवॉच अलार्म:

स्थापित किए हैं
  • जब होस्ट की गई वेबसाइट अनुरोधों के साथ स्पैम हो रही हो तो मुझे सचेत करने के लिए।
  • जब एपीआई गेटवे अनुरोधों के साथ स्पैम हो रहा हो तो मुझे सचेत करने के लिए।

मैंने बिलिंग अलार्म भी स्थापित किया है ताकि मुझे सूचित किया जा सके कि क्या मैं बहुत अधिक खर्च करने वाला हूं।

लॉगिंग

CloudWatch इवेंट लॉग करता है, आप उन्हें AWS कंसोल में और सीधे IDE में एक्सटेंशन के माध्यम से देख सकते हैं।

विकल्प OpenAI (GPT मॉडल के साथ) या AWS बेडरॉक (क्लाउड मॉडल के साथ) का उपयोग करने के बीच था। यह निर्णय चुनौतीपूर्ण था क्योंकि, जबकि क्लाउड के साथ AWS बेडरॉक AWS के साथ आसानी से एकीकृत हो जाता है, OpenAI का अधिक सामान्यतः उपयोग किया जाता है। दोनों कंपनियां शीर्ष स्तरीय एआई मॉडल पेश करती हैं। अभी के लिए, मैंने AWS Badrock के साथ बने रहना चुना है। यह भविष्य में बदल सकता है, लेकिन अभी के लिए, मैं सरलता की सराहना करता हूँ। वेक्टर डेटाबेस के लिए, मैं पाइनकोन का उपयोग करता हूं, जिसमें सर्वर रहित इंडेक्स हैं।

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

प्रोग्रामिंग भाषा

मैं शुरू में एक जावा डेवलपर था, लेकिन फिर एक पायथन डेवलपर बन गया क्योंकि मैंने मशीन लर्निंग और डीप लर्निंग सेवाएं विकसित कीं। उस क्षेत्र में अधिकांश पुस्तकालय पायथन में विकसित किए गए हैं या पायथन रैपर की विशेषता वाले हैं। इसके अलावा, पायथन AWS के साथ सहजता से एकीकृत होता है, चाहे वह AWS लैम्ब्डा में हो (उदाहरण के लिए, AWS लैम्ब्डा पॉवरटूल्स लाइब्रेरी का उपयोग करके) या CDK में। तो अंत में, बैकएंड और क्लाउड इंफ्रास्ट्रक्चर (सीडीके के माध्यम से) दोनों को पायथन में लागू किया जाता है।

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

एडब्ल्यूएस बिल

चूंकि मेरे पास अधिक ट्रैफ़िक लोड नहीं है, इसलिए मेरी AWS लागत बहुत कम है, आमतौर पर $3-5 प्रति माह, मुख्य रूप से CI/CD खर्चों के कारण।

सेटअप में एक CDN (एम्प्लीफाई होस्टिंग द्वारा प्रदान किया गया) और AWS लैम्ब्डा के भीतर एक छोटी कैशिंग परत शामिल है। इसके अतिरिक्त, कुछ सेवाएँ AWS फ्री टियर के अंतर्गत आती हैं, जिससे मेरी लागत और कम हो जाती है।

जैसे-जैसे उत्पाद बढ़ता है और अधिक उपयोगकर्ता प्राप्त होते हैं, मुझे प्रावधानित DynamoDB पर स्विच करके और DAX (DynamoDB Accelerator) लागू करके संसाधनों को अनुकूलित करने की आवश्यकता हो सकती है। हालाँकि, अभी के लिए, यह सेटअप पूरी तरह से काम करता है।

निष्कर्ष

यह समाधान मेरी वर्तमान जरूरतों को कुशलता से पूरा करता है।

मैंने SaaSConstruct पर अपने AWS टेम्पलेट में इस संपूर्ण तकनीकी स्टैक को बॉयलरप्लेट (जिसे मैं सक्रिय रूप से विकसित और अद्यतन करता हूं) के रूप में शामिल किया है।

मैं अतिरिक्त सुविधाओं की खोज जारी रखूंगा जिन्हें इसकी क्षमताओं को बढ़ाने के लिए इस सेटअप में शामिल किया जा सकता है...

विज्ञप्ति वक्तव्य यह लेख यहां पुन: प्रस्तुत किया गया है: https://dev.to/server_kota/the-tech-stack-of-a-simple-saas-for-aws-cloud-4lhm?1 यदि कोई उल्लंघन है, तो कृपया स्टडी_गोलंग@163 से संपर्क करें इसे हटाने के लिए .com
नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3