NodeJS के साथ Cloud Workstations का इस्तेमाल करके InsideLoop डेवलपमेंट

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

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

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

इस लैब में, आपको Google Cloud में कंटेनर के साथ डेवलप करने के तरीकों के बारे में जानकारी मिलेगी, जिनमें शामिल हैं:

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

58a4cdd3ed7a123a.png

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 में बिलिंग चालू करनी होगी. इस कोडलैब का इस्तेमाल करने पर, आपको ज़्यादा पैसे नहीं चुकाने होंगे. इस ट्यूटोरियल के अलावा, संसाधनों को बंद करने के लिए कि आपको बिलिंग न करनी पड़े. इसके लिए, अपने बनाए गए संसाधनों को मिटाएं या पूरा प्रोजेक्ट मिटाएं. Google Cloud के नए उपयोगकर्ता, 300 डॉलर के मुफ़्त ट्रायल वाले प्रोग्राम में हिस्सा ले सकते हैं.

Cloudshell एडिटर शुरू करें

इस लैब को 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 (जीकेई) पर कोड डिप्लॉय करना होगा. साथ ही, CloudSQL डेटाबेस में सेव किए गए डेटा को ऐक्सेस करना होगा. नीचे दी गई सेटअप स्क्रिप्ट आपके लिए यह इन्फ़्रास्ट्रक्चर तैयार करती है.

  1. सेटअप स्क्रिप्ट डाउनलोड करें और इसे एक्ज़ीक्यूटेबल बनाएं.
wget https://raw.githubusercontent.com/GoogleCloudPlatform/container-developer-workshop/main/labs/nodejs/setup_with_cw.sh
chmod +x setup_with_cw.sh
  1. setup_with_cw.sh फ़ाइल खोलें और वर्तमान में CHANGEME पर सेट पासवर्ड के मानों में बदलाव करें
  2. इस लैब में इस्तेमाल किए जाने वाले GKE (जीकेई) क्लस्टर और CloudSQL डेटाबेस को सेट अप करने के लिए, सेटअप स्क्रिप्ट चलाएं
./setup_with_cw.sh &

क्लाउड वर्कस्टेशन क्लस्टर

  1. Cloud Console में Cloud Workstations खोलें. क्लस्टर के READY स्टेटस में होने का इंतज़ार करें.

305e1a3d63ac7ff6.png

Workstations कॉन्फ़िगरेशन बनाएं

  1. अगर आपका Cloud Shell सेशन डिसकनेक्ट हो गया है, तो "फिर से कनेक्ट करें" पर क्लिक करें और फिर प्रोजेक्ट आईडी सेट करने के लिए gcloud cli कमांड चलाएं. कमांड चलाने से पहले, नीचे दिए गए सैंपल प्रोजेक्ट आईडी को अपने qwiklabs प्रोजेक्ट आईडी से बदलें.
gcloud config set project qwiklabs-gcp-project-id
  1. Cloud Workstations कॉन्फ़िगरेशन बनाने के लिए, नीचे दी गई स्क्रिप्ट को टर्मिनल में डाउनलोड करें और चलाएं.
wget https://raw.githubusercontent.com/GoogleCloudPlatform/container-developer-workshop/main/labs/nodejs/workstation_config_setup.sh
chmod +x workstation_config_setup.sh
./workstation_config_setup.sh
  1. कॉन्फ़िगरेशन सेक्शन में जाकर, नतीजों की पुष्टि करें. READY स्थिति में बदलने में दो मिनट लगेंगे.

c8f0b8662fdb827e.png

  1. कंसोल में Cloud Workstations खोलें और नया इंस्टेंस बनाएं.

a53adeeac81a78c8.png

  1. नाम को my-workstation में बदलें और मौजूदा कॉन्फ़िगरेशन को चुनें: codeoss-js.

675d83f30c1319df.png

  1. Workstations सेक्शन में जाकर, नतीजों की पुष्टि करें.

