आरंभ करें: अपने पहले फ़ंक्शन लिखें, परीक्षण करें और तैनात करें


क्लाउड फ़ंक्शंस के साथ आरंभ करने के लिए, इस ट्यूटोरियल के माध्यम से काम करने का प्रयास करें, जो आवश्यक सेटअप कार्यों से शुरू होता है और दो संबंधित फ़ंक्शंस बनाने, परीक्षण और तैनात करने के माध्यम से काम करता है:

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

हमने इस नमूने के लिए आंशिक रूप से क्लाउड फायरस्टोर और HTTP-ट्रिगर जावास्क्रिप्ट फ़ंक्शन को चुना है क्योंकि इन पृष्ठभूमि ट्रिगर्स को फायरबेस लोकल एमुलेटर सूट के माध्यम से पूरी तरह से परीक्षण किया जा सकता है। यह टूलसेट रीयलटाइम डेटाबेस, पबसब, ऑथ और HTTP कॉल करने योग्य ट्रिगर्स का भी समर्थन करता है। अन्य प्रकार के बैकग्राउंड ट्रिगर्स जैसे रिमोट कॉन्फिग, टेस्टलैब और एनालिटिक्स ट्रिगर्स को इस पृष्ठ में वर्णित टूलसेट का उपयोग करके इंटरैक्टिव रूप से परीक्षण किया जा सकता है।

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

एक फायरबेस प्रोजेक्ट बनाएं

  1. फायरबेस कंसोल में, प्रोजेक्ट जोड़ें पर क्लिक करें।

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

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

  2. यदि संकेत दिया जाए, तो फायरबेस शर्तों की समीक्षा करें और स्वीकार करें।

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

  4. (वैकल्पिक) अपने प्रोजेक्ट के लिए Google Analytics सेट करें, जो आपको निम्नलिखित फायरबेस उत्पादों में से किसी का उपयोग करके इष्टतम अनुभव प्राप्त करने में सक्षम बनाता है:

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

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

  5. प्रोजेक्ट बनाएं पर क्लिक करें (या यदि आप मौजूदा Google क्लाउड प्रोजेक्ट का उपयोग कर रहे हैं तो फायरबेस जोड़ें )।

फायरबेस स्वचालित रूप से आपके फायरबेस प्रोजेक्ट के लिए संसाधनों का प्रावधान करता है। जब प्रक्रिया पूरी हो जाएगी, तो आपको फ़ायरबेस कंसोल में आपके फ़ायरबेस प्रोजेक्ट के अवलोकन पृष्ठ पर ले जाया जाएगा।

Node.js और Firebase CLI सेट करें

फ़ंक्शंस लिखने के लिए आपको एक Node.js वातावरण की आवश्यकता होगी, और क्लाउड फ़ंक्शंस रनटाइम पर फ़ंक्शंस को तैनात करने के लिए आपको फ़ायरबेस सीएलआई की आवश्यकता होगी। Node.js और npm स्थापित करने के लिए, नोड संस्करण प्रबंधक की अनुशंसा की जाती है।

एक बार जब आपके पास Node.js और npm इंस्टॉल हो जाए, तो अपने पसंदीदा तरीके से फायरबेस CLI इंस्टॉल करें । एनपीएम के माध्यम से सीएलआई स्थापित करने के लिए, इसका उपयोग करें:

npm install -g firebase-tools

यह विश्व स्तर पर उपलब्ध फायरबेस कमांड स्थापित करता है। यदि आदेश विफल हो जाता है, तो आपको npm अनुमतियाँ बदलने की आवश्यकता हो सकती है। firebase-tools के नवीनतम संस्करण में अपडेट करने के लिए, उसी कमांड को दोबारा चलाएँ।

अपना प्रोजेक्ट प्रारंभ करें

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

अपना प्रोजेक्ट प्रारंभ करने के लिए:

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

    इस ट्यूटोरियल के लिए, जावास्क्रिप्ट चुनें।

  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 कथन का उपयोग करके क्लाउड फ़ंक्शंस और एडमिन एसडीके मॉड्यूल आयात करना होगा। अपनी 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 ऐप इंस्टेंस को इनिशियलाइज़ करती हैं जिससे क्लाउड फायरस्टोर में बदलाव किए जा सकते हैं। जहां भी एडमिन एसडीके समर्थन उपलब्ध है, जैसे कि यह एफसीएम, प्रमाणीकरण और फायरबेस रीयलटाइम डेटाबेस के लिए है, यह क्लाउड फ़ंक्शंस का उपयोग करके फायरबेस को एकीकृत करने का एक शक्तिशाली तरीका प्रदान करता है।

जब आप अपना प्रोजेक्ट प्रारंभ करते हैं तो फायरबेस सीएलआई स्वचालित रूप से क्लाउड फ़ंक्शंस नोड मॉड्यूल के लिए फायरबेस और फायरबेस एसडीके स्थापित करता है। अपने प्रोजेक्ट में तृतीय पक्ष लाइब्रेरी जोड़ने के लिए, आप 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() फ़ंक्शन एक HTTP समापन बिंदु है। एंडपॉइंट पर किसी भी अनुरोध के परिणामस्वरूप ExpressJS-शैली अनुरोध और प्रतिक्रिया ऑब्जेक्ट onRequest() कॉलबैक में पास हो जाते हैं।

