शुरू करें: अपने पहले फ़ंक्शन लिखें, टेस्ट करें, और डिप्लॉय करें


Cloud फ़ंक्शन का इस्तेमाल शुरू करने के लिए, इस ट्यूटोरियल को देखें. इसमें, सेटअप से जुड़े टास्क से शुरू होना चाहिए. साथ ही, यह दो मिलते-जुलते फ़ंक्शन बनाने, टेस्ट करने, और उन्हें डिप्लॉय करने का काम करता है:

  • "मैसेज जोड़ें" फ़ंक्शन, जो यूआरएल दिखाता है, जो टेक्स्ट वैल्यू स्वीकार करता है और उसे Cloud Firestore में लिख देता है.
  • "अपरकेस बनाएं" फ़ंक्शन, जो Cloud Firestore पर ट्रिगर होता है और टेक्स्ट को अपरकेस में बदल देता है.

हमने इस सैंपल के लिए, Cloud Firestore और एचटीटीपी से ट्रिगर किए गए JavaScript फ़ंक्शन को चुना है, क्योंकि इन बैकग्राउंड ट्रिगर को Firebase लोकल एम्युलेटर सुइट के ज़रिए अच्छी तरह से टेस्ट किया जा सकता है. यह टूलसेट रीयलटाइम डेटाबेस, PubSub, पुष्टि, और एचटीटीपी कॉल किए जा सकने वाले ट्रिगर के साथ काम करता है. दूसरे टाइप के बैकग्राउंड ट्रिगर, जैसे कि रिमोट कॉन्फ़िगरेशन, TestLab, और Analytics ट्रिगर, सभी को इंटरैक्टिव तरीके से टेस्ट किया जा सकता है. इसके लिए, ऐसे टूलसेट का इस्तेमाल करें जिनके बारे में इस पेज में नहीं बताया गया है.

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

Firebase प्रोजेक्ट बनाना

  1. Firebase कंसोल में, प्रोजेक्ट जोड़ें पर क्लिक करें.

    • मौजूदा Google Cloud प्रोजेक्ट में Firebase के संसाधन जोड़ने के लिए, इसके प्रोजेक्ट का नाम डालें या ड्रॉपडाउन मेन्यू से चुनें.

    • नया प्रोजेक्ट बनाने के लिए, प्रोजेक्ट का मनचाहा नाम डालें. आपके पास प्रोजेक्ट के नाम के नीचे दिखने वाले प्रोजेक्ट आईडी में भी बदलाव करने का विकल्प होता है.

  2. अनुरोध किए जाने पर, Firebase की शर्तों को पढ़ें और स्वीकार करें.

  3. जारी रखें पर क्लिक करें.

  4. (ज़रूरी नहीं) अपने प्रोजेक्ट के लिए Google Analytics सेट अप करें. इससे आपको इनमें से किसी भी Firebase प्रॉडक्ट को इस्तेमाल करने का बेहतर अनुभव मिलेगा:

    कोई मौजूदा Google Analytics खाता चुनें या नया खाता बनाएं.

    अगर आपने नया खाता बनाया है, तो Analytics में रिपोर्टिंग की जगह चुनें. इसके बाद, अपने प्रोजेक्ट के लिए, डेटा शेयर करने की सेटिंग और Google Analytics की शर्तों को स्वीकार करें.

  5. प्रोजेक्ट बनाएं पर क्लिक करें. अगर किसी मौजूदा Google Cloud प्रोजेक्ट का इस्तेमाल किया जा रहा है, तो Firebase जोड़ें पर क्लिक करें.

Firebase आपके Firebase प्रोजेक्ट के लिए, संसाधनों को अपने-आप मैनेज करता है. प्रोसेस पूरी होने के बाद, आपको 'Firebase कंसोल' में अपने Firebase प्रोजेक्ट की खास जानकारी देने वाले पेज पर ले जाया जाएगा.

Node.js और Firebase सीएलआई सेट अप करें

फ़ंक्शन लिखने के लिए, आपको Node.js एनवायरमेंट की ज़रूरत होगी. साथ ही, आपको Cloud Functions रनटाइम पर फ़ंक्शन डिप्लॉय करने के लिए, Firebase सीएलआई की ज़रूरत होगी. Node.js और npm को इंस्टॉल करने के लिए, नोड वर्शन मैनेजर को इंस्टॉल करने का सुझाव दिया जाता है.

Node.js और npm इंस्टॉल कर लेने के बाद, अपने पसंदीदा तरीके से Firebase सीएलआई इंस्टॉल करें. एनपीएम के ज़रिए सीएलआई इंस्टॉल करने के लिए, इनका इस्तेमाल करें:

npm install -g firebase-tools

इससे दुनिया भर में उपलब्ध Firebase कमांड इंस्टॉल होता है. अगर यह निर्देश काम नहीं कर रहा है, तो आपको npm अनुमतियां बदलनी पड़ सकती हैं. firebase-tools को नए वर्शन पर अपडेट करने के लिए, फिर से वही निर्देश फिर से चलाएं.

अपना प्रोजेक्ट शुरू करें

Cloud Functions के लिए Firebase SDK टूल शुरू करने पर, आपको एक खाली प्रोजेक्ट बनाना होता है, जिसमें डिपेंडेंसी और कुछ छोटे सैंपल कोड होते हैं. साथ ही, फ़ंक्शन बनाने के लिए, TypeScript या JavaScript में से किसी एक को चुनें. इस ट्यूटोरियल के लिए, आपको Cloud Firestore को भी शुरू करना होगा.

अपने प्रोजेक्ट को शुरू करने के लिए:

  1. ब्राउज़र से लॉग इन करने और Firebase सीएलआई की पुष्टि करने के लिए, firebase login चलाएं.
  2. अपनी Firebase प्रोजेक्ट डायरेक्ट्री पर जाएं.
  3. firebase init firestore चलाएं. इस ट्यूटोरियल के लिए, आप Firestore नियमों और इंडेक्स फ़ाइलों के पूछे जाने पर डिफ़ॉल्ट वैल्यू स्वीकार कर सकते हैं. अगर आपने अब तक इस प्रोजेक्ट में Cloud Firestore का इस्तेमाल नहीं किया है, तो आपको Cloud Firestore के साथ शुरू करें में बताए गए तरीके के मुताबिक, Firestore के लिए शुरुआती मोड और जगह चुननी होगी.
  4. firebase init functions चलाएं. सीएलआई आपको मौजूदा कोड बेस चुनने या नया कोड बेस शुरू करने और नाम देने के लिए कहता है. अभी शुरुआत करते समय, डिफ़ॉल्ट जगह के लिए एक कोड बेस ही काफ़ी होता है. बाद में, जैसे-जैसे आपका लागू करने का समय बढ़ता है, हो सकता है कि आप कोडबेस में फ़ंक्शन को व्यवस्थित करना चाहें.
  5. सीएलआई से आपको भाषा से जुड़ी सहायता के लिए दो विकल्प मिलते हैं:

    इस ट्यूटोरियल के लिए, JavaScript चुनें.

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

ज़रूरी मॉड्यूल इंपोर्ट करें और ऐप्लिकेशन शुरू करें

सेटअप के टास्क पूरे करने के बाद, सोर्स डायरेक्ट्री खोलें और नीचे दिए गए सेक्शन में बताए गए तरीके से कोड जोड़ना शुरू करें. इस सैंपल के लिए, आपके प्रोजेक्ट को नोड require स्टेटमेंट का इस्तेमाल करके, Cloud Functions और एडमिन 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 में बदलाव किए जा सकते हैं. FCM, पुष्टि, और Firebase रीयल टाइम डेटाबेस के लिए एडमिन SDK की सहायता चाहे जहां भी उपलब्ध हो, वह Cloud Functions का इस्तेमाल करके Firebase को इंटिग्रेट करने का बेहतर तरीका उपलब्ध कराता है.

