1. खास जानकारी
Google Cloud Functions, इवेंट पर आधारित बिना सर्वर वाला कंप्यूट प्लैटफ़ॉर्म है. Cloud Functions, आपको संसाधनों के प्रावधान या बदलती ज़रूरतों को पूरा करने के लिए स्केल करने की चिंता किए बिना अपना कोड लिखने देता है.
JavaScript में लिखे गए Cloud Functions, Google Cloud Platform पर Node.js वाले माहौल में काम करते हैं. पोर्टेबिलिटी और स्थानीय जांच चालू करने के लिए आप अपने Cloud Function को किसी भी मानक Node.js रनटाइम में चला सकते हैं.
सिलसिलेवार तरीके से निर्देश
इस कोडलैब में, आपको Node.js के लिए एक Cloud Function बनाना होगा. इससे यह पता चलेगा कि कोई तापमान सही है या बहुत ज़्यादा है. आपको अपनी लोकल मशीन पर विज़ुअल स्टूडियो कोड का इस्तेमाल करके, Cloud फ़ंक्शन बनाना होगा, उसकी जांच करनी होगी, और उसे डीबग करना होगा. आखिर में, अपने फ़ंक्शन को Google Cloud Platform पर डिप्लॉय करें.
आपको इनके बारे में जानकारी मिलेगी
- Node.js के लिए फ़ंक्शन फ़्रेमवर्क.
- स्थानीय तौर पर एचटीटीपी क्लाउड फ़ंक्शन बनाएं और उसकी जांच करें.
- अपनी लोकल मशीन से एचटीटीपी फ़ंक्शन को डीबग करना.
- अपनी लोकल मशीन से एचटीटीपी फ़ंक्शन डिप्लॉय करें.
2. सेटअप और ज़रूरी शर्तें
ज़रूरी शर्तें
- Cloud SDK टूल
- विज़ुअल स्टूडियो कोड
- Node.js 8.6.0 या इसके बाद का वर्शन (Node.js इंस्टॉल करने के लिए, nvm का इस्तेमाल करें. अपना वर्शन देखने के लिए, node –version चलाएं)
- मेरा पहला फ़ंक्शन: Node.js गाइड का पूरा होना
लागत
इस कोडलैब के लिए, डिप्लॉय किए गए Cloud Function को सिर्फ़ एक बार शुरू करने की ज़रूरत होती है. फिर भी बिलिंग के काम करने के तरीके को समझने के लिए, आपको Cloud Functions API की कीमत की जानकारी देनी चाहिए.
Google के कई एपीआई का इस्तेमाल बिना शुल्क के किया जा सकता है. हालांकि, Google Cloud Platform (यानी इसके प्रॉडक्ट और एपीआई) का इस्तेमाल मुफ़्त में नहीं किया जा सकता. Cloud Functions का इस्तेमाल करने के लिए, आपके पास एक चालू बिलिंग खाता होना चाहिए. ध्यान रखें कि Google Cloud Platform (GCP) के कुछ प्रॉडक्ट में "हमेशा मुफ़्त" टीयर की सुविधा होती है. इस टीयर के लिए, आपको बिलिंग की सुविधा चालू करनी होगी. कोडलैब के लिए, Cloud Functions को हर बार इस्तेमाल करने पर, उस फ़्री टियर में से शुल्क काट लिया जाता है. जब तक आपने हर महीने तय की गई कुल सीमा के अंदर डेटा इस्तेमाल किया है, तब तक आपसे कोई शुल्क नहीं लिया जाएगा.
3. Node.js के लिए फ़ंक्शन फ़्रेमवर्क इंस्टॉल करें
Node.js के लिए फ़ंक्शन फ़्रेमवर्क, एक ओपन सोर्स FaaS (फ़ंक्शन के तौर पर सेवा) फ़्रेमवर्क है. इसका इस्तेमाल, पोर्टेबल Node.js फ़ंक्शन लिखने के लिए किया जाता है. इसे Google Cloud Functions की टीम ने उपलब्ध कराया है.
फ़ंक्शन फ़्रेमवर्क की मदद से, ऐसे लाइटवेट फ़ंक्शन लिखे जा सकते हैं जो कई अलग-अलग एनवायरमेंट में चलते हैं. जैसे:
- Google Cloud Functions
- आपकी लोकल डेवलपमेंट मशीन
- GKE (जीकेई) पर Cloud Run और Cloud Run
- Kनेटिव-आधारित एनवायरमेंट
नया node.js ऐप्लिकेशन बनाएं.
npm init
डिफ़ॉल्ट वैल्यू स्वीकार करते समय, पक्का करें कि आपने अपने ऐप्लिकेशन के एंट्री पॉइंट के तौर पर index.js
का इस्तेमाल किया हो.
अब Node.js के लिए फ़ंक्शन फ़्रेमवर्क इंस्टॉल करें.
npm install @google-cloud/functions-framework
अपना package.json खोलें. पुष्टि करें कि आपको फ़ंक्शन फ़्रेमवर्क, डिपेंडेंसी के तौर पर दिख रहा हो, जैसा कि यहां दिए गए उदाहरण में दिखाया गया है.
"dependencies": { "@google-cloud/functions-framework": "^1.7.1" }
Functions फ़्रेमवर्क अब इंस्टॉल हो गया है. अब आप अपना Cloud फ़ंक्शन बनाने के लिए तैयार हैं.
4. स्थानीय तौर पर एचटीटीपी क्लाउड फ़ंक्शन बनाएं और उसकी जांच करें
लोकल 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 कोड में इंटिग्रेट किए गए टर्मिनल का इस्तेमाल करता है.
विज़ुअल स्टूडियो कोड में, टर्मिनल विंडो खोलें.
यह कमांड चलाएं:
node node_modules/@google-cloud/functions-framework --target=validateTemperature
इस निर्देश से लोकल सर्वर चालू होता है, जो सर्वर को एचटीटीपी अनुरोध मिलने पर validateTemperature
फ़ंक्शन को कॉल करने के लिए तैयार होता है.
आपको अपनी टर्मिनल विंडो में यह आउटपुट दिखेगा:
Serving function... Function: validateTemperature URL: http://localhost:8080/
टर्मिनल विंडो पैनल में, New Terminal
प्लस आइकॉन पर क्लिक करके, वीएस कोड में एक दूसरी टर्मिनल विंडो बनाएं. आपको इन दो टर्मिनल विंडो के बीच स्विच करना होगा: पहली, फ़ंक्शन सर्व करने के लिए और दूसरी, कर्ल का इस्तेमाल करके फ़ंक्शन को कॉल करने के लिए.
ड्रॉप-डाउन का इस्तेमाल करके, टर्मिनल विंडो के बीच स्विच किया जा सकता है. अगर कोई टर्मिनल विंडो, फ़िलहाल कोई फ़ंक्शन दिखा रही है, तो ड्रॉप-डाउन सूची उसे 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
टाइप करें और सूची में सबसे ऊपर मौजूद आइटम को चुनें.
इस कोडलैब के लिए, नीचे दी गई इमेज के हिसाब से Only With Flag
चुनें:
अब अपने फ़ंक्शन को दिखाने के लिए, VS Code में इस्तेमाल की गई टर्मिनल विंडो को फिर से लोड करें. इसके लिए, सबसे दाईं ओर दिखने वाले चेतावनी आइकॉन पर कर्सर घुमाएं.
Relaunch Terminal
पर क्लिक करें.
फिर से लोड किए गए टर्मिनल विंडो से, नीचे दिए गए निर्देश का इस्तेमाल करके, अपना फ़ंक्शन उपलब्ध कराने के लिए, फ़ंक्शन फ़्रेमवर्क को फिर से चलाएं:
node --inspect node_modules/.bin/functions-framework --target=validateTemperature
जहां --inspect
फ़्लैग, Node.js को डीबग करने वाले क्लाइंट को सुनने के लिए कहता है. ज़्यादा जानकारी के लिए, कृपया डीबग करने से जुड़ा नोड दस्तावेज़ देखें.
ध्यान दें कि node_modules/@google-cloud/functions-framework के बजाय, node_modules/.bin/functions-framework का इस्तेमाल किया जा रहा है. जांच मोड का इस्तेमाल करने के लिए, आपको /node_modules/.bin में अपने-आप सिमलिंक किए गए एक्ज़ीक्यूटेबल का इस्तेमाल करना होगा.
इस बार आपको वीएस कोड में नारंगी रंग का स्टेटस बार दिखेगा, जिससे पता चलेगा कि डीबगर जुड़ा है.
लाइन नंबर की बाईं ओर मौजूद मार्जिन पर क्लिक करके, लाइन 3 पर ब्रेकपॉइंट सेट करें.
ब्रेकपॉइंट आइकॉन को चमकीला लाल रंग देना चाहिए. इससे पता चलता है कि कोड की इस लाइन को डीबगर ऐक्सेस कर सकता है.
दूसरी टर्मिनल विंडो में, यहां दिया गया कर्ल कमांड चलाकर ब्रेकपॉइंट दबाएं.
curl -X POST http://localhost:8080
आपको लाइन 3 पर पीला हाइलाइट दिखेगा. इस हाइलाइट से पता चलता है कि यह लाइन, डीबगर की जांच का मौजूदा स्टेटमेंट है.
तापमान के वैरिएबल पर माउस घुमाकर पुष्टि करें कि इसका कॉन्टेंट undefined
है, क्योंकि अनुरोध में तापमान के पेलोड की जानकारी नहीं दी गई थी.
अगला स्टेटमेंट चलाने के लिए स्टेप-ओवर आइकॉन पर क्लिक करें.
आपको मौजूदा स्टेटमेंट, if स्टेटमेंट के else हिस्से पर जंप करते हुए दिखेगा.
इस डेमो में, यह माना जा सकता है कि तापमान की जानकारी भेजने के लिए, स्पेसिफ़िकेशन में किए गए सभी अनुरोधों की ज़रूरत है. अगर तापमान की रीडिंग नहीं दी गई है, तो फ़ंक्शन को अपवाद दिखाना चाहिए.
डीबगर को डिसकनेक्ट करने के लिए डिसकनेक्ट करें बटन पर क्लिक करें.
अपनी पहली टर्मिनल विंडो में, Ctrl + C
दबाकर अपने फ़ंक्शन को चलने से रोकें.
अपने फ़ंक्शन को अपडेट करके, अगर तापमान की वैल्यू तय नहीं है, तो नीचे दिखाए गए तरीके से अपवाद दिखाने के लिए, if स्टेटमेंट जोड़ें:
exports.validateTemperature = async (req, res) => { try { // add this if statement below line #2 if (!req.body.temp) { throw "Temperature is undefined"; } ...
अपनी पहली टर्मिनल विंडो में, डीबगर को अटैच करने से बचने के लिए, नीचे दिए गए निर्देश को -जांच फ़्लैग के बिना चलाकर, क्लाउड फ़ंक्शन को फिर से चलाना शुरू करें.
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 Function बना लिया है, उसकी जांच कर ली है, और उसे डीबग कर लिया है, तो अब आप उसे 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
नाम के किसी क्लाउड फ़ंक्शन को डिप्लॉय करने के लिए बना gcloud सबकमांड, जिसका एंट्री पॉइंटvalidateTemperature
है--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 फ़ंक्शन को हर महीने असाइन करने की संख्या की तुलना में, Cloud फ़ंक्शन का अनजाने में इस्तेमाल कई बार किया गया है. आपके पास Cloud फ़ंक्शन को मिटाने या दूसरे चरण में बनाए गए प्रोजेक्ट को मिटाने का विकल्प है.
'क्लाउड फ़ंक्शन' को मिटाने के लिए, https://console.cloud.google.com/functions/ पर जाकर 'क्लाउड फ़ंक्शन' के कंसोल पर जाएं. पक्का करें कि दूसरे चरण में बनाया गया प्रोजेक्ट ही चुना गया हो.
वह validateTemperature फ़ंक्शन चुनें जिसे आपने छठे चरण में डिप्लॉय किया था. इसके बाद, 'मिटाएं' पर क्लिक करें.
अगर आपको पूरा प्रोजेक्ट मिटाना है, तो https://console.cloud.google.com/cloud-resource-manager पर जाएं और दूसरे चरण में बनाया गया प्रोजेक्ट चुनें. इसके बाद, 'मिटाएं' चुनें. अगर प्रोजेक्ट मिटाया जाता है, तो आपको Cloud SDK में प्रोजेक्ट बदलने होंगे. gcloud projects list चलाकर, सभी उपलब्ध प्रोजेक्ट की सूची देखी जा सकती है.
8. बधाई हो!
कोडलैब पूरा करने के लिए बधाई. Cloud Functions, Node.js रनटाइम के साथ कैसे काम करता है और Cloud Functions के साथ लोकल डीबगिंग कैसे काम करती है, इस बारे में ज़्यादा जानें.
हमने क्या-क्या शामिल किया है
- Node.js के लिए फ़ंक्शन फ़्रेमवर्क.
- स्थानीय तौर पर एचटीटीपी क्लाउड फ़ंक्शन बनाएं और उसकी जांच करें.
- अपनी लोकल मशीन से एचटीटीपी फ़ंक्शन को डीबग करना.
- अपनी लोकल मशीन से एचटीटीपी फ़ंक्शन डिप्लॉय करें.