Visual Studio Code का इस्तेमाल करके, Node.js के लिए Cloud Functions के साथ लोकल डेवलपमेंट

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

Google Cloud Functions, इवेंट-ड्रिवन सर्वरलेस कंप्यूट प्लैटफ़ॉर्म है. Cloud Functions की मदद से, बदलती हुई ज़रूरतों को पूरा करने के लिए, संसाधनों को उपलब्ध कराने या स्केलिंग करने की चिंता किए बिना कोड लिखा जा सकता है.

JavaScript में लिखे गए Cloud Functions, Google Cloud Platform पर Node.js वाले माहौल में काम करते हैं. पोर्टेबिलिटी और लोकल टेस्टिंग की सुविधा चालू करने के लिए, अपने Cloud Function को किसी भी स्टैंडर्ड Node.js रनटाइम में चलाया जा सकता है.

सिलसिलेवार निर्देश

इस कोडलैब में, आपको Node.js के लिए एक Cloud Function बनाना होगा. इससे यह पता चलेगा कि तय किया गया तापमान सही है या बहुत ज़्यादा है. आपको अपनी लोकल मशीन पर Visual Studio Code का इस्तेमाल करके, अपना क्लाउड फ़ंक्शन बनाना, उसकी जांच करनी, और उसे डीबग करना होगा. आखिर में, आपको अपना फ़ंक्शन Google Cloud Platform पर डिप्लॉय करना होगा.

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

  • Node.js के लिए Functions फ़्रेमवर्क.
  • स्थानीय तौर पर एचटीटीपी Cloud फ़ंक्शन बनाना और उसकी जांच करना.
  • अपनी लोकल मशीन से एचटीटीपी फ़ंक्शन को डीबग करना.
  • अपनी लोकल मशीन से एचटीटीपी फ़ंक्शन डिप्लॉय करें.

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

ज़रूरी शर्तें

लागत

इस कोडलैब में, डिप्लॉय किए गए Cloud Function को सिर्फ़ एक बार कॉल करने की ज़रूरत होती है. हालांकि, बिलिंग के काम करने के तरीके को समझने के लिए, आपको Cloud Functions API की कीमत की जानकारी देखनी चाहिए.

Google के कई एपीआई का इस्तेमाल बिना शुल्क के किया जा सकता है. हालांकि, Google Cloud Platform (यानी इसके प्रॉडक्ट और एपीआई) का इस्तेमाल करने के लिए शुल्क देना पड़ता है. Cloud Functions का इस्तेमाल करने के लिए, आपके पास एक चालू बिलिंग खाता होना चाहिए. ध्यान रखें कि Google Cloud Platform (GCP) के कुछ प्रॉडक्ट में "हमेशा मुफ़्त" टीयर की सुविधा होती है. इस टीयर के लिए, आपको बिलिंग की सुविधा चालू करनी होगी. कोडलैब के लिए, Cloud Functions को हर बार इस्तेमाल करने पर, उस फ़्री टियर में से शुल्क काट लिया जाता है. जब तक आपने हर महीने तय की गई कुल सीमा के अंदर डेटा इस्तेमाल किया है, तब तक आपसे कोई शुल्क नहीं लिया जाएगा.

3. Node.js के लिए Functions फ़्रेमवर्क इंस्टॉल करना

Node.js के लिए फ़ंक्शन फ़्रेमवर्क, एक ओपन सोर्स FaaS (फ़ंक्शन के तौर पर सेवा) फ़्रेमवर्क है. इसका इस्तेमाल, पोर्टेबल Node.js फ़ंक्शन लिखने के लिए किया जाता है. इसे Google Cloud Functions की टीम ने उपलब्ध कराया है.

Functions फ़्रेमवर्क की मदद से, ऐसे छोटे फ़ंक्शन लिखे जा सकते हैं जो कई अलग-अलग एनवायरमेंट में काम करते हैं. जैसे:

  • Google Cloud Functions
  • आपकी लोकल डेवलपमेंट मशीन
  • Cloud Run और GKE पर Cloud Run
  • Knative पर आधारित एनवायरमेंट

नया node.js ऐप्लिकेशन बनाएं.

npm init

डिफ़ॉल्ट वैल्यू स्वीकार करते समय, अपने ऐप्लिकेशन के एंट्री पॉइंट के तौर पर index.js का इस्तेमाल करना न भूलें.

अब Node.js के लिए Functions Framework इंस्टॉल करें.

npm install @google-cloud/functions-framework

अपना package.json खोलें. पुष्टि करें कि आपको फ़ंक्शन फ़्रेमवर्क, डिपेंडेंसी के तौर पर दिख रहा है, जैसा कि नीचे दिए गए उदाहरण में दिखाया गया है.

"dependencies": {
   "@google-cloud/functions-framework": "^1.7.1"
 }

Functions फ़्रेमवर्क अब इंस्टॉल हो गया है. अब आप अपना Cloud फ़ंक्शन बनाने के लिए तैयार हैं.

4. स्थानीय तौर पर एचटीटीपी Cloud फ़ंक्शन बनाना और उसका टेस्ट करना

लोकल Cloud फ़ंक्शन बनाना

इस सेक्शन में, आपको एचटीटीपी अनुरोधों का जवाब देने वाला एचटीटीपी फ़ंक्शन बनाना और उसकी जांच करनी होगी.

package.json फ़ाइल वाली डायरेक्ट्री में, index.js नाम की एक नई फ़ाइल बनाएं.

ये जोड़ें:

exports.validateTemperature = async (req, res) => {
 try {
   if (req.body.temp < 100) {
     res.status(200).send("Temperature OK");
   } else {
     res.status(200).send("Too hot");
   }
 } catch (error) {
   //return an error
   console.log("got error: ", error);
   res.status(500).send(error);
 }
};

अब आपके पास फ़ंक्शन की जांच करने का विकल्प है.

Visual Studio Code में फ़ंक्शन की जांच करना

इसके बाद, यह कोडलैब, Visual Studio Code में इंटिग्रेट किए गए टर्मिनल का इस्तेमाल करता है.

Visual Studio Code में, कोई टर्मिनल विंडो खोलें.

यह कमांड चलाएं:

node node_modules/@google-cloud/functions-framework --target=validateTemperature

यह कमांड एक स्थानीय सर्वर शुरू करता है, जो सर्वर को एचटीटीपी अनुरोध मिलने पर validateTemperature फ़ंक्शन को कॉल करने के लिए तैयार होता है.

आपको अपनी टर्मिनल विंडो में यह आउटपुट दिखेगा:

Serving function...
Function: validateTemperature
URL: http://localhost:8080/

VS Code में दूसरी टर्मिनल विंडो बनाने के लिए, टर्मिनल विंडो पैनल में New Terminal प्लस आइकॉन पर क्लिक करें. आपको इन दो टर्मिनल विंडो के बीच स्विच करना होगा: पहली विंडो, फ़ंक्शन को दिखाने के लिए और दूसरी विंडो, curl का इस्तेमाल करके फ़ंक्शन को कॉल करने के लिए.

bceb65f366d837ae.png

ड्रॉप-डाउन का इस्तेमाल करके, टर्मिनल विंडो के बीच स्विच किया जा सकता है. अगर कोई टर्मिनल विंडो फ़िलहाल किसी फ़ंक्शन को दिखा रही है, तो ड्रॉप-डाउन सूची में उसे node के तौर पर दिखाया जाता है. ऐसा न होने पर, इसे zsh (या उस शेल का नाम) कहा जाता है जिसका इस्तेमाल किया जा रहा है.

दूसरी टर्मिनल विंडो में, validateTemperature फ़ंक्शन को सेवा देने वाले लोकल सर्वर पर, तापमान का 50 वाला पेलोड भेजने के लिए यह कमांड चलाएं.

curl -X POST http://localhost:8080 -H "Content-Type:application/json"  -d '{"temp":"50"}'

आपको क्लाउड फ़ंक्शन से यह जवाब मिलना चाहिए:

Temperature OK

दूसरी टर्मिनल विंडो में, तापमान का "बहुत ज़्यादा" पेलोड भेजकर, फ़ंक्शन की फिर से जांच करें. इसके लिए, नीचे दिया गया तरीका अपनाएं:

curl -X POST http://localhost:8080 -H "Content-Type:application/json"  -d '{"temp":"120"}'

आपको क्लाउड फ़ंक्शन से यह जवाब मिलना चाहिए:

Too hot

आखिर में, फ़ंक्शन को कॉल करके उसकी जांच करें. इसके लिए, ऐसे पेलोड का इस्तेमाल करें जो मौजूद नहीं है.

curl -X POST http://localhost:8080

आपको क्लाउड फ़ंक्शन से यह जवाब मिलना चाहिए:

Too hot

आम तौर पर, अगर तापमान की कोई वैल्यू नहीं दी गई है, तो फ़ंक्शन को "बहुत गर्म" नहीं दिखाना चाहिए. आपको कोड में कोई गड़बड़ी मिली है.

अपने फ़ंक्शन को चलाने से रोकने के लिए, पक्का करें कि आपने फ़ंक्शन को दिखाने वाली पहली टर्मिनल विंडो में Ctrl + C दबाया हो.

5. अपनी लोकल मशीन से एचटीटीपी फ़ंक्शन को डीबग करना

Visual Studio Code में कमांड पैलेट खोलें. Mac का इस्तेमाल करने पर, Cmd + Shift + P का इस्तेमाल करें. अगर आपके पास Windows है, तो Ctrl + Shift + P. का इस्तेमाल करें

कमांड पैलेट में auto attach टाइप करें और सूची में सबसे ऊपर मौजूद आइटम चुनें.

601e542b4ec9f6f9.png

इस कोडलैब के लिए, नीचे दी गई इमेज में दिखाए गए तरीके से Only With Flag चुनें:

b9e6b762d150e62b.png

अब अपने फ़ंक्शन को दिखाने के लिए, VS Code में इस्तेमाल की गई टर्मिनल विंडो को फिर से लोड करें. इसके लिए, सबसे दाईं ओर दिखने वाले चेतावनी आइकॉन पर कर्सर घुमाएं.

Relaunch Terminal पर क्लिक करें.

37b61e3fb546fc76.png

रीलोड की गई टर्मिनल विंडो से, अपने फ़ंक्शन को दिखाने के लिए, यह कमांड इस्तेमाल करके फ़ंक्शन फ़्रेमवर्क को फिर से चलाएं:

node --inspect node_modules/.bin/functions-framework --target=validateTemperature

यहां --inspect फ़्लैग, Node.js को डीबगिंग क्लाइंट के लिए सुनने के लिए कहता है. ज़्यादा जानकारी के लिए, कृपया डीबग करने के बारे में Node का दस्तावेज़ देखें.

ध्यान दें कि node_modules/@google-cloud/functions-framework के बजाय, node_modules/.bin/functions-framework का इस्तेमाल किया जा रहा है. जांच मोड का इस्तेमाल करने के लिए, आपको /node_modules/.bin में अपने-आप लिंक किए गए एक्सीक्यूटेबल का इस्तेमाल करना होगा.

इस बार, आपको VS Code में एक ऑरेंज स्टेटस बार दिखेगा. इससे पता चलेगा कि डीबगर अटैच हो गया है.

लाइन नंबर की बाईं ओर मौजूद मार्जिन में क्लिक करके, तीसरी लाइन पर ब्रेकपॉइंट सेट करें.

2fbb4d5916e1dbfa.png

ब्रेकपॉइंट आइकॉन, चमकदार लाल रंग में जलना चाहिए. इससे पता चलता है कि डीबगर, कोड की इस लाइन को ऐक्सेस कर सकता है.

846e6c5993cc87f9.png

दूसरी टर्मिनल विंडो में, यहां दिया गया curl कमांड चलाकर ब्रेकपॉइंट पर जाएं.