HTTP फ़ंक्शंस सिंक्रोनस हैं ( कॉल करने योग्य फ़ंक्शंस के समान), इसलिए आपको जितनी जल्दी हो सके प्रतिक्रिया भेजनी चाहिए और क्लाउड फायरस्टोर का उपयोग करके काम को स्थगित कर देना चाहिए। addMessage() HTTP फ़ंक्शन 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() फ़ंक्शन निष्पादित होता है। ref.set फ़ंक्शन सुनने के लिए दस्तावेज़ को परिभाषित करता है। प्रदर्शन कारणों से, आपको यथासंभव विशिष्ट होना चाहिए।

ब्रेसिज़—उदाहरण के लिए, {documentId} —सराउंड "पैरामीटर," वाइल्डकार्ड जो कॉलबैक में उनके मिलान किए गए डेटा को उजागर करते हैं।

जब भी नए संदेश जोड़े जाते हैं तो क्लाउड फायरस्टोर onCreate() कॉलबैक को ट्रिगर करता है।

क्लाउड फायरस्टोर इवेंट जैसे इवेंट-संचालित फ़ंक्शन अतुल्यकालिक हैं। कॉलबैक फ़ंक्शन को या तो null , ऑब्जेक्ट, या Promise लौटाना चाहिए। यदि आप कुछ भी नहीं लौटाते हैं, तो फ़ंक्शन का समय समाप्त हो जाता है, एक त्रुटि का संकेत मिलता है, और पुनः प्रयास किया जाता है। सिंक, एसिंक और प्रॉमिस देखें।

अपने कार्यों के निष्पादन का अनुकरण करें

फायरबेस लोकल एमुलेटर सूट आपको फायरबेस प्रोजेक्ट पर तैनात करने के बजाय अपनी स्थानीय मशीन पर ऐप्स बनाने और परीक्षण करने की अनुमति देता है। विकास के दौरान स्थानीय परीक्षण की दृढ़ता से अनुशंसा की जाती है, क्योंकि यह कोडिंग त्रुटियों से होने वाले जोखिम को कम करता है जो संभावित रूप से उत्पादन वातावरण में लागत का कारण बन सकता है (उदाहरण के लिए, एक अनंत लूप)।

अपने कार्यों का अनुकरण करने के लिए:

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

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

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

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

  5. एम्यूलेटर सुइट यूआई में फ़ंक्शन के प्रभाव देखें:

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

      i functions: Beginning execution of "addMessage"

      i functions: Beginning execution of "makeUppercase"

    2. फायरस्टोर टैब में, आपको एक दस्तावेज़ देखना चाहिए जिसमें आपका मूल संदेश और साथ ही आपके संदेश का अपरकेस संस्करण शामिल है (यदि यह मूल रूप से "अपरकेसमे" था, तो आपको "अपरकेसमे" दिखाई देगा)।

उत्पादन परिवेश में फ़ंक्शन परिनियोजित करें

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

ट्यूटोरियल को पूरा करने के लिए, अपने फ़ंक्शंस को तैनात करें और फिर makeUppercase() ट्रिगर करने के लिए addMessage() निष्पादित करें।

  1. अपने कार्यों को तैनात करने के लिए यह आदेश चलाएँ:

     firebase deploy --only functions
     

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

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

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

    यदि आपको "प्रोजेक्ट तक पहुंच को अधिकृत करने में असमर्थ" जैसी एक्सेस त्रुटियों का सामना करना पड़ता है, तो अपने प्रोजेक्ट एलियासिंग की जांच करने का प्रयास करें।

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

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

    फ़ंक्शन ब्राउज़र को डेटाबेस स्थान पर फ़ायरबेस कंसोल पर निष्पादित और रीडायरेक्ट करता है जहां टेक्स्ट स्ट्रिंग संग्रहीत है। यह लेखन ईवेंट makeUppercase() को ट्रिगर करता है, जो स्ट्रिंग का एक अपरकेस संस्करण लिखता है।

फ़ंक्शंस को तैनात करने और निष्पादित करने के बाद, आप Google क्लाउड कंसोल में लॉग देख सकते हैं। यदि आपको विकास या उत्पादन में कार्यों को हटाने की आवश्यकता है, तो फायरबेस सीएलआई का उपयोग करें।

उत्पादन में, आप चलाने के लिए न्यूनतम और अधिकतम संख्या निर्धारित करके फ़ंक्शन प्रदर्शन को अनुकूलित करना और लागत को नियंत्रित करना चाह सकते हैं। इन रनटाइम विकल्पों पर अधिक जानकारी के लिए नियंत्रण स्केलिंग व्यवहार देखें।

संपूर्ण नमूना कोड की समीक्षा करें

यहां पूरा किया गया functions/index.js है जिसमें addMessage() और makeUppercase() फ़ंक्शन शामिल हैं। ये फ़ंक्शन आपको HTTP एंडपॉइंट पर एक पैरामीटर पास करने की अनुमति देते हैं जो क्लाउड फायरस्टोर के लिए एक मान लिखता है, और फिर स्ट्रिंग में सभी वर्णों को अपरकेस करके इसे बदल देता है।

// 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 });
  });

अगले कदम

इस दस्तावेज़ में, आप क्लाउड फ़ंक्शंस के लिए फ़ंक्शंस को प्रबंधित करने के तरीके के साथ-साथ क्लाउड फ़ंक्शंस द्वारा समर्थित सभी ईवेंट प्रकारों को कैसे प्रबंधित करें, इसके बारे में अधिक जान सकते हैं।

क्लाउड फ़ंक्शंस के बारे में अधिक जानने के लिए, आप निम्न कार्य भी कर सकते हैं: