paint-brush
AWS SAM CLI और GitHub कार्यों के साथ एक सर्वरलेस एपीआई कैसे डिप्लो करेंद्वारा@wesleybaxterhuber
678 रीडिंग
678 रीडिंग

AWS SAM CLI और GitHub कार्यों के साथ एक सर्वरलेस एपीआई कैसे डिप्लो करें

द्वारा Wes Huber10m2025/03/26
Read on Terminal Reader

बहुत लंबा; पढ़ने के लिए

यह ट्यूटोरियल आपको एक सरल एपीआई बनाने, इसे AWS CloudFormation का उपयोग करके वितरित करने और फिर GitHub Actions का उपयोग करके डिप्लोमाइज़मेंट को स्वचालित करने के बारे में कदम-दर-चरण मार्गदर्शन करेगा।
featured image - AWS SAM CLI और GitHub कार्यों के साथ एक सर्वरलेस एपीआई कैसे डिप्लो करें
Wes Huber HackerNoon profile picture


विषयसूची

– परिचय: API तैनात करने के लिए SAM का उपयोग क्यों करें?

– पूर्वापेक्षाएँ: SAM CLI स्थापित करें

– चरण 1: SAM आरंभ करें

– चरण 2: API एंडपॉइंट को परिभाषित करें

– चरण 3: स्थानीय स्तर पर निर्माण और परीक्षण करें

– चरण 4: एपीआई तैनात करें

– चरण 5: गिटहब क्रियाओं के साथ CI / CD

- निष्कर्ष

परिचय: API तैनात करने के लिए SAM का उपयोग क्यों करें?

AWS सर्वरलेस एप्लिकेशन मॉडल (SAM) का उपयोग करके API तैनात करना क्लाउड-आधारित अनुप्रयोगों के लिए एक कुशल और स्केलेबल दृष्टिकोण है।

यह बुनियादी ढांचे के प्रबंधन को सरल बनाता है, अंतर्निहित SSL/TLS समर्थन प्रदान करता है, और क्लाउडफॉर्मेशन, लैम्ब्डा, एस3, रूट 53 और क्लाउडवॉच जैसी AWS सेवाओं के साथ सहजता से एकीकृत होता है।


सर्वर रहित मॉडल का लाभ उठाकर, डेवलपर्स एप्लिकेशन लॉजिक लिखने पर ध्यान केंद्रित कर सकते हैं, जबकि AWS स्केलिंग, सुरक्षा और रखरखाव को संभालता है, जिससे यह आधुनिक, उच्च-उपलब्धता API के लिए एक आदर्श समाधान बन जाता है।


यह ट्यूटोरियल आपको एक सरल API बनाने, SAM CLI के साथ AWS CloudFormation का उपयोग करके इसे तैनात करने और फिर GitHub Actions का उपयोग करके तैनाती को स्वचालित करने के बारे में चरण-दर-चरण मार्गदर्शन करेगा।


इस कार्यप्रवाह का अधिक विस्तृत आरेख यहां दिया गया है:



आवश्यक शर्तें

पूर्वापेक्षाएँ: SAM CLI स्थापित करें

ट्यूटोरियल में आगे बढ़ने से पहले, सुनिश्चित करें कि आपकी मशीन पर AWS SAM CLI इंस्टॉल है। नीचे macOS और Windows के लिए इंस्टॉलेशन चरण दिए गए हैं:

MacOS के लिए

होमब्रू स्थापित करें (यदि पहले से स्थापित नहीं है):

/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 ढूंढें और "संपादित करें" पर क्लिक करें।
  • वह निर्देशिका जोड़ें जहाँ SAM CLI स्थापित किया गया था (उदाहरण के लिए, C:\Program Files\Amazon\AWS SAM CLI\bin )।


स्थापना की पुष्टि करें : कमांड प्रॉम्प्ट खोलें और sam --version चलाएँ

चरण 1: SAM CLI को आरंभ करें

अपनी मशीन पर एक नया रिपॉजिटरी बनाएं: mkdir aws-serverless-api


निर्देशिका पर जाएँ: cd aws-serverless-api


एक नया SAM एप्लीकेशन आरंभ करें: sam init फिर आपको कुछ विकल्प दिए जाएँगे। यहाँ मेरा सेटअप है:

  • “1 — AWS त्वरित प्रारंभ टेम्पलेट्स” चुनें।
  • API गेटवे पर लैम्ब्डा समर्थित सर्वरलेस API तैनात करने के लिए “7 — सर्वरलेस API” चुनें।”
  • “Node.js 20.x” चुनें
  • एक्स-रे ट्रेसिंग के लिए “N” या No चुनें क्योंकि हम अपनी लागत कम करना चाहते हैं, और यह सिर्फ़ एक सरल Hello World उदाहरण है। यदि आप अलग-अलग सेवाओं को खींचने वाला एक जटिल API बना रहे हैं, तो आप डीबगिंग में मदद के लिए उसे सक्षम करना चाह सकते हैं।
  • मैं क्लाउडवॉच मॉनिटरिंग के लिए भी "N" चुन रहा हूं क्योंकि हमें इस हैलो वर्ल्ड उदाहरण के लिए प्रदर्शन पर विश्लेषण की आवश्यकता नहीं है।
  • इसके अलावा लैम्ब्डा लॉग में JSON प्रारूप के लिए "N" का उपयोग करें क्योंकि यह सिर्फ एक हैलो वर्ल्ड उदाहरण है।


अब, आइए उस निर्देशिका में 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** – मानक परियोजना सेटअप फ़ाइलें.


हम अपने बहुत ही सरल "हेल्लो वर्ल्ड" एपीआई में फिट करने के लिए इनमें से कुछ फ़ाइलों को संशोधित और हटा देंगे

चरण 2: API एंडपॉइंट को परिभाषित करें

अब, 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/

चरण 3: स्थानीय स्तर पर निर्माण और परीक्षण करें

प्रोजेक्ट निर्देशिका में टर्मिनल खोलें और नीचे दिए गए चरणों का पालन करें:


  1. एप्लिकेशन बनाएं :
  • sam build आपको इस तरह का आउटपुट दिखना चाहिए:
  1. स्थानीय API सर्वर प्रारंभ करें :
  • sam local start-api — ध्यान दें कि इसे स्थानीय रूप से चलाने के लिए आपको docker इंस्टॉल करना होगा। सफल होने पर, आपको docker डेस्कटॉप में हमारे API के लिए बनाया गया कंटेनर दिखाई देना चाहिए।


    1. एंडपॉइंट का परीक्षण करने के लिए ब्राउज़र खोलें या टर्मिनल में curl का उपयोग करें:
  • curl [http://127.0.0.1:3000/](http://127.0.0.1:3000/)

यदि आपको हमारे एंडपॉइंट से लौटा हुआ JSON दिखाई देता है, तो आपने स्थानीय रूप से API सफलतापूर्वक प्रारंभ कर दिया है! 🚀

चरण 4: 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 शाखा में प्रतिबद्ध होने से तैनाती स्वचालित रूप से ट्रिगर हो सकती है।

चरण 5: गिटहब एक्शन के साथ CI/CD

अपने Git Repo को आरंभ करें और अपने मास्टर शाखा पर पुश करें


सबसे पहले, हम 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

CI/CD के लिए GitHub क्रियाएँ सेट करें

आइए 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 बनाने में व्यस्त हो सकते हैं। मुझे बताएं कि क्या यह लेख उपयोगी था या यदि आपके पास सुधार के लिए कोई प्रश्न या सुझाव है!