curl -X POST http://localhost:8080 

आपको तीसरी लाइन पर पीले रंग का हाइलाइट दिखेगा. इस हाइलाइट से पता चलता है कि यह लाइन, डीबगर की जांच का मौजूदा स्टेटमेंट है.

206c7ed1eb189e90.png

temp वैरिएबल पर कर्सर घुमाकर पुष्टि करें कि उसका कॉन्टेंट undefined है, क्योंकि अनुरोध में तापमान का पेलोड नहीं दिया गया था.

97979025f4bf2842.png

अगला स्टेटमेंट चलाने के लिए, 'एक स्टेप आगे बढ़ें' आइकॉन पर क्लिक करें.

आपको मौजूदा स्टेटमेंट, if स्टेटमेंट के else हिस्से पर जंप करते हुए दिखेगा.

cf0e8ce7e0388f98.png

इस डेमो के लिए, यह माना जा सकता है कि स्पेसिफ़िकेशन के मुताबिक, सभी अनुरोधों में तापमान की जानकारी भेजना ज़रूरी है. अगर तापमान की रीडिंग नहीं दी गई है, तो फ़ंक्शन को अपवाद दिखाना चाहिए.

डीबगर को डिसकनेक्ट करने के लिए, 'डिसकनेक्ट करें' बटन पर क्लिक करें.

1070d059775ad769.png

अपनी पहली टर्मिनल विंडो में, Ctrl + C दबाकर अपने फ़ंक्शन को चलने से रोकें.

अपने फ़ंक्शन को अपडेट करके, अगर तापमान की वैल्यू तय नहीं है, तो नीचे दिखाए गए तरीके से अपवाद दिखाने के लिए, if स्टेटमेंट जोड़ें:

