Cloud Functions का इस्तेमाल शुरू करने के लिए, इस ट्यूटोरियल को आज़माएं. इसमें ज़रूरी सेटअप टास्क से लेकर, दो फ़ंक्शन बनाने, उनकी जांच करने, और उन्हें डिप्लॉय करने के बारे में बताया गया है:
- "मैसेज जोड़ें" फ़ंक्शन, एक ऐसा यूआरएल दिखाता है जो टेक्स्ट वैल्यू स्वीकार करता है और उसे Cloud Firestore में लिखता है.
- "कैपिटल लेटर में बदलें" फ़ंक्शन, Cloud Firestore लिखने पर ट्रिगर होता है और टेक्स्ट को कैपिटल लेटर में बदलता है.
हमने इस सैंपल के लिए Cloud Firestore और एचटीटीपी ट्रिगर वाले JavaScript फ़ंक्शन को चुना है. इसकी एक वजह यह है कि इन बैकग्राउंड ट्रिगर को Firebase Local Emulator Suite की मदद से अच्छी तरह से टेस्ट किया जा सकता है. इस टूलसेट में Realtime Database, PubSub, Auth, और एचटीटीपी कॉल किए जा सकने वाले ट्रिगर भी काम करते हैं. बैकग्राउंड में ट्रिगर होने वाले अन्य ट्रिगर, जैसे कि Remote Config, TestLab, और Analytics ट्रिगर को इस पेज पर नहीं बताए गए टूलसेट का इस्तेमाल करके, इंटरैक्टिव तरीके से टेस्ट किया जा सकता है.
इस ट्यूटोरियल के इन सेक्शन में, सैंपल बनाने, उसकी जांच करने, और उसे डिप्लॉय करने का तरीका बताया गया है. अगर आपको सिर्फ़ कोड चलाना है और उसकी जांच करनी है, तो पूरे सैंपल कोड की समीक्षा करें पर जाएं.
Firebase प्रोजेक्ट बनाना
-
Firebase कंसोल में, प्रोजेक्ट जोड़ें पर क्लिक करें.
-
किसी मौजूदा Google Cloud प्रोजेक्ट में Firebase संसाधन जोड़ने के लिए, उसका प्रोजेक्ट नाम डालें या उसे ड्रॉपडाउन मेन्यू से चुनें.
-
नया प्रोजेक्ट बनाने के लिए, प्रोजेक्ट का नाम डालें. आपके पास प्रोजेक्ट के नाम के नीचे दिख रहे प्रोजेक्ट आईडी में बदलाव करने का विकल्प भी होता है. हालांकि, ऐसा करना ज़रूरी नहीं है.
-
-
अगर प्रॉम्प्ट मिलता है, तो Firebase की शर्तें पढ़ें और उन्हें स्वीकार करें.
-
जारी रखें पर क्लिक करें.
-
(ज़रूरी नहीं) अपने प्रोजेक्ट के लिए Google Analytics सेट अप करें. इससे Firebase के इन प्रॉडक्ट का इस्तेमाल करके, बेहतर अनुभव दिया जा सकता है: Firebase A/B Testing, Cloud Messaging, Crashlytics, In-App Messaging, और Remote Config (इसमें Personalization शामिल है).
कोई मौजूदा Google Analytics खाता चुनें या नया खाता बनाएं. नया खाता बनाने के बाद, Analytics रिपोर्टिंग की जगह चुनें. इसके बाद, डेटा शेयर करने की सेटिंग और अपने प्रोजेक्ट के लिए Google Analytics शर्तें स्वीकार करें.
-
प्रोजेक्ट बनाएं पर क्लिक करें. अगर आपको किसी मौजूदा Google Cloud प्रोजेक्ट में Firebase जोड़ना है, तो Firebase जोड़ें पर क्लिक करें.
Firebase, आपके Firebase प्रोजेक्ट के लिए अपने-आप संसाधन उपलब्ध कराता है. यह प्रोसेस पूरी होने के बाद, आपको Firebase कंसोल में अपने Firebase प्रोजेक्ट की खास जानकारी वाले पेज पर ले जाया जाएगा.
Node.js और Firebase CLI सेट अप करना
फ़ंक्शन लिखने के लिए, आपको Node.js एनवायरमेंट की ज़रूरत होगी. साथ ही, फ़ंक्शन को Cloud Functions रनटाइम में डिप्लॉय करने के लिए, आपको Firebase CLI की ज़रूरत होगी. Node.js और npm इंस्टॉल करने के लिए, Node Version Manager का इस्तेमाल करने का सुझाव दिया जाता है.
Node.js और npm इंस्टॉल करने के बाद, अपनी पसंद के तरीके से Firebase सीएलआई इंस्टॉल करें. npm के ज़रिए सीएलआई इंस्टॉल करने के लिए, यह कमांड इस्तेमाल करें:
npm install -g firebase-tools
इससे, दुनिया भर में उपलब्ध Firebase कमांड इंस्टॉल हो जाती है. अगर निर्देश काम नहीं करता है, तो आपको npm की अनुमतियां बदलनी पड़ सकती हैं.
firebase-tools
के नए वर्शन पर अपडेट करने के लिए, उसी कमांड को फिर से चलाएं.
प्रोजेक्ट शुरू करना
Firebase के लिए Cloud Functions SDK टूल को शुरू करते समय, आपको एक खाली प्रोजेक्ट बनाना होता है. इसमें डिपेंडेंसी और कुछ सैंपल कोड होता है. साथ ही, फ़ंक्शन बनाने के लिए TypeScript या JavaScript में से किसी एक को चुनना होता है. इस ट्यूटोरियल के लिए, आपको Cloud Firestore को भी शुरू करना होगा.
अपने प्रोजेक्ट को शुरू करने के लिए:
ब्राउज़र से लॉग इन करने और Firebase CLI की पुष्टि करने के लिए,
firebase login
चलाएं.अपने Firebase प्रोजेक्ट की डायरेक्ट्री पर जाएं.
firebase init firestore
रन करें. इस ट्यूटोरियल के लिए, Firestore के नियमों और इंडेक्स फ़ाइलों के लिए प्रॉम्प्ट मिलने पर, डिफ़ॉल्ट वैल्यू स्वीकार की जा सकती हैं. अगर आपने इस प्रोजेक्ट में अब तक Cloud Firestore का इस्तेमाल नहीं किया है, तो आपको Firestore के लिए शुरुआती मोड और जगह भी चुननी होगी. इसके बारे में Cloud Firestore का इस्तेमाल शुरू करना लेख में बताया गया है.firebase init functions
रन करें. सीएलआई, आपसे मौजूदा कोडबेस चुनने या नया कोडबेस शुरू करने और उसका नाम डालने के लिए कहता है. शुरुआत में, डिफ़ॉल्ट जगह पर मौजूद एक कोडबेस काफ़ी होता है. हालांकि, बाद में जब आपका कोडबेस बड़ा हो जाता है, तब आपको कोडबेस में फ़ंक्शन व्यवस्थित करने की ज़रूरत पड़ सकती है.सीएलआई में, भाषा से जुड़ी सहायता के लिए ये विकल्प उपलब्ध हैं:
- JavaScript
- Python
- TypeScript ज़्यादा जानकारी के लिए, TypeScript की मदद से फ़ंक्शन लिखना लेख पढ़ें.
इस ट्यूटोरियल के लिए, JavaScript को चुनें.
सीएलआई की मदद से, npm का इस्तेमाल करके डिपेंडेंसी इंस्टॉल की जा सकती हैं. अगर आपको डिपेंडेंसी को किसी दूसरे तरीके से मैनेज करना है, तो इस अनुरोध को अस्वीकार करना सुरक्षित है. हालांकि, अनुरोध अस्वीकार करने पर आपको फ़ंक्शन को चलाने या डिप्लॉय करने से पहले,
npm install
कमांड को चलाना होगा.
इन कमांड के पूरा होने के बाद, आपके प्रोजेक्ट का स्ट्रक्चर ऐसा दिखेगा:
myproject
+- .firebaserc # Hidden file that helps you quickly switch between
| # projects with `firebase use`
|
+- firebase.json # Describes properties for your project
|
+- functions/ # Directory containing all your functions code
|
+- .eslintrc.json # Optional file containing rules for JavaScript linting.
|
+- package.json # npm package file describing your Cloud Functions code
|
+- index.js # main source file for your Cloud Functions code
|
+- node_modules/ # directory where your dependencies (declared in
# package.json) are installed
शुरू करने के दौरान बनाई गई package.json
फ़ाइल में एक ज़रूरी कुंजी होती है: "engines": {"node": "16"}
. इससे फ़ंक्शन लिखने और उन्हें डिप्लॉय करने के लिए, Node.js के वर्शन के बारे में पता चलता है. काम करने वाले अन्य वर्शन चुने जा सकते हैं.
ज़रूरी मॉड्यूल इंपोर्ट करें और ऐप्लिकेशन शुरू करें
सेटअप के टास्क पूरे करने के बाद, सोर्स डायरेक्ट्री खोली जा सकती है. साथ ही, यहां दिए गए सेक्शन में बताए गए तरीके से कोड जोड़ा जा सकता है. इस सैंपल के लिए, आपके प्रोजेक्ट को Node require
स्टेटमेंट का इस्तेमाल करके, Cloud Functions और Admin SDK मॉड्यूल इंपोर्ट करने होंगे. अपनी index.js
फ़ाइल में, इस तरह की लाइनें जोड़ें:
// The Cloud Functions for Firebase SDK to create Cloud Functions and set up triggers. const functions = require('firebase-functions/v1'); // The Firebase Admin SDK to access Firestore. const admin = require("firebase-admin"); admin.initializeApp();
इन लाइनों से firebase-functions
और firebase-admin
मॉड्यूल लोड होते हैं. साथ ही, admin
ऐप्लिकेशन इंस्टेंस को शुरू किया जाता है, जिसमें Cloud Firestore बदलाव किए जा सकते हैं.
Admin SDK की सुविधा जहां भी उपलब्ध है वहां इसका इस्तेमाल किया जा सकता है. जैसे, FCM, Authentication, और Firebase Realtime Database के लिए यह सुविधा उपलब्ध है. यह Cloud Functions का इस्तेमाल करके Firebase को इंटिग्रेट करने का एक बेहतरीन तरीका है.
प्रोजेक्ट शुरू करने पर, Firebase CLI टूल, Cloud Functions नोड मॉड्यूल के लिए Firebase और Firebase SDK टूल को अपने-आप इंस्टॉल कर देता है. अपने प्रोजेक्ट में तीसरे पक्ष की लाइब्रेरी जोड़ने के लिए, package.json
में बदलाव किया जा सकता है और npm install
चलाया जा सकता है.
ज़्यादा जानकारी के लिए, डिपेंडेंसी मैनेज करना लेख पढ़ें.
addMessage()
फ़ंक्शन जोड़ना
addMessage()
फ़ंक्शन के लिए, index.js
में ये लाइनें जोड़ें:
// Take the text parameter passed to this HTTP endpoint and insert it into // Firestore under the path /messages/:documentId/original exports.addMessage = functions.https.onRequest(async (req, res) => { // Grab the text parameter. const original = req.query.text; // Push the new message into Firestore using the Firebase Admin SDK. const writeResult = await admin .firestore() .collection("messages") .add({ original: original }); // Send back a message that we've successfully written the message res.json({ result: `Message with ID: ${writeResult.id} added.` }); });
addMessage()
फ़ंक्शन एक एचटीटीपी एंडपॉइंट है. एंडपॉइंट पर किए गए किसी भी अनुरोध के लिए, ExpressJS-स्टाइल वाले Request और Response ऑब्जेक्ट, onRequest()
कॉलबैक को पास किए जाते हैं.
एचटीटीपी फ़ंक्शन, सिंक्रोनस होते हैं. ये कॉल किए जा सकने वाले फ़ंक्शन की तरह ही होते हैं. इसलिए, आपको जल्द से जल्द जवाब भेजना चाहिए और Cloud Firestore का इस्तेमाल करके काम को बाद के लिए शेड्यूल करना चाहिए. addMessage()
HTTP फ़ंक्शन, एचटीटीपी एंडपॉइंट को टेक्स्ट वैल्यू पास करता है और उसे /messages/:documentId/original
पाथ के तहत डेटाबेस में डालता है.
makeUppercase()
फ़ंक्शन जोड़ना
makeUppercase()
फ़ंक्शन के लिए, index.js
में ये लाइनें जोड़ें:
// Listens for new messages added to /messages/:documentId/original and creates an // uppercase version of the message to /messages/:documentId/uppercase exports.makeUppercase = functions.firestore .document("/messages/{documentId}") .onCreate((snap, context) => { // Grab the current value of what was written to Firestore. const original = snap.data().original; // Access the parameter `{documentId}` with `context.params` functions.logger.log("Uppercasing", context.params.documentId, original); const uppercase = original.toUpperCase(); // You must return a Promise when performing asynchronous tasks inside a Functions such as // writing to Firestore. // Setting an 'uppercase' field in Firestore document returns a Promise. return snap.ref.set({ uppercase }, { merge: true }); });
makeUppercase()
फ़ंक्शन तब काम करता है, जब Cloud Firestore में लिखा जाता है. ref.set
फ़ंक्शन, उस दस्तावेज़ को तय करता है जिसे सुनना है. बेहतर परफ़ॉर्मेंस के लिए, आपको ज़्यादा से ज़्यादा सटीक जानकारी देनी चाहिए.
ब्रेसिज़—उदाहरण के लिए, {documentId}
—"पैरामीटर" को घेरते हैं. ये वाइल्डकार्ड होते हैं, जो कॉलबैक में मैच किया गया डेटा दिखाते हैं.
Cloud Firestore, नए मैसेज जोड़े जाने पर onCreate()
कॉलबैक को ट्रिगर करता है.
इवेंट पर आधारित फ़ंक्शन, जैसे कि Cloud Firestore इवेंट एसिंक्रोनस होते हैं. कॉलबैक फ़ंक्शन को null
, कोई ऑब्जेक्ट या Promise में से कोई एक वैल्यू दिखानी चाहिए.
अगर आपने कोई वैल्यू नहीं दिखाई है, तो फ़ंक्शन का समय खत्म हो जाता है. इससे गड़बड़ी का पता चलता है और इसे फिर से आज़माया जाता है. सिंक, एसिंक, और प्रॉमिस देखें.
अपने फ़ंक्शन के एक्ज़ीक्यूशन का सिम्युलेशन करना
Firebase Local Emulator Suite की मदद से, ऐप्लिकेशन को Firebase प्रोजेक्ट में डिप्लॉय करने के बजाय, अपनी लोकल मशीन पर बनाया और टेस्ट किया जा सकता है. हमारा सुझाव है कि डेवलपमेंट के दौरान, स्थानीय तौर पर टेस्टिंग ज़रूर करें. इसकी एक वजह यह है कि इससे कोडिंग की गड़बड़ियों का जोखिम कम हो जाता है. इन गड़बड़ियों की वजह से, प्रोडक्शन एनवायरमेंट में लागत लग सकती है. उदाहरण के लिए, इनफ़िनिट लूप.
अपने फ़ंक्शन का इस्तेमाल करने के लिए:
firebase emulators:start
चलाएं और Emulator Suite UI के यूआरएल के लिए आउटपुट देखें. यह डिफ़ॉल्ट रूप से localhost:4000 पर होता है. हालाँकि, इसे आपके कंप्यूटर पर किसी दूसरे पोर्ट पर होस्ट किया जा सकता है. Emulator Suite UI खोलने के लिए, उस यूआरएल को अपने ब्राउज़र में डालें.एचटीटीपी फ़ंक्शन
addMessage()
के यूआरएल के लिए,firebase emulators:start
कमांड का आउटपुट देखें. यहhttp://localhost:5001/MY_PROJECT/us-central1/addMessage
जैसा दिखेगा. हालांकि, इसमें ये अंतर होंगे:MY_PROJECT
की जगह आपका प्रोजेक्ट आईडी दिखेगा.- आपकी लोकल मशीन पर पोर्ट अलग हो सकता है.
फ़ंक्शन के यूआरएल के आखिर में क्वेरी स्ट्रिंग
?text=uppercaseme
जोड़ें. यह कुछ ऐसा दिखना चाहिए:http://localhost:5001/MY_PROJECT/us-central1/addMessage?text=uppercaseme
. इसके अलावा, "uppercaseme" मैसेज को अपनी पसंद के मुताबिक मैसेज में बदला जा सकता है.अपने ब्राउज़र में यूआरएल को नए टैब में खोलकर, एक नया मैसेज बनाएं.
Emulator Suite UI में फ़ंक्शन के असर देखें:
लॉग टैब में, आपको नए लॉग दिखेंगे. इनसे पता चलेगा कि
addMessage()
औरmakeUppercase()
फ़ंक्शन चले:i functions: Beginning execution of "addMessage"
i functions: Beginning execution of "makeUppercase"
Firestore टैब में, आपको एक ऐसा दस्तावेज़ दिखेगा जिसमें आपका ओरिजनल मैसेज और मैसेज का अपरकेस वर्शन होगा. अगर आपका ओरिजनल मैसेज "uppercaseme" था, तो आपको "UPPERCASEME" दिखेगा.
फ़ंक्शन को प्रोडक्शन एनवायरमेंट में डिप्लॉय करना
जब आपके फ़ंक्शन, एम्युलेटर में आपकी ज़रूरत के हिसाब से काम करने लगें, तब उन्हें प्रोडक्शन एनवायरमेंट में डिप्लॉय, टेस्ट, और चलाया जा सकता है. ध्यान रखें कि Node.js 14 रनटाइम एनवायरमेंट में डिप्लॉय करने के लिए, आपका प्रोजेक्ट ब्लेज़ प्राइसिंग प्लान पर होना चाहिए. Cloud Functions कीमत देखें.
ट्यूटोरियल पूरा करने के लिए, फ़ंक्शन डिप्लॉय करें. इसके बाद, addMessage()
को ट्रिगर करने के लिए makeUppercase()
को लागू करें.
अपने फ़ंक्शन डिप्लॉय करने के लिए, यह कमांड चलाएं:
firebase deploy --only functions
इस कमांड को चलाने के बाद, Firebase सीएलआई, किसी भी एचटीटीपी फ़ंक्शन के एंडपॉइंट के लिए यूआरएल दिखाता है. आपको अपने टर्मिनल में, यहां दी गई लाइन की तरह एक लाइन दिखेगी:
Function URL (addMessage): https://us-central1-MY_PROJECT.cloudfunctions.net/addMessage
यूआरएल में आपका प्रोजेक्ट आईडी और HTTP फ़ंक्शन के लिए क्षेत्र की जानकारी शामिल होती है. हालांकि, आपको अभी इसके बारे में चिंता करने की ज़रूरत नहीं है, लेकिन कुछ प्रोडक्शन एचटीटीपी फ़ंक्शन के लिए location तय करना ज़रूरी है, ताकि नेटवर्क की लेटेन्सी को कम किया जा सके.
अगर आपको ऐक्सेस से जुड़ी गड़बड़ियां मिलती हैं, जैसे कि "प्रोजेक्ट को ऐक्सेस करने की अनुमति नहीं दी जा सकती," तो प्रोजेक्ट के लिए उपनाम की जांच करें.
सीएलआई से मिले
addMessage()
यूआरएल का इस्तेमाल करके, टेक्स्ट क्वेरी पैरामीटर जोड़ें और उसे ब्राउज़र में खोलें:https://us-central1-MY_PROJECT.cloudfunctions.net/addMessage?text=uppercasemetoo
यह फ़ंक्शन, ब्राउज़र को उस डेटाबेस की जगह पर मौजूद Firebase कंसोल पर रीडायरेक्ट करता है जहां टेक्स्ट स्ट्रिंग सेव की गई है. इस राइट इवेंट से
makeUppercase()
ट्रिगर होता है. यह स्ट्रिंग का अपरकेस वर्शन लिखता है.
फ़ंक्शन डिप्लॉय और एक्ज़ीक्यूट करने के बाद, Google Cloud कंसोल में लॉग देखे जा सकते हैं. अगर आपको डेवलपमेंट या प्रोडक्शन में फ़ंक्शन मिटाने हैं, तो Firebase CLI का इस्तेमाल करें.
प्रोडक्शन में, फ़ंक्शन की परफ़ॉर्मेंस को ऑप्टिमाइज़ किया जा सकता है. साथ ही, लागत को कंट्रोल किया जा सकता है. इसके लिए, चलाने के लिए कम से कम और ज़्यादा से ज़्यादा इंस्टेंस की संख्या सेट करें. इन रनटाइम विकल्पों के बारे में ज़्यादा जानने के लिए, स्केलिंग के व्यवहार को कंट्रोल करना लेख पढ़ें.
पूरा सैंपल कोड देखें
यहां पूरा किया गया functions/index.js
दिया गया है. इसमें addMessage()
और makeUppercase()
फ़ंक्शन शामिल हैं. इन फ़ंक्शन की मदद से, एचटीटीपी एंडपॉइंट को पैरामीटर पास किया जा सकता है. यह पैरामीटर, Cloud Firestore में वैल्यू लिखता है. इसके बाद, यह स्ट्रिंग के सभी वर्णों को अपरकेस में बदलकर, उसे बदल देता है.
// The Cloud Functions for Firebase SDK to create Cloud Functions and set up triggers. const functions = require('firebase-functions/v1'); // The Firebase Admin SDK to access Firestore. const admin = require("firebase-admin"); admin.initializeApp(); // Take the text parameter passed to this HTTP endpoint and insert it into // Firestore under the path /messages/:documentId/original exports.addMessage = functions.https.onRequest(async (req, res) => { // Grab the text parameter. const original = req.query.text; // Push the new message into Firestore using the Firebase Admin SDK. const writeResult = await admin .firestore() .collection("messages") .add({ original: original }); // Send back a message that we've successfully written the message res.json({ result: `Message with ID: ${writeResult.id} added.` }); }); // Listens for new messages added to /messages/:documentId/original and creates an // uppercase version of the message to /messages/:documentId/uppercase exports.makeUppercase = functions.firestore .document("/messages/{documentId}") .onCreate((snap, context) => { // Grab the current value of what was written to Firestore. const original = snap.data().original; // Access the parameter `{documentId}` with `context.params` functions.logger.log("Uppercasing", context.params.documentId, original); const uppercase = original.toUpperCase(); // You must return a Promise when performing asynchronous tasks inside a Functions such as // writing to Firestore. // Setting an 'uppercase' field in Firestore document returns a Promise. return snap.ref.set({ uppercase }, { merge: true }); });
अगले चरण
इस दस्तावेज़ में, Cloud Functions के लिए फ़ंक्शन मैनेज करने के तरीके के बारे में ज़्यादा जानें. साथ ही, Cloud Functions के साथ काम करने वाले सभी इवेंट टाइप को हैंडल करने के तरीके के बारे में भी जानें.
Cloud Functions के बारे में ज़्यादा जानने के लिए, यह भी किया जा सकता है:
- Cloud Functions के इस्तेमाल के उदाहरणों के बारे में पढ़ें.
- Cloud Functions कोडलैब आज़माएं.
- GitHub पर कोड के सैंपल की समीक्षा करना और उन्हें चलाना