NodeJS के साथ InsideLoop डेवलपमेंट

1. खास जानकारी

इस लैब में, ऐसी सुविधाओं और क्षमताओं के बारे में बताया गया है जिन्हें कंटेनर वाले एनवायरमेंट में NodeJS ऐप्लिकेशन डेवलप करने का काम करने वाले सॉफ़्टवेयर इंजीनियर के डेवलपमेंट वर्कफ़्लो को बेहतर बनाने के लिए डिज़ाइन किया गया है. कंटेनर को डेवलप करने के लिए, उपयोगकर्ता को कंटेनर और कंटेनर बनाने की प्रोसेस के बारे में जानकारी होनी चाहिए. इसके अलावा, डेवलपर को आम तौर पर अपने फ़्लो को रोकना पड़ता है. साथ ही, रिमोट एनवायरमेंट में अपने ऐप्लिकेशन की जांच करने और उन्हें डीबग करने के लिए, उन्हें अपने आईडीई से बाहर निकलना पड़ता है. इस ट्यूटोरियल में बताए गए टूल और टेक्नोलॉजी की मदद से, डेवलपर अपने आईडीई को छोड़े बिना, कंटेनर वाले ऐप्लिकेशन पर असरदार तरीके से काम कर सकते हैं.

आपको क्या सीखने को मिलेगा

इस लैब में, आपको GCP में कंटेनर का इस्तेमाल करके डेवलपमेंट करने के तरीकों के बारे में जानकारी मिलेगी. जैसे:

  • Nodejs ऐप्लिकेशन बनाना
  • कंटेनर डेवलपमेंट के लिए Nodejs ऐप्लिकेशन को कॉन्फ़िगर करना
  • आसान CRUD Rest Service को कोड करना
  • GKE पर डिप्लॉय करना
  • गड़बड़ी की स्थिति को डीबग करना
  • ब्रेकपॉइंट / लॉग का इस्तेमाल करना
  • बदलावों को GKE में वापस डिप्लॉय करना
  • ज़रूरी नहीं: बैकएंड पर डेटा सेव करने के लिए CloudSQL को इंटिग्रेट करना

2. सेटअप और ज़रूरी शर्तें

अपनी स्पीड से एनवायरमेंट सेट अप करना

  1. Google Cloud Console में साइन इन करें और नया प्रोजेक्ट बनाएं या किसी मौजूदा प्रोजेक्ट का फिर से इस्तेमाल करें. अगर आपके पास पहले से कोई Gmail या Google Workspace खाता नहीं है, तो आपको एक खाता बनाना होगा.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • प्रोजेक्ट का नाम, इस प्रोजेक्ट में हिस्सा लेने वाले लोगों के लिए डिसप्ले नेम होता है. यह एक कैरेक्टर स्ट्रिंग है, जिसका इस्तेमाल Google API नहीं करते. इसे किसी भी समय अपडेट किया जा सकता है.
  • प्रोजेक्ट आईडी, सभी Google Cloud प्रोजेक्ट के लिए यूनीक होना चाहिए. साथ ही, इसे बदला नहीं जा सकता. Cloud Console, एक यूनीक स्ट्रिंग अपने-आप जनरेट करता है. आम तौर पर, आपको इससे कोई फ़र्क़ नहीं पड़ता कि यह क्या है. ज़्यादातर कोडलैब में, आपको प्रोजेक्ट आईडी का रेफ़रंस देना होगा. इसे आम तौर पर PROJECT_ID के तौर पर पहचाना जाता है. इसलिए, अगर आपको यह पसंद नहीं है, तो कोई दूसरा रैंडम आईडी जनरेट करें. इसके अलावा, अपने हिसाब से कोई आईडी बनाकर देखें कि वह उपलब्ध है या नहीं. इसके बाद, प्रोजेक्ट बनाने के बाद इसे "फ़्रीज़" कर दिया जाता है.
  • तीसरी वैल्यू, प्रोजेक्ट नंबर होती है. इसका इस्तेमाल कुछ एपीआई करते हैं. इन तीनों वैल्यू के बारे में ज़्यादा जानने के लिए, दस्तावेज़ देखें.
  1. इसके बाद, आपको Cloud Console में बिलिंग चालू करनी होगी, ताकि Cloud संसाधनों/एपीआई का इस्तेमाल किया जा सके. इस कोडलैब को पूरा करने में ज़्यादा खर्च नहीं आएगा. संसाधन बंद करने के लिए, कोडलैब के आखिर में दिए गए "बंद करें" निर्देशों का पालन करें, ताकि इस ट्यूटोरियल के बाद आपको बिलिंग न करनी पड़े. Google Cloud के नए उपयोगकर्ताओं को, मुफ़्त में आज़माने के लिए 300 डॉलर का क्रेडिट मिलता है.