bf67586e6695852.png

वर्कस्टेशन लॉन्च करें

  1. वर्कस्टेशन शुरू और लॉन्च करें. वर्कस्टेशन शुरू होने में कुछ मिनट लगेंगे.

a9ad54f4b4b668e9.png

  1. पता बार में मौजूद आइकॉन पर क्लिक करके, तीसरे पक्ष की कुकी को अनुमति दें. 1b8923e2943f9bc4.png

fcf9405b6957b7d7.png

  1. "साइट काम नहीं कर रही है?" पर क्लिक करें.

36a84c0e2e3b85b.png

  1. "कुकी की अनुमति दें" पर क्लिक करें.

2259694328628fba.png

  1. वर्कस्टेशन लॉन्च होने के बाद, आपको कोड OSS IDE दिखेगा. "हो गया के रूप में चिह्नित करें" पर क्लिक करें 'शुरू करें' पेज पर, वर्कस्टेशन IDE पर

94874fba9b74cc22.png

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

इस सेक्शन में, आपको नया Nodejs ऐप्लिकेशन बनाना होगा.

  1. नया टर्मिनल खोलें.

c31d48f2e4938c38.png

  1. Cloud Shell में, mynodejsapp नाम वाली नई डायरेक्ट्री बनाएं
mkdir mynodejsapp

अगर आपको यह मैसेज दिखता है, तो 'अनुमति दें' बटन पर क्लिक करें, ताकि आप उसे कॉपी करके वर्कस्टेशन में चिपका सकें.

58149777e5cc350a.png

  1. इस डायरेक्ट्री में बदलाव करें और इसे फ़ाइल फ़ोल्डर के तौर पर खोलें. इससे नए फ़ोल्डर में फ़ाइल फ़ोल्डर का कॉन्फ़िगरेशन बन जाएगा और एडिटर फिर से लोड हो जाएगा.
cd mynodejsapp && code-oss-cloud-workstations -r --folder-uri="$PWD"
  1. एक नया टर्मिनल फिर से खोलें. NVM का इस्तेमाल करके, Node और NPM इंस्टॉल करें.
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.2/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

4. नया स्टार्टर ऐप्लिकेशन बनाएं

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

नीचे दिए गए निर्देश को चलाकर, package.json फ़ाइल बनाई जा रही है

npm init
    Choose the `entry point: (index.js) src/index.js` and leave default values for the rest of the parameters. This will create the `package.json` 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", स्क्रिप्ट में शुरुआती निर्देश शामिल करने के लिए, IDE में package.json फ़ाइल खोलकर उसमें बदलाव करें. बदलाव के बाद, स्क्रिप्ट नीचे दिए गए कोड स्निपेट की तरह दिखनी चाहिए:

"scripts": {
    "start": "node src/index.js",
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  1. एक्सप्रेस डिपेंडेंसी जोड़ना

हम जो कोड जोड़ने जा रहे हैं वह 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": "",
 "license": "ISC",
 "dependencies": {
   "express": "^4.17.3"
 }
}
  1. index.js फ़ाइल बनाना

एक्सप्लोरर व्यू में 'नया फ़ोल्डर' चुनकर, src नाम की सोर्स डायरेक्ट्री बनाएं.

eb507d48f283ce46.png

src/index.js फ़ाइल बनाएं

3e3e6e6062e501fc.png

कोड का इस्तेमाल करें

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 मौजूद नहीं है. साथ ही, इस ऐप्लिकेशन को कंटेनर बनाने के लिए, डेवलपर को Docker की जानकारी की ज़रूरत नहीं है.

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

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

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

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

Google Cloud में साइन इन करें

  1. Cloud Code आइकॉन पर क्लिक करें और "Google Cloud में साइन इन करें" को चुनें:

1769afd39be372ff.png

  1. "साइन इन करने के लिए आगे बढ़ें" पर क्लिक करें.

923bb1c8f63160f9.png

  1. Terminal में आउटपुट देखें और लिंक खोलें:

517fdd579c34aa21.png

  1. अपने Qwiklabs छात्र-छात्राओं के क्रेडेंशियल के साथ लॉगिन करें.

db99b345f7a8e72c.png

  1. "अनुमति दें" चुनें:

a5376553c430ac84.png

  1. पुष्टि करने वाला कोड कॉपी करें और Workstation टैब पर वापस जाएं.

6719421277b92eac.png

  1. पुष्टि करने के लिए भेजा गया कोड चिपकाएं और Enter दबाएं.

e9847cfe3fa8a2ce.png

Kubernetes क्लस्टर जोड़ें

  1. कोई क्लस्टर जोड़ें

62a3b97bdbb427e5.png

  1. Google Kubernetes Engine चुनें:

9577de423568bbaa.png

  1. प्रोजेक्ट चुनें.

c5202fcbeebcd41c.png

  1. "mycluster" चुनें जो शुरुआती सेटअप में बनाया गया था.

33863e94d1c5045f.png

  1. क्लस्टर अब Cloud Code के तहत, Kubernetes क्लस्टर की सूची में दिखता है. क्लस्टर को यहां से नेविगेट करें और उसके बारे में ज़्यादा जानें.

7e5f50662d4eea3c.png

gcloud cli का इस्तेमाल करके मौजूदा प्रोजेक्ट आईडी सेट करें

  1. qwiklabs पेज से इस लैब का प्रोजेक्ट आईडी कॉपी करें.

fcff2d10007ec5bc.png

  1. प्रोजेक्ट आईडी सेट करने के लिए, टर्मिनल से gcloud cli कमांड चलाएं. कमांड चलाने से पहले, सैंपल प्रोजेक्ट आईडी बदलें. नीचे दिया गया निर्देश चलाने से पहले, प्रोजेक्ट आईडी डालें.
gcloud config set project qwiklabs-gcp-project-id

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

  1. Cloud Shell Editor में सबसे नीचे मौजूद पैनल में, Cloud Code फ़ाॅर्म चुनें

c5dd5a749136407b.png

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

7da53b9480e8eb0d.png

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

a6e58a7f0d117391.png

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

13236a26c8dbe84f.png

  1. प्रोग्रेस और सूचनाएं देखने के लिए, निचले पैनल में आउटपुट टैब और ड्रॉपडाउन में Kubernetes: Run/Debug चुनें

606ff9cdebc03dff.png

  1. "Kubernetes: रन/डीबग - ज़्यादा जानकारी" चुनें अतिरिक्त विवरण और कंटेनर से लाइव स्ट्रीमिंग लॉग देखने के लिए दाईं ओर दिए गए चैनल ड्रॉप-डाउन में

ab45d2574f4f2478.png

  1. "Kubernetes: रन/डीबग" चुनकर, आसान बनाए गए व्यू पर वापस जाएं ड्रॉपडाउन से
  2. बिल्ड और टेस्ट पूरे होने के बाद, आउटपुट टैब में यह मैसेज दिखता है: Resource deployment/mynodejsapp status completed successfully और एक यूआरएल दिखता है: "सर्विस डेमो-ऐप्लिकेशन से फ़ॉरवर्ड किया गया यूआरएल: http://localhost:8080"
  3. Cloud Code टर्मिनल में, आउटपुट (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. ऐप्लिकेशन को debug मोड में चलाने के लिए, सबसे नीचे मौजूद मेन्यू में Cloud Code पर क्लिक करें और Debug on Kubernetes को चुनें.

dbd0c6cfd9e9d0e9.png

  • 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. सबसे नीचे मौजूद स्टेटस बार का रंग नीले से नारंगी रंग में बदल जाता है. इससे पता चलता है कि यह डीबग मोड में है.

d1224f12cd659995.png

  1. 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="Hello from Node"; वाला स्टेटमेंट ढूंढें
  3. लाइन नंबर की बाईं ओर मौजूद खाली जगह पर क्लिक करके, उस लाइन में एक ब्रेकपॉइंट जोड़ें. ब्रेकपॉइंट सेट होने का पता लगाने के लिए, लाल रंग का इंंडिकेटर दिखेगा
  4. अपने ब्राउज़र को फिर से लोड करें और ध्यान दें कि डीबगर, ब्रेकपॉइंट पर प्रोसेस को रोक देता है. साथ ही, इससे आपको GKE (जीकेई) में रिमोट तरीके से चल रहे ऐप्लिकेशन के वैरिएबल और स्थिति की जांच करने की अनुमति मिलती है
  5. जब तक आपको "message" वैरिएबल नहीं मिल जाता, तब तक वैरिएबल सेक्शन में नीचे की ओर क्लिक करते रहें.
  6. 7cfdee4fd6ef5c3a.png पर चरण को दबाकर, लाइन चलाएं
  7. "message" वैरिएबल की मौजूदा वैल्यू बदलकर "Hello from Node" करें
  8. वैरिएबल के नाम "टारगेट" पर दो बार क्लिक करें और पॉप-अप में, वैल्यू को बदलकर "Hi from Node" जैसा कुछ करें
  9. डीबग कंट्रोल पैनल में 'जारी रखें' बटन पर क्लिक करें
  10. अपने ब्राउज़र में उस जवाब की समीक्षा करें जो अब आपकी डाली गई अपडेट की गई वैल्यू दिखाता है.
  11. "डीबग" बंद करना मोड चालू करने के लिए, 'रोकें' बटन 647213126d7a4c7b.png को दबाएं. इसके बाद, ब्रेकपॉइंट पर फिर से क्लिक करके ब्रेकपॉइंट हटाएं.

6. सीआरयूडी रेस्ट सर्विस की सुविधा आसानी से बनाई जा रही है

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

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

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

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

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

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

unzip app.zip

इस कोड में ये शामिल हैं

  • item के लिए, इकाई मॉडल के साथ मॉडल फ़ोल्डर
  • CRUD से जुड़ी कार्रवाइयां करने वाले कोड के साथ controllers फ़ोल्डर
  • रूट फ़ोल्डर, जो खास यूआरएल पैटर्न को अलग-अलग कॉल पर रूट करता है
  • डेटाबेस कनेक्टिविटी की जानकारी वाला config फ़ोल्डर
  1. ध्यान दें कि db.config.js फ़ाइल का डेटाबेस कॉन्फ़िगरेशन, ऐसे एनवायरमेंट वैरिएबल के बारे में बताता है जिन्हें डेटाबेस से कनेक्ट करने के लिए दिया जाना ज़रूरी है. इसके अलावा, आपको यूआरएल एन्कोडिंग के लिए आने वाले अनुरोध को भी पार्स करना होगा.
  2. src/index.js में नीचे दिया गया कोड स्निपेट जोड़ें, ताकि app.listen(PORT, () => { से शुरू होने वाले आखिरी सेक्शन से ठीक पहले, अपनी मुख्य JavaScript फ़ाइल के सीआरयूडी कोड से कनेक्ट किया जा सके
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 Code को चुनें. इसके बाद, स्क्रीन पर सबसे ऊपर मौजूद Debug on Kubernetes को चुनें.
  2. बिल्ड और टेस्ट पूरे हो जाने के बाद, आउटपुट टैब में Resource deployment/mynodejsapp status completed successfully दिखेगा और एक यूआरएल दिखेगा: "mynodejsapp से फ़ॉरवर्ड किया गया यूआरएल: http://localhost:8080"
  3. कुछ आइटम जोड़ें.

Cloud Shell Terminal से, यहां दिए गए कमांड चलाएं

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 चलाकर जीईटी की जांच करें. कमांड लाइन से भी कर्ल चलाया जा सकता है
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

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

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

लैब पूरा होने के बाद, स्टोरेज खाली करने के लिए:

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