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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Node.js और Firebase CLI सेट अप करना

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

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

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 का इस्तेमाल नहीं किया है, तो आपको Firestore के लिए शुरू करने का मोड और जगह भी चुननी होगी. इसके बारे में Cloud Firestore का इस्तेमाल शुरू करना में बताया गया है.
  4. firebase init functions चलाएं. सीएलआई, आपको कोई मौजूदा कोडबेस चुनने या नया कोडबेस शुरू करने और उसका नाम रखने के लिए कहता है. अगर आपने अभी-अभी शुरुआत की है, डिफ़ॉल्ट जगह पर एक ही कोड बेस काफ़ी है; बाद में, जैसे-जैसे अपने सिस्टम का दायरा बढ़ता है, आपको कोडबेस में फ़ंक्शन व्यवस्थित करने हों.
  5. सीएलआई में आपको भाषा से जुड़ी सहायता के लिए दो विकल्प मिलते हैं:

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

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

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

अपने फ़ंक्शन के लागू होने की प्रक्रिया को एमुलेट करना

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

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

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

  2. firebase emulators:start के आउटपुट की जाँच करें यूआरएल के लिए निर्देश का एचटीटीपी फ़ंक्शन addMessage() है. यह 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. वैकल्पिक रूप से, आप "अपरकेसमे" मैसेज को बदल सकते हैं कस्टम में दिखाई देगा.

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

  5. Emulator Suite UI में फ़ंक्शन के असर देखें:

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

      i functions: Beginning execution of "addMessage"

      i functions: Beginning execution of "makeUppercase"

    2. Firestore टैब में, आपको एक दस्तावेज़ दिखेगा. इसमें आपका मूल मैसेज और बड़े अक्षरों में लिखा गया मैसेज दिखेगा. अगर मूल मैसेज "uppercaseme" था, तो आपको "UPPERCASEME" दिखेगा.

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

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

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

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

     firebase deploy --only functions
     

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

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

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

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

  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 Functions

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