Cloud Shell Editor शुरू करना

इस लैब को Google Cloud Shell Editor के साथ इस्तेमाल करने के लिए डिज़ाइन और टेस्ट किया गया है. एडिटर को ऐक्सेस करने के लिए,

  1. https://console.cloud.google.com पर जाकर, अपने Google प्रोजेक्ट को ऐक्सेस करें.
  2. सबसे ऊपर दाएं कोने में मौजूद, Cloud Shell एडिटर आइकॉन पर क्लिक करें

8560cc8d45e8c112.png

  1. आपकी विंडो में सबसे नीचे एक नया पैनल खुलेगा
  2. 'एडिटर खोलें' बटन पर क्लिक करें

9e504cb98a6a8005.png

  1. एडिटर खुलेगा. इसमें दाईं ओर एक्सप्लोरर और बीच में एडिटर दिखेगा
  2. स्क्रीन पर सबसे नीचे एक टर्मिनल पैन भी उपलब्ध होना चाहिए
  3. अगर टर्मिनल खुला नहीं है, तो नई टर्मिनल विंडो खोलने के लिए `ctrl+`` कीबोर्ड शॉर्टकट का इस्तेमाल करें

gcloud सेट अप करना

Cloud Shell में, अपना प्रोजेक्ट आईडी और वह क्षेत्र सेट करें जहां आपको अपना ऐप्लिकेशन डिप्लॉय करना है. इन्हें PROJECT_ID और REGION वैरिएबल के तौर पर सेव करें.

export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')

GKE क्लस्टर और डेटाबेस सेट अप करना

  1. सेटअप स्क्रिप्ट डाउनलोड करें और उसे एक्ज़ीक्यूटेबल बनाएं.
wget https://raw.githubusercontent.com/GoogleCloudPlatform/container-developer-workshop/main/labs/nodejs/setup.sh
chmod +x setup.sh

इस लैब में इस्तेमाल किए गए इंफ़्रास्ट्रक्चर को उपलब्ध कराएं

इस लैब में, आपको GKE पर कोड डिप्लॉय करना होगा. साथ ही, Spanner डेटाबेस में सेव किए गए डेटा को ऐक्सेस करना होगा. नीचे दी गई सेटअप स्क्रिप्ट, आपके लिए इस इन्फ़्रास्ट्रक्चर को तैयार करती है.

  1. setup.sh फ़ाइल खोलें और उन पासवर्ड की वैल्यू में बदलाव करें जो फ़िलहाल CHANGEME पर सेट हैं
  2. सेटअप स्क्रिप्ट चलाकर, GKE क्लस्टर और CloudSQL डेटाबेस सेट अप करें. इनका इस्तेमाल इस लैब में किया जाएगा
./setup.sh
  1. Cloud Shell में, mynodejsapp नाम की नई डायरेक्ट्री बनाएं
mkdir mynodejsapp
  1. इस डायरेक्ट्री पर जाएं और इसे वर्कस्पेस के तौर पर खोलें. इससे, नए फ़ोल्डर में वर्कस्पेस कॉन्फ़िगरेशन बनाकर एडिटर को फिर से लोड किया जाएगा.
cd mynodejsapp && cloudshell workspace .
  1. NVM का इस्तेमाल करके, Node और NPM इंस्टॉल करें.
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash
        
        # This loads nvm bash_completion
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  

nvm install stable

nvm alias default stable

3. स्टार्टर ऐप्लिकेशन का नया वर्शन बनाना

  1. ऐप्लिकेशन शुरू करना

नीचे दिए गए कमांड को चलाकर package.json फ़ाइल बनाना

npm init
    Choose the entry point: (index.js) src/index.js and default values for the rest of the parameters. This will create the file with following contents
{
  "name": "mynodejsapp",
  "version": "1.0.0",
  "description": "",
  "main": "src/index.js",,
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC"
}
  1. कोई एंट्री पॉइंट जोड़ना

इस फ़ाइल में बदलाव करके, स्क्रिप्ट "start": "node src/index.js", में शुरू करने का निर्देश शामिल करें. बदलाव के बाद स्क्रिप्ट, नीचे दिए गए कोड स्निपेट की तरह दिखनी चाहिए:

"scripts": {
    "start": "node src/index.js",
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  1. Express Dependency जोड़ना

हम जो कोड जोड़ने जा रहे हैं वह भी express का इस्तेमाल करता है. इसलिए, आइए इस package.json फ़ाइल में उस डिपेंडेंसी को जोड़ें. इसलिए, सभी बदलावों के बाद package.json फ़ाइल इस तरह दिखनी चाहिए.

​​{
  "name": "mynodejsapp",
  "version": "1.0.0",
  "description": "",
  "main": "src/index.js",
  "scripts": {
    "start": "node src/index.js",
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "Your Name",
  "license": "ISC",
  "dependencies": {
    "express": "^4.16.4"
  }
}
  1. index.js फ़ाइल बनाना

src नाम की एक सोर्स डायरेक्ट्री बनाएं

नीचे दिए गए कोड का इस्तेमाल करके, src/index.js फ़ाइल बनाएं

const express = require('express');
const app = express();
const PORT = 8080;

app.get('/', (req, res) => {
    var message="Greetings from Node";
    res.send({ message: message });
  });

app.listen(PORT, () => {
  console.log(`Server running at: http://localhost:${PORT}/`);

});

ध्यान दें कि PORT को 8080 पर सेट किया गया है

मेनिफ़ेस्ट जनरेट करना

Skaffold, कंटेनर डेवलपमेंट को आसान बनाने के लिए इंटिग्रेटेड टूल उपलब्ध कराता है. इस चरण में, आपको skaffold को शुरू करना होगा. इससे Kubernetes की बुनियादी YAML फ़ाइलें अपने-आप बन जाएंगी. प्रोसेस शुरू करने के लिए, नीचे दिए गए निर्देश को चलाएं.

टर्मिनल में यह कमांड चलाएं

skaffold init --generate-manifests

जब कहा जाए, तब:

  • पोर्ट के लिए 8080 डालें
  • कॉन्फ़िगरेशन सेव करने के लिए, y डालें

फ़ाइल फ़ोल्डर में दो फ़ाइलें जोड़ी गई हैं. जैसे, skaffold.yaml और deployment.yaml

ऐप्लिकेशन का नाम अपडेट करना

कॉन्फ़िगरेशन में शामिल डिफ़ॉल्ट वैल्यू, फ़िलहाल आपके ऐप्लिकेशन के नाम से मेल नहीं खाती हैं. फ़ाइलों को अपडेट करें, ताकि वे डिफ़ॉल्ट वैल्यू के बजाय आपके ऐप्लिकेशन के नाम का रेफ़रंस दें.

  1. Skaffold कॉन्फ़िगरेशन में एंट्री बदलना
  • skaffold.yaml खोलें
  • फ़िलहाल package-json-image के तौर पर सेट की गई इमेज का नाम चुनें
  • राइट क्लिक करें और 'सभी बदलावों को बदलें' चुनें
  • mynodejsapp के तौर पर नया नाम डालें
  1. Kubernetes कॉन्फ़िगरेशन में एंट्री बदलना
  • deployment.yaml फ़ाइल खोलो
  • फ़िलहाल package-json-image के तौर पर सेट की गई इमेज का नाम चुनें
  • राइट क्लिक करें और 'सभी बदलावों को बदलें' चुनें
  • mynodejsapp के तौर पर नया नाम डालें

ध्यान दें कि skaffold.yaml फ़ाइल में, build सेक्शन ऐप्लिकेशन को कंटेनर में रखने के लिए buildpacks का इस्तेमाल करता है. इस कोड में Dockerfile नहीं है. साथ ही, डेवलपर को इस ऐप्लिकेशन को कंटेनर में बदलने के लिए, डॉकर के बारे में कोई जानकारी नहीं चाहिए.

साथ ही, इस skaffold कॉन्फ़िगरेशन की मदद से, एडिटर और रनिंग कंटेनर के बीच हॉट सिंक की सुविधा अपने-आप चालू हो जाती है. हॉट सिंक की सुविधा चालू करने के लिए, किसी अन्य कॉन्फ़िगरेशन की ज़रूरत नहीं होती.

4. डेवलपमेंट प्रोसेस के बारे में जानकारी

इस सेक्शन में, Cloud Code प्लगिन का इस्तेमाल करके कुछ चरणों को पूरा करने का तरीका बताया गया है. इससे आपको बुनियादी प्रोसेस के बारे में जानने में मदद मिलेगी. साथ ही, आपको अपने स्टार्टर ऐप्लिकेशन के कॉन्फ़िगरेशन और सेटअप की पुष्टि करने का तरीका भी पता चलेगा.

Cloud Code, Skaffold के साथ इंटिग्रेट होता है, ताकि आपकी डेवलपमेंट प्रोसेस को आसान बनाया जा सके. नीचे दिए गए चरणों में GKE पर डिप्लॉय करने पर, Cloud Code और Skaffold आपकी कंटेनर इमेज को अपने-आप बना देंगे. इसके बाद, वे इसे Container Registry में पुश कर देंगे. इसके बाद, वे आपके ऐप्लिकेशन को GKE पर डिप्लॉय कर देंगे. यह प्रोसेस बैकग्राउंड में होती है. इससे डेवलपर को जानकारी नहीं मिलती. Cloud Code, कंटेनर पर आधारित डेवलपमेंट के लिए, डीबग करने और हॉटसिंक करने की सुविधाएं उपलब्ध कराता है. इससे डेवलपमेंट की प्रोसेस को बेहतर बनाया जा सकता है.

Kubernetes पर डिप्लॉय करें

  1. Cloud Shell Editor में सबसे नीचे मौजूद पैनल में, Cloud Code  चुनें

fdc797a769040839.png

  1. सबसे ऊपर दिखने वाले पैनल में, Kubernetes पर चलाएं को चुनें. अगर कहा जाए, तो मौजूदा Kubernetes कॉन्टेक्स्ट का इस्तेमाल करने के लिए, 'हां' चुनें.

cfce0d11ef307087.png

  1. पहली बार कमांड चलाने पर, स्क्रीन के सबसे ऊपर एक प्रॉम्प्ट दिखेगा. इसमें पूछा जाएगा कि क्या आपको मौजूदा Kubernetes कॉन्टेक्स्ट चाहिए. इसे स्वीकार करने और मौजूदा कॉन्टेक्स्ट का इस्तेमाल करने के लिए, "हां" चुनें.

817ee33b5b412ff8.png

  1. इसके बाद, एक प्रॉम्प्ट दिखेगा, जिसमें आपसे पूछा जाएगा कि किस कंटेनर रजिस्ट्री का इस्तेमाल करना है. दी गई डिफ़ॉल्ट वैल्यू को स्वीकार करने के लिए, Enter दबाएं

eb4469aed97a25f6.png

  1. प्रोग्रेस और सूचनाएं देखने के लिए, नीचे वाले पैन में मौजूद आउटपुट टैब चुनें

f95b620569ba96c5.png

  1. ज़्यादा जानकारी और कंटेनर से लाइव स्ट्रीम किए जा रहे लॉग देखने के लिए, दाईं ओर मौजूद चैनल ड्रॉप-डाउन में "Kubernetes: Run/Debug - Detailed" चुनें

94acdcdda6d2108.png

  1. ड्रॉपडाउन से "Kubernetes: Run/Debug" चुनकर, सरल बनाए गए व्यू पर वापस जाएं
  2. बिल्ड और टेस्ट पूरे होने पर, आउटपुट टैब में यह दिखता है: Resource deployment/mynodejsapp status completed successfully. साथ ही, एक यूआरएल दिखता है: "Forwarded URL from service demo-app: http://localhost:8080"
  3. क्लाउड कोड टर्मिनल में, आउटपुट (http://localhost:8080) में मौजूद यूआरएल पर कर्सर घुमाएं. इसके बाद, दिखने वाले टूलटिप में, वेब प्रीव्यू खोलें को चुनें.

जवाब यह होगा:

{"message":"Greetings from Node"}

हॉट रीलोड

  1. src/index.js पर नेविगेट करें. 'Hello from Node' को भेजे जाने वाले वेलकम मैसेज के कोड में बदलाव करें

ध्यान दें कि Output विंडो में, Kubernetes: Run/Debug व्यू में, वॉचर अपडेट की गई फ़ाइलों को Kubernetes में मौजूद कंटेनर के साथ सिंक करता है

Update initiated
File sync started for 1 files for gcr.io/myproject/mynodejsapp:latest@sha256:f554756b3b4d6c301c4b26ef96102227cfa2833270db56241248ae42baa1971a
File sync succeeded for 1 files for gcr.io/myproject/mynodejsapp:latest@sha256:f554756b3b4d6c301c4b26ef96102227cfa2833270db56241248ae42baa1971a
Update succeeded
  1. Kubernetes: Run/Debug - Detailed व्यू पर स्विच करने पर, आपको दिखेगा कि यह फ़ाइल में हुए बदलावों को पहचानता है और नोड को फिर से शुरू करता है
files modified: [src/index.js]
Copying files:map[src/index.js:[/workspace/src/index.js]]togcr.io/myproject/mynodejsapp:latest@sha256:f554756b3b4d6c301c4b26ef96102227cfa2833270db56241248ae42baa1971a
Syncing 1 files for gcr.io/myproject/mynodejsapp:latest@sha256:f554756b3b4d6c301c4b26ef96102227cfa2833270db56241248ae42baa1971a
Watching for changes...
[mynodejsapp]
[mynodejsapp]> mynodejsapp@1.0.0 start /workspace
[mynodejsapp]> node src/index.js
[mynodejsapp]
[mynodejsapp]Server running at: http://localhost:8080/
  1. अपडेट किए गए नतीजे देखने के लिए, अपने ब्राउज़र को रीफ़्रेश करें.

डीबग करना

  1. डीबग व्यू पर जाएं और मौजूदा थ्रेड 647213126d7a4c7b.png को रोकें.
  2. सबसे नीचे मौजूद मेन्यू में, Cloud Code पर क्लिक करें. इसके बाद, ऐप्लिकेशन को debug मोड में चलाने के लिए, Debug on Kubernetes को चुनें.
  • Output विंडो के Kubernetes Run/Debug - Detailed व्यू में, ध्यान दें कि Skaffold इस ऐप्लिकेशन को डीबग मोड में डिप्लॉय करेगा.
  • ऐप्लिकेशन को बनाने और डिप्लॉय करने में कुछ मिनट लगेंगे. इस बार, आपको एक डीबगर अटैच दिखेगा.
Port forwarding pod/mynodejsapp-6bbcf847cd-vqr6v in namespace default, remote port 9229 -> http://127.0.0.1:9229
[mynodejsapp]Debugger attached.
  1. सबसे नीचे मौजूद स्टेटस बार का रंग नीले से बदलकर नारंगी हो जाता है. इससे पता चलता है कि यह डीबग मोड में है.
  2. Kubernetes Run/Debug व्यू में, देखें कि डीबग किए जा सकने वाले कंटेनर को शुरू किया गया है
**************URLs*****************
Forwarded URL from service mynodejsapp-service: http://localhost:8080
Debuggable container started pod/mynodejsapp-deployment-6bc7598798-xl9kj:mynodejsapp (default)
Update succeeded
***********************************

ब्रेकपॉइंट का इस्तेमाल करना

  1. src/index.js खोलें
  2. var message="Greetings from Node"; स्टेटमेंट ढूंढें
  3. लाइन नंबर के बाईं ओर मौजूद खाली जगह पर क्लिक करके, उस लाइन में ब्रेकपॉइंट जोड़ें. ब्रेकपॉइंट सेट होने पर, लाल रंग का इंडिकेटर दिखेगा
  4. अपने ब्राउज़र को फिर से लोड करें और ध्यान दें कि डीबगर, ब्रेकपॉइंट पर प्रोसेस को रोक देता है. साथ ही, आपको उन वैरिएबल और ऐप्लिकेशन की स्थिति की जांच करने की अनुमति देता है जो GKE में रिमोटली चल रहा है
  5. वैरिएबल सेक्शन में नीचे की ओर तब तक क्लिक करें, जब तक आपको "message" वैरिएबल न मिल जाए.
  6. लाइन को चलाने के लिए, Step over 7cfdee4fd6ef5c3a.png पर क्लिक करें
  7. "message" वैरिएबल की मौजूदा वैल्यू को "Greetings from Node" में बदलते हुए देखें
  8. वैरिएबल के नाम "target" पर दो बार क्लिक करें. इसके बाद, पॉप-अप में वैल्यू को "Hello from Node" जैसे किसी दूसरे मान में बदलें
  9. डीबग कंट्रोल पैनल में मौजूद, जारी रखें बटन पर क्लिक करें
  10. अपने ब्राउज़र में जवाब देखें. इसमें अब वह अपडेट की गई वैल्यू दिखेगी जिसे आपने अभी डाला है.
  11. स्टॉप बटन 647213126d7a4c7b.png दबाकर, "डीबग" मोड बंद करें. इसके बाद, ब्रेकपॉइंट पर फिर से क्लिक करके, ब्रेकपॉइंट हटाएं.

5. सामान्य CRUD रेस्ट सर्विस डेवलप करना

इस समय, आपका ऐप्लिकेशन कंटेनर में डेवलपमेंट के लिए पूरी तरह से कॉन्फ़िगर हो गया है. साथ ही, आपने Cloud Code की मदद से डेवलपमेंट के बुनियादी वर्कफ़्लो को समझ लिया है. यहां दिए गए सेक्शन में, आपको सीखी गई बातों को आज़माने का मौका मिलेगा. इसके लिए, Google Cloud में मैनेज किए जा रहे डेटाबेस से कनेक्ट होने वाले REST सेवा के एंडपॉइंट जोड़े जाएंगे.

डिपेंडेंसी कॉन्फ़िगर करना

ऐप्लिकेशन कोड, बाकी सेवा से जुड़े डेटा को सेव करने के लिए डेटाबेस का इस्तेमाल करता है. पक्का करें कि डिपेंडेंसी उपलब्ध हों. इसके लिए, package.json फ़ाइल में यह कोड जोड़ें

  1. Postgres में CRUD ऐप्लिकेशन बनाने के लिए, package.json फ़ाइल में दो और डिपेंडेंसी pg और sequelize जोड़ें. बदलाव के बाद, डिपेंडेंसी सेक्शन ऐसा दिखेगा.
    "dependencies": {
    "express": "^4.16.4",
    "pg": "^8.7.3",
    "sequelize": "^6.17.0"
  }

REST सेवा को कोड करना

  1. इस ऐप्लिकेशन में CRUD ऐप्लिकेशन कोड जोड़ें
wget -O app.zip https://github.com/GoogleCloudPlatform/container-developer-workshop/raw/main/labs/nodejs/app.zip

unzip app.zip

इस कोड में

  • item के लिए, models फ़ोल्डर में मौजूद इकाई मॉडल
  • सीआरयूडी ऑपरेशन करने वाले कोड के साथ controllers फ़ोल्डर
  • routes फ़ोल्डर, जो यूआरएल पैटर्न को अलग-अलग कॉल पर रूट करता है
  • डेटाबेस कनेक्टिविटी की जानकारी वाला config फ़ोल्डर
  1. ध्यान दें कि db.config.js फ़ाइल में डेटाबेस कॉन्फ़िगरेशन, एनवायरमेंट वैरिएबल को दिखाता है. डेटाबेस से कनेक्ट करने के लिए, इन वैरिएबल को उपलब्ध कराना ज़रूरी है. साथ ही, यूआरएल को कोड में बदलने के लिए, आपको आने वाले अनुरोध को पार्स करना होगा.
  2. src/index.js में यहां दिया गया कोड स्निपेट जोड़ें, ताकि अपनी मुख्य JavaScript फ़ाइल से CRUD कोड को कनेक्ट किया जा सके. ऐसा, app.listen(PORT, () => { से शुरू होने वाले आखिरी सेक्शन से ठीक पहले करें
const bodyParser = require('body-parser')
app.use(bodyParser.json())
app.use(
 bodyParser.urlencoded({
   extended: true,
 })
)
const db = require("../app/models");
db.sequelize.sync();
require("../app/routes/item.routes")(app);
  1. डेटाबेस कनेक्टिविटी की जानकारी देने के लिए, एनवायरमेंट वैरिएबल जोड़ने के लिए deployment.yaml फ़ाइल में डिप्लॉयमेंट में बदलाव करें.

फ़ाइल के आखिर में मौजूद स्पेसिफ़िकेशन की एंट्री को इस परिभाषा से मैच करने के लिए अपडेट करें

    spec:
      containers:
      - name: mynodejsapp
        image: mynodejsapp
        env:
        - name: DB_HOST
          value: ${DB_INSTANCE_IP}        
        - name: DB_PORT
          value: "5432"  
        - name: DB_USER
          valueFrom:
            secretKeyRef:
              name: gke-cloud-sql-secrets
              key: username
        - name: DB_PASS
          valueFrom:
            secretKeyRef:
              name: gke-cloud-sql-secrets
              key: password
        - name: DB_NAME
          valueFrom:
            secretKeyRef:
              name: gke-cloud-sql-secrets
              key: database
  1. DB_HOST वैल्यू को अपने डेटाबेस के पते से बदलें
export DB_INSTANCE_IP=$(gcloud sql instances describe mytest-instance \
    --format=json | jq \
    --raw-output ".ipAddresses[].ipAddress")

envsubst < deployment.yaml > deployment.new && mv deployment.new deployment.yaml

ऐप्लिकेशन डिप्लॉय करना और उसकी पुष्टि करना

  1. Cloud Shell Editor के सबसे नीचे मौजूद पैनल में, Cloud Code चुनें. इसके बाद, स्क्रीन पर सबसे ऊपर मौजूद Debug on Kubernetes चुनें.
  2. बिल्ड और टेस्ट पूरे होने पर, आउटपुट टैब में यह मैसेज दिखता है: Resource deployment/mynodejsapp status completed successfully. साथ ही, एक यूआरएल दिखता है: "Forwarded URL from service mynodejsapp: http://localhost:8080"
  3. कुछ आइटम जोड़ें.

Cloud Shell टर्मिनल में, यहां दिए गए निर्देश चलाएं

URL=localhost:8080
curl -X POST $URL/items -d '{"itemName":"Body Spray", "itemPrice":3.2}' -H "Content-Type: application/json"
curl -X POST $URL/items -d '{"itemName":"Nail Cutter", "itemPrice":2.5}' -H "Content-Type: application/json"
  1. ब्राउज़र में $URL/items चलाकर, GET की जांच करें. कमांड लाइन से भी कर्ल चलाया जा सकता है
curl -X GET $URL/items
  1. मिटाने की सुविधा की जांच करना: अब इस कमांड को चलाकर, किसी आइटम को मिटाने की कोशिश करें. अगर ज़रूरी हो, तो item-id की वैल्यू बदलें.
curl -X DELETE $URL/items/1
    This throws an error message
{"message":"Could not delete Item with id=[object Object]"}

समस्या का पता लगाना और उसे ठीक करना

  1. ऐप्लिकेशन को डीबग मोड में रीस्टार्ट करें और समस्या का पता लगाएं. इसके लिए, यहां कुछ सुझाव दिए गए हैं:
  • हमें पता है कि DELETE कमांड में कोई गड़बड़ी है, क्योंकि इससे मनमुताबिक नतीजे नहीं मिल रहे हैं. इसलिए, आपको itemcontroller.js->exports.delete तरीके में ब्रेकपॉइंट सेट करना होगा.
  • एक-एक करके कोड चलाएं और हर चरण में वैरिएबल देखें. इससे आपको बाईं ओर मौजूद विंडो में लोकल वैरिएबल की वैल्यू दिखेंगी.
  • request.params जैसी खास वैल्यू देखने के लिए, इस वैरिएबल को वॉच विंडो में जोड़ें.
  1. ध्यान दें कि id एट्रिब्यूट को असाइन की गई वैल्यू undefined है. समस्या ठीक करने के लिए, कोड बदलें.

ठीक किया गया कोड स्निपेट ऐसा दिखेगा.

// Delete a Item with the specified id in the request
exports.delete = (req, res) => {
    const id = req.params.id;
  1. ऐप्लिकेशन को रीस्टार्ट करने के बाद, मिटाने की कोशिश करके फिर से टेस्ट करें.
  2. डीबग टूलबार में मौजूद लाल रंग के स्क्वेयर पर क्लिक करके, डीबग सेशन बंद करें 647213126d7a4c7b.png

6. साफ़-सफ़ाई सेवा

बधाई हो! इस लैब में, आपने स्क्रैच से एक नया Nodejs ऐप्लिकेशन बनाया है. साथ ही, इसे कंटेनर के साथ हॉट डिप्लॉयमेंट मोड में काम करने के लिए कॉन्फ़िगर किया है. इसके बाद, आपने अपने ऐप्लिकेशन को रिमोट GKE क्लस्टर पर डिप्लॉय किया और उसे डीबग किया. इसके लिए, आपने डेवलपर के उसी फ़्लो का इस्तेमाल किया जो ऐप्लिकेशन के ट्रेडिशनल स्टैक में मिलता है.

लैब पूरा होने के बाद, साफ़-सफ़ाई करने के लिए:

  1. लैब में इस्तेमाल की गई फ़ाइलें मिटाएं
cd ~ && rm -rf mynodejsapp && rm -f setup.sh
  1. प्रोजेक्ट मिटाकर, उससे जुड़े सभी इन्फ़्रास्ट्रक्चर और संसाधन हटाएं