
– परिचय: API तैनात करने के लिए SAM का उपयोग क्यों करें?
– पूर्वापेक्षाएँ: SAM CLI स्थापित करें
– चरण 1: SAM आरंभ करें
– चरण 2: API एंडपॉइंट को परिभाषित करें
– चरण 3: स्थानीय स्तर पर निर्माण और परीक्षण करें
– चरण 4: एपीआई तैनात करें
– चरण 5: गिटहब क्रियाओं के साथ CI / CD
- निष्कर्ष
AWS सर्वरलेस एप्लिकेशन मॉडल (SAM) का उपयोग करके API तैनात करना क्लाउड-आधारित अनुप्रयोगों के लिए एक कुशल और स्केलेबल दृष्टिकोण है।
यह बुनियादी ढांचे के प्रबंधन को सरल बनाता है, अंतर्निहित SSL/TLS समर्थन प्रदान करता है, और क्लाउडफॉर्मेशन, लैम्ब्डा, एस3, रूट 53 और क्लाउडवॉच जैसी AWS सेवाओं के साथ सहजता से एकीकृत होता है।
सर्वर रहित मॉडल का लाभ उठाकर, डेवलपर्स एप्लिकेशन लॉजिक लिखने पर ध्यान केंद्रित कर सकते हैं, जबकि AWS स्केलिंग, सुरक्षा और रखरखाव को संभालता है, जिससे यह आधुनिक, उच्च-उपलब्धता API के लिए एक आदर्श समाधान बन जाता है।
यह ट्यूटोरियल आपको एक सरल API बनाने, SAM CLI के साथ AWS CloudFormation का उपयोग करके इसे तैनात करने और फिर GitHub Actions का उपयोग करके तैनाती को स्वचालित करने के बारे में चरण-दर-चरण मार्गदर्शन करेगा।
इस कार्यप्रवाह का अधिक विस्तृत आरेख यहां दिया गया है:
आवश्यक शर्तें
ट्यूटोरियल में आगे बढ़ने से पहले, सुनिश्चित करें कि आपकी मशीन पर AWS SAM CLI इंस्टॉल है। नीचे macOS और Windows के लिए इंस्टॉलेशन चरण दिए गए हैं:
होमब्रू स्थापित करें (यदि पहले से स्थापित नहीं है):
/bin/bash -c “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
AWS टैप जोड़ें और SAM CLI स्थापित करें :
brew tap aws/tapbrew install aws-sam-cli
sam --version
के साथ स्थापना को सत्यापित करें
SAM CLI इंस्टॉलर डाउनलोड करें :
इंस्टॉलर चलाएँ :
.exe
फ़ाइल पर डबल-क्लिक करें और इंस्टॉलेशन विज़ार्ड का पालन करें।
PATH में SAM CLI जोड़ें (यदि स्वचालित रूप से नहीं जोड़ा गया है):
Path
ढूंढें और "संपादित करें" पर क्लिक करें।C:\Program Files\Amazon\AWS SAM CLI\bin
)।
स्थापना की पुष्टि करें : कमांड प्रॉम्प्ट खोलें और sam --version
चलाएँ
अपनी मशीन पर एक नया रिपॉजिटरी बनाएं: mkdir aws-serverless-api
निर्देशिका पर जाएँ: cd aws-serverless-api
एक नया SAM एप्लीकेशन आरंभ करें: sam init
फिर आपको कुछ विकल्प दिए जाएँगे। यहाँ मेरा सेटअप है:
अब, आइए उस निर्देशिका में cd करें जिसे sam init
उत्पन्न किया था; मैंने अपने प्रोजेक्ट का नाम sam-hello-world
चुना है, तो चलिए शुरू करते हैं:
cd sam-hello-world
फिर VSCode code .
— जब आप VSCode या अपने पसंदीदा IDE में प्रोजेक्ट खोलते हैं, तो आपको पहले से ही बहुत सारी जेनरेट की गई फ़ाइलें दिखनी चाहिए।
sam init
से उत्पन्न प्रत्येक फ़ाइल क्या करती है, यह इस प्रकार है:
**template.yaml**
– आपके API गेटवे, लैम्ब्डा और अन्य AWS संसाधनों को परिभाषित करता है।**src/handlers/**
– इसमें नमूना लैम्ब्डा फ़ंक्शन हैंडलर शामिल हैं।**events/**
– स्थानीय परीक्षण के लिए नमूना परीक्षण घटनाएँ.**package.json**
– Node.js लैम्ब्डा फ़ंक्शन के लिए निर्भरता प्रबंधित करता है।**.gitignore**
, **README.md**
– मानक परियोजना सेटअप फ़ाइलें.
हम अपने बहुत ही सरल "हेल्लो वर्ल्ड" एपीआई में फिट करने के लिए इनमें से कुछ फ़ाइलों को संशोधित और हटा देंगे ।
अब, template.yaml
खोलें और मौजूदा लैम्ब्डा फ़ंक्शन परिभाषाओं को निम्नलिखित के साथ बदलें:
AWSTemplateFormatVersion: "2010-09-09" Transform: AWS::Serverless-2016-10-31 Description: AWS SAM template for deploying Node.js/Express API to Lambda Resources: HelloWorldFunction: Type: AWS::Serverless::Function Properties: Handler: src/app.lambdaHandler Runtime: nodejs20.x Events: HelloWorld: Type: Api Properties: Path: / Method: GET
यह हमारे API के मूल में एक रूट को परिभाषित करता है जो एक GET अनुरोध है
/src
निर्देशिका में, आइए app.js
नामक एक फ़ाइल बनाएं
src/app.js
में, आइए हमारे रूट से hello world आउटपुट करने के लिए एक फ़ंक्शन लिखें:
exports.lambdaHandler = async (event) => { return { statusCode: 200, body: JSON.stringify({ message: "Hello, World!" }) }; };
अब, आइए चरण 1 में sam init
द्वारा उत्पन्न अतिरिक्त हैंडलर्स और इवेंट्स को हटा दें।
प्रोजेक्ट निर्देशिका में टर्मिनल खोलें और इन कमांडों को निष्पादित करें :
rm -rf src/handlers/get-all-items.mjs src/handlers/get-by-id.mjs src/handlers/put-item.mjs
rm -rf events/
प्रोजेक्ट निर्देशिका में टर्मिनल खोलें और नीचे दिए गए चरणों का पालन करें:
sam build
आपको इस तरह का आउटपुट दिखना चाहिए: sam local start-api
— ध्यान दें कि इसे स्थानीय रूप से चलाने के लिए आपको docker इंस्टॉल करना होगा। सफल होने पर, आपको docker डेस्कटॉप में हमारे API के लिए बनाया गया कंटेनर दिखाई देना चाहिए।
curl
का उपयोग करें: curl [http://127.0.0.1:3000/](http://127.0.0.1:3000/)
यदि आपको हमारे एंडपॉइंट से लौटा हुआ JSON दिखाई देता है, तो आपने स्थानीय रूप से API सफलतापूर्वक प्रारंभ कर दिया है! 🚀
SAM का उपयोग करके API को पैकेज और तैनात करें : अब जब हमने पुष्टि कर ली है कि हमारा API स्थानीय रूप से काम कर रहा है, तो आइए इसे AWS पर तैनात करें
sam deploy --guided
यह निर्देशित तैनाती आपको यह करने की अनुमति देगी:
1. अपना स्टैक नाम चुनें; मेरा नाम sam-hello-world
है
2. AWS क्षेत्र चुनें; मेरा us-east-1
है
3. तैनाती से पहले परिवर्तनों की पुष्टि करें; मैंने Y
चुना
4. SAM-CLI भूमिका निर्माण की अनुमति दें, Y
5. रोलबैक अक्षम करें, N
चुनें हम चाहते हैं कि उपकरण किसी भी विफल संसाधनों को साफ कर दे
6. HelloWorldFunction में कोई प्रमाणीकरण नहीं है; क्या यह ठीक है? इस ट्यूटोरियल के प्रयोजनों के लिए Y
7. तर्कों को कॉन्फ़िगरेशन फ़ाइल Y
में सहेजें
8. कॉन्फ़िगरेशन फ़ाइल samconfig.toml
9. SAM कॉन्फ़िगरेशन वातावरण - इसे डिफ़ॉल्ट के रूप में छोड़ दें
यदि आपकी तैनाती सफल रही, तो आपको इस तरह सफलतापूर्वक बनाए गए संसाधन दिखाई देंगे:
जब परिनियोजन सफल हो जाए, तो अपने AWS खाते में लॉग इन करें और API गेटवे सेवा खोजें। API सेटिंग्स पर जाएँ, अपने डोमेन को कॉपी करें और इसे अपने ब्राउज़र विंडो पर URL इनपुट में पेस्ट करें, और अपने परिनियोजित API एंडपॉइंट तक पहुँचने के लिए अपने URL के अंत में `/Prod` जोड़ें।
मेरा यूआरएल इस तरह दिखता है:
आप अपने परिनियोजित सर्वर रहित लैम्ब्डा फ़ंक्शन को देखने के लिए AWS कंसोल में लैम्ब्डा की खोज भी कर सकते हैं, जहां इस एंडपॉइंट के लिए हमारे द्वारा लिखा गया कोड रहता है।
आपको एक S3 बकेट भी बना हुआ दिखाई देना चाहिए, जिसमें हमारे कोड का बंडल है। अब जबकि हमने अपना API सफलतापूर्वक तैनात कर दिया है, तो चलिए GitHub के साथ इस प्रक्रिया को स्वचालित करते हैं ताकि जब भी हम अपने API पर विकास करना चाहें, तो MAIN या MASTER शाखा में प्रतिबद्ध होने से तैनाती स्वचालित रूप से ट्रिगर हो सकती है।
सबसे पहले, हम git init
के साथ अपने प्रोजेक्ट की डायरेक्टरी में git रिपोजिटरी को इनिशियलाइज़ करेंगे। फिर, इन फ़ाइलों को अपने .gitignore
में जोड़ेंगे क्योंकि हम उन्हें कमिट नहीं करना चाहते हैं।
echo "node_modules/\n.aws-sam/\nsamconfig.toml" >> .gitignore
अब, हम प्रोजेक्ट में सभी फ़ाइलों को सुरक्षित रूप से स्टेज कर सकते हैं: git add .
और फिर अपना पहला कमिट करें:
git commit -m "Initial commit - AWS SAM API setup"
यह अगला चरण मानता है कि आपके पास GitHub CLI स्थापित है - यह चरण इसलिए है ताकि हम अपनी वर्तमान निर्देशिका से GitHub रेपो बना सकें:
gh repo create aws-sam-cli-tutorial --public --source=. --remote=origin
यदि आपके पास GitHub CLI नहीं है, तो आप GitHub पर मैन्युअल रूप से रिपोजिटरी बना सकते हैं और फिर इस कमांड के साथ निर्देशिका को अपने रिपोजिटरी पर इंगित कर सकते हैं:
git remote add origin https://github.com/YOUR_USERNAME/YOUR_REPO_NAME.git
अंत में, आइए अपने कोड को GitHub पर पुश करें git push -u origin master
आइए GitHub क्रिया वर्कफ़्लो फ़ाइल बनाएं:
mkdir -p .github/workflows
touch .github/workflows/deploy.yml
उस deploy.yml
फ़ाइल को vscode में खोलें और निम्नलिखित yaml कॉन्फ़िगरेशन पेस्ट करें:
name: Deploy API to AWS CloudFormation on: push: branches: - master jobs: deploy: runs-on: ubuntu-latest steps: - name: Checkout Code uses: actions/checkout@v3 - name: Install AWS SAM CLI uses: aws-actions/setup-sam@v2 - name: Configure AWS CLI uses: aws-actions/configure-aws-credentials@v2 with: aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} aws-region: us-east-1 - name: Build and Deploy API run: | sam build sam deploy \ --stack-name sam-hello-world \ --s3-bucket ${{ secrets.AWS_S3_BUCKET }} \ --capabilities CAPABILITY_IAM \ --region ${{ secrets.AWS_REGION }} \ --no-confirm-changeset \ --no-fail-on-empty-changeset
स्वचालित परिनियोजन के लिए इस .yaml फ़ाइल में, हम SAM CLI को स्थापित करने और हमारे क्रेडेंशियल्स को कॉन्फ़िगर करने के लिए GitHub: https://github.com/orgs/aws-actions/repositories से AWS-Actions रिपॉजिटरी पर भरोसा करते हैं - ये AWS रिपॉजिटरी कुछ वर्षों में बदल सकती हैं, इसलिए आवश्यकतानुसार अपडेट करें।
अब, github.com पर जाएं - अपने रिपॉजिटरी पर जाएं, इस प्रोजेक्ट के लिए हमारे द्वारा बनाई गई रिपॉजिटरी पर क्लिक करें, सेटिंग्स, एक्शन पर जाएं, और आपको पर्यावरण और रिपॉजिटरी सीक्रेट्स जोड़ने के लिए यह स्क्रीन दिखाई देगी।
हम निम्नलिखित के लिए रिपॉजिटरी सीक्रेट्स जोड़ना चाहेंगे:
AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY
AWS_REGION
AWS_S3_BUCKET
इन मानों को प्राप्त करने के लिए, अपने AWS कंसोल पर जाएँ। AWS_REGION के लिए, आपको उसी क्षेत्र का उपयोग करना होगा जिसे आपने अपनी स्थानीय मशीन से तैनात किया था। यदि आप क्षेत्र के बारे में अनिश्चित हैं, तो cloudformation खोजें और आपके द्वारा बनाया गया स्टैक ढूंढें, उस पर क्लिक करें, और आपको URL में क्षेत्र दिखाई देना चाहिए।
AWS_S3_BUCKET के लिए, AWS कंसोल में S3 खोजें और उस बकेट का चयन करें जो चरण 4 में हमारी मशीन से तैनाती के समय बनाई गई थी। अपने मान के लिए इस बकेट की आईडी का उपयोग करें; मेरी आईडी नीचे स्क्रीनशॉट में दिखाई गई है।
AWS_ACCESS_KEY_ID
और AWS_SECRET_ACCESS_KEY,
AWS कंसोल में IAM सेवा पर जाएँ:
यहां से, यदि आपके पास पहले से कोई IAM उपयोगकर्ता नहीं है, तो उस पहुंच के साथ एक IAM उपयोगकर्ता बनाएं जिसका आप उपयोग करना चाहते हैं, और उपयोगकर्ता में कम से कम ये अनुमति क्षेत्र जोड़ें:
AWSLambdaFullAccess
IAMFullAccess AmazonS3FullAccess
CloudFormationFullAccess
AmazonAPIGatewayAdministrator
यदि आप इससे सहज हैं तो आप AdministratorAccess भी जोड़ सकते हैं। उसके बाद, हम इस उपयोगकर्ता के लिए एक एक्सेस कुंजी और सीक्रेट बनाना चाहेंगे। एक्सेस कुंजी के लिए उपयोग के मामले के रूप में CLI चुनें। अपने सीक्रेट को कॉपी करना सुनिश्चित करें क्योंकि आप इसे फिर से नहीं देख पाएंगे।
अब, GitHub पर वापस जाएं और अपने रिपॉजिटरी सीक्रेट्स जोड़ें:
ठीक है, अंतिम चरण यह जांचना है कि सब कुछ काम करता है! अपने app.js को कुछ और कहने के लिए अपडेट करें; मैंने इसे “क्या हो रहा है, दुनिया!” में बदल दिया है।
exports.lambdaHandler = async (event) => { return { statusCode: 200, body: JSON.stringify({ message: "What up, World!" }), }; };
फिर, अपने परिवर्तनों को अपनी मास्टर शाखा में पुश करें। git add .
git commit -m 'updated message'
git push
- सुनिश्चित करें कि पुश करते समय आप मास्टर शाखा पर हैं।
अपने GitHub रिपो में, आपको क्रिया को चलते हुए और सफलतापूर्वक तैनात होते हुए देखना चाहिए:
अंत में, अपने वेब ब्राउज़र पर वापस जाएँ और हमारे द्वारा सेट किए गए API गेटवे से URL पेस्ट करें। मेरा URL है: https://tt40c6vgm3.execute-api.us-east-1.amazonaws.com/Prod — और पुष्टि करें कि संदेश बदल दिया गया है।
बधाई हो! आपने अभी-अभी सर्वर रहित AWS स्टैक के लिए CI/CD परिनियोजन पाइपलाइन बनाई है; अब, आप उपयोगी सेवाओं के साथ अपना API बनाने में व्यस्त हो सकते हैं। मुझे बताएं कि क्या यह लेख उपयोगी था या यदि आपके पास सुधार के लिए कोई प्रश्न या सुझाव है!