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 का इस्तेमाल करके, Cloud फ़ंक्शन बनाया जाएगा, उसकी जांच की जाएगी, और उसे डीबग किया जाएगा. आखिर में, आपको Google Cloud Platform पर अपना फ़ंक्शन डिप्लॉय करना होगा.

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

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

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

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

लागत

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

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

3. Node.js के लिए Functions Framework इंस्टॉल करना

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

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

  • 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 Framework अब इंस्टॉल हो गया है. अब Cloud फ़ंक्शन बनाया जा सकता है.

4. एचटीटीपी Cloud Functions को स्थानीय तौर पर बनाना और उसकी जांच करना

लोकल 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

अस्थायी वैरिएबल पर कर्सर घुमाकर पुष्टि करें कि उसका कॉन्टेंट 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

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

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

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

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

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

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

आपको Cloud Functions API चालू करने के लिए कहा जाएगा. एपीआई चालू करने के लिए, 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 को मिटा दें या चरण 2 में बनाया गया प्रोजेक्ट मिटा दें. उदाहरण के लिए, अगर Cloud Function को फ़्री टियर में Cloud Function को हर महीने इस्तेमाल करने की तय सीमा से ज़्यादा बार इस्तेमाल किया गया है, तो अनजाने में शुल्क लग सकता है.

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

छठे चरण में डिप्लॉय किया गया 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 Framework.
  • एचटीटीपी Cloud Function को स्थानीय तौर पर बनाएं और उसकी जांच करें.
  • अपनी लोकल मशीन से एचटीटीपी फ़ंक्शन को डीबग करें.
  • अपनी लोकल मशीन से एचटीटीपी फ़ंक्शन डिप्लॉय करें.