exports.validateTemperature = async (req, res) => {

 try {

   // add this if statement below line #2
   if (!req.body.temp) {
     throw "Temperature is undefined";
   }

 ...

अपनी पहली टर्मिनल विंडो में, डीबगर को अटैच करने से बचने के लिए, –inspect फ़्लैग के बिना यह कमांड चलाकर, अपने क्लाउड फ़ंक्शन को फिर से चलाना शुरू करें.

node node_modules/@google-cloud/functions-framework --target=validateTemperature

अपनी दूसरी टर्मिनल विंडो में यह निर्देश चलाकर पुष्टि करें कि कोई अपवाद मिला है या नहीं:

curl -X POST http://localhost:8080 

आपको अपने अनुरोध से यह आउटपुट दिखेगा:

Temperature is undefined

आपको पहली टर्मिनल विंडो में, फ़ंक्शन से लॉग की गई गड़बड़ी भी दिखेगी.

Serving function...
Function: validateTemperature
URL: http://localhost:8080/
got error:  Temperature is undefined

अब अपनी पहली टर्मिनल विंडो में Ctrl + C दबाकर, फ़ंक्शन को बंद किया जा सकता है.

6. अपनी लोकल मशीन से Google Cloud पर एचटीटीपी फ़ंक्शन को डिप्लॉय करना

अब आपने अपनी लोकल मशीन पर Cloud फ़ंक्शन बनाया, उसकी जांच की, और उसे डीबग कर लिया है. अब इसे Google Cloud पर डिप्लॉय किया जा सकता है.

यह पुष्टि करें कि आपने दूसरे चरण में बनाए गए प्रोजेक्ट का इस्तेमाल किया है. इसके लिए, यह कमांड चलाएं:

gcloud config get-value project

अगर आपने दूसरे चरण में जो प्रोजेक्ट चुना है वह चालू कॉन्फ़िगरेशन नहीं है, तो यह कमांड चलाएं:

gcloud config set project <project-name-created-step-2>

किसी भी टर्मिनल विंडो में, यह कमांड चलाएं:

gcloud functions deploy validateTemperature --trigger-http --runtime nodejs12 --allow-unauthenticated

यहां पैरामीटर के बारे में इस तरह बताया गया है:

  • deploy validateTemperature - validateTemperature नाम के Cloud फ़ंक्शन को validateTemperature नाम के एंट्री पॉइंट के साथ डिप्लॉय करने के लिए, gcloud का सब-कमांड
  • --trigger-http - ट्रिगर करने वाला इवेंट टाइप
  • --runtime nodejs12 - इस फ़ंक्शन के लिए टारगेट किया गया रनटाइम
  • --allow-unauthenticated - फ़ंक्शन को कॉल करने के लिए, सार्वजनिक ऐक्सेस की अनुमति देता है

आपको Cloud Functions के एपीआई चालू करने के लिए कहा जाएगा. एपीआई चालू करने के लिए, y टाइप करें.

API [cloudfunctions.googleapis.com] not enabled on project 
[1057316433766]. Would you like to enable and retry (this will take a 
few minutes)? (y/N)? y 

डिप्लॉयमेंट पूरा होने के बाद, आपको आउटपुट में ये चीज़ें दिखेंगी:

Deploying function (may take a while - up to 2 minutes)...done. 
availableMemoryMb: 256
buildId: <your-build-id>
entryPoint: validateTemperature
httpsTrigger:
  url: https://<your-region-and-project>.cloudfunctions.net/validateTemperature
...

अपनी टर्मिनल विंडो में, इस सार्वजनिक एंडपॉइंट को कॉल करने के लिए curl का इस्तेमाल करें.

curl -X POST https://<your-region-and-project>.cloudfunctions.net/validateTemperature -H "Content-Type:application/json"  -d '{"temp":"50"}'

और सही जवाब की पुष्टि करके, पुष्टि करें कि आपका क्लाउड फ़ंक्शन सही तरीके से डिप्लॉय हो गया है.

Temperature OK

7. व्यवस्थित करें

अनजाने में होने वाले शुल्कों से बचने के लिए, Cloud Function को मिटाएं या दूसरे चरण में बनाया गया प्रोजेक्ट मिटाएं. ऐसा तब करना होगा, जब इस Cloud Function को फ़्री टीयर में, Cloud Function को हर महीने इस्तेमाल करने के लिए तय किए गए कोटे से ज़्यादा बार इस्तेमाल किया गया हो.

Cloud फ़ंक्शन मिटाने के लिए, https://console.cloud.google.com/functions/ पर Cloud फ़ंक्शन के Cloud Console पर जाएं. पक्का करें कि आपने दूसरे चरण में जो प्रोजेक्ट बनाया है वह फ़िलहाल चुना गया प्रोजेक्ट हो.

वह validateTemperature फ़ंक्शन चुनें जिसे आपने छठे चरण में डिप्लॉय किया था. इसके बाद, 'मिटाएं' पर क्लिक करें.

4dada486485a935a.png

अगर आपको पूरा प्रोजेक्ट मिटाना है, तो https://console.cloud.google.com/cloud-resource-manager पर जाएं. इसके बाद, दूसरे चरण में बनाया गया प्रोजेक्ट चुनें और 'मिटाएं' को चुनें. प्रोजेक्ट मिटाने पर, आपको अपने Cloud SDK में प्रोजेक्ट बदलने होंगे. gcloud projects list चलाकर, सभी उपलब्ध प्रोजेक्ट की सूची देखी जा सकती है.

8. बधाई हो!

कोडलैब पूरा करने के लिए बधाई. Cloud Functions, Node.js रनटाइम के साथ कैसे काम करता है और Cloud Functions के साथ लोकल डीबगिंग कैसे काम करती है, इस बारे में ज़्यादा जानें.

हमने क्या-क्या शामिल किया है

  • Node.js के लिए Functions फ़्रेमवर्क.
  • स्थानीय तौर पर एचटीटीपी Cloud फ़ंक्शन बनाना और उसकी जांच करना.
  • अपनी लोकल मशीन से एचटीटीपी फ़ंक्शन को डीबग करना.
  • अपनी लोकल मशीन से एचटीटीपी फ़ंक्शन डिप्लॉय करें.