प्रोजेक्ट शुरू करने पर, Firebase सीएलआई, 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-स्टाइल अनुरोध और Response ऑब्जेक्ट में होता है. इन्हें onRequest() कॉलबैक को पास किया जाता है.

एचटीटीपी फ़ंक्शन सिंक्रोनस (कॉल किए जा सकने वाले फ़ंक्शन की तरह) होते हैं, इसलिए आपको जल्द से जल्द जवाब भेजना चाहिए और Cloud Firestore का इस्तेमाल करके काम अलग करना चाहिए. addMessage() एचटीटीपी फ़ंक्शन, एचटीटीपी एंडपॉइंट को एक टेक्स्ट वैल्यू भेजता है और उसे पाथ /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, ऑब्जेक्ट या प्रॉमिस रिटर्न करना चाहिए. अगर कोई जवाब नहीं दिया जाता है, तो फ़ंक्शन का टाइम आउट हो जाता है और गड़बड़ी का सिग्नल मिलता है. इसके बाद, फिर से कोशिश की जाती है. सिंक, एक साथ काम नहीं करने वाली प्रोसेस, और वादे देखें.

अपने फ़ंक्शन को एम्युलेट करें

Firebase लोकल एम्युलेटर सुइट की मदद से, Firebase प्रोजेक्ट में ऐप्लिकेशन डिप्लॉय करने के बजाय, अपनी लोकल मशीन पर ऐप्लिकेशन बनाए जा सकते हैं और उनकी जांच की जा सकती है. डेवलपमेंट के दौरान स्थानीय टेस्टिंग का सुझाव दिया जाता है, क्योंकि इससे कोडिंग की ऐसी गड़बड़ियों का खतरा कम हो जाता है जो प्रोडक्शन एनवायरमेंट (उदाहरण के लिए, लगातार लूप) में खर्च हो सकती हैं.

अपने फ़ंक्शन को एम्युलेट करने के लिए:

  1. firebase emulators:start चलाएं और Emulator Suite यूज़र इंटरफ़ेस (यूआई) के यूआरएल के आउटपुट की जांच करें. यह डिफ़ॉल्ट रूप से localhost:4000 पर सेट होता है, लेकिन आपकी मशीन पर किसी दूसरे पोर्ट पर होस्ट किया जा सकता है. एम्युलेटर सुइट का यूज़र इंटरफ़ेस (यूआई) खोलने के लिए, अपने ब्राउज़र में वह यूआरएल डालें.

  2. एचटीटीपी फ़ंक्शन addMessage() के यूआरएल के लिए, firebase emulators:start कमांड का आउटपुट देखें. यह http://localhost:5001/MY_PROJECT/us-central1/addMessage जैसा दिखेगा. हालांकि, यह:

    1. MY_PROJECT को आपके प्रोजेक्ट आईडी से बदल दिया जाएगा.
    2. आपके लोकल मशीन पर पोर्ट अलग हो सकता है.
  3. फ़ंक्शन के यूआरएल के आखिर में क्वेरी स्ट्रिंग ?text=uppercaseme जोड़ें. यह कुछ ऐसा दिखना चाहिए: http://localhost:5001/MY_PROJECT/us-central1/addMessage?text=uppercaseme. इसके अलावा, "uppercaseme" मैसेज को अपनी पसंद के मुताबिक मैसेज में बदला जा सकता है. हालांकि, ऐसा करना ज़रूरी नहीं है.

  4. अपने ब्राउज़र के नए टैब में यूआरएल खोलकर, नया मैसेज बनाएं.

  5. एम्युलेटर सुइट के यूज़र इंटरफ़ेस (यूआई) में फ़ंक्शन के असर देखें:

    1. लॉग टैब में जाकर, आपको नए लॉग दिखेंगे. इससे पता चलेगा कि फ़ंक्शन addMessage() और makeUppercase() चले:

      i functions: Beginning execution of "addMessage"

      i functions: Beginning execution of "makeUppercase"

    2. Firestore टैब में, आपको एक ऐसा दस्तावेज़ दिखेगा जिसमें आपका मूल मैसेज और आपके मैसेज का अपरकेस वर्शन मौजूद होगा (अगर वह मूल रूप से "uppercaseme" था, तो आपको "अपरकेसएम" दिखेगा).

किसी प्रोडक्शन एनवायरमेंट में फ़ंक्शन डिप्लॉय करना

जब एम्युलेटर में आपके फ़ंक्शन अपने हिसाब से काम करने लगेंगे, तब उन्हें प्रोडक्शन एनवायरमेंट में डिप्लॉय, टेस्ट, और चलाने का काम किया जा सकता है. ध्यान रखें कि सुझाए गए Node.js 14 रनटाइम एनवायरमेंट पर डिप्लॉय करने के लिए, आपका प्रोजेक्ट ब्लेज़ प्राइसिंग प्लान पर होना चाहिए. Cloud Functions की कीमत देखें.

ट्यूटोरियल पूरा करने के लिए, अपने फ़ंक्शन डिप्लॉय करें. इसके बाद, makeUppercase() को ट्रिगर करने के लिए, addMessage() एक्ज़ीक्यूट करें.

  1. अपने फ़ंक्शन डिप्लॉय करने के लिए, इस कमांड को चलाएं:

     firebase deploy --only functions
     

    इस कमांड को चलाने के बाद, Firebase सीएलआई किसी भी एचटीटीपी फ़ंक्शन एंडपॉइंट के लिए यूआरएल देता है. आपके टर्मिनल में, आपको इस तरह की एक लाइन दिखेगी:

    Function URL (addMessage): https://us-central1-MY_PROJECT.cloudfunctions.net/addMessage
    

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

    अगर आपको ऐक्सेस से जुड़ी गड़बड़ियां मिलती हैं, जैसे कि "प्रोजेक्ट के लिए ऐक्सेस की अनुमति नहीं दी जा सकी", तो अपने प्रोजेक्ट के अन्य नाम की जांच करके देखें.

  2. सीएलआई से मिले addMessage() यूआरएल आउटपुट का इस्तेमाल करके, एक टेक्स्ट क्वेरी पैरामीटर जोड़ें और उसे ब्राउज़र में खोलें:

    https://us-central1-MY_PROJECT.cloudfunctions.net/addMessage?text=uppercasemetoo
    

    यह फ़ंक्शन, ब्राउज़र को Firebase कंसोल पर डेटाबेस की लोकेशन पर ट्रिगर और रीडायरेक्ट करता है, जहां टेक्स्ट स्ट्रिंग सेव की जाती है. यह राइट इवेंट makeUppercase() को ट्रिगर करता है, जो स्ट्रिंग के अपरकेस वर्शन को लिखता है.

फ़ंक्शन को डिप्लॉय और लागू करने के बाद, Google Cloud कंसोल में लॉग देखे जा सकते हैं. अगर आपको डेवलपमेंट या प्रोडक्शन के फ़ंक्शन मिटाना है, तो Firebase सीएलआई का इस्तेमाल करें.

प्रोडक्शन में, चलाने के लिए कम से कम और ज़्यादा से ज़्यादा संख्या में इंस्टेंस सेट करके, फ़ंक्शन की परफ़ॉर्मेंस को ऑप्टिमाइज़ किया जा सकता है और लागत को कंट्रोल किया जा सकता है. इन रनटाइम विकल्पों के बारे में ज़्यादा जानकारी के लिए, स्केलिंग व्यवहार को कंट्रोल करना देखें.

पूरे सैंपल कोड की समीक्षा करें

यहां पूरा 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 फ़ंक्शन के साथ काम करने वाले सभी तरह के इवेंट को मैनेज करने के तरीकों के बारे में भी जानकारी मिलेगी.

Cloud फ़ंक्शन के बारे में ज़्यादा जानने के लिए, ये काम भी किए जा सकते हैं: