Catch up on everything announced at Firebase Summit, and learn how Firebase can help you accelerate app development and run your app with confidence. Learn More

अपने ऐप को क्लाउड फ़ंक्शंस एमुलेटर से कनेक्ट करें

संग्रह की मदद से व्यवस्थित रहें अपनी प्राथमिकताओं के आधार पर, कॉन्टेंट को सेव करें और कैटगरी में बांटें.

अपने ऐप को क्लाउड फ़ंक्शंस एमुलेटर से कनेक्ट करने से पहले, सुनिश्चित करें कि आप समग्र फायरबेस लोकल एमुलेटर सूट वर्कफ़्लो को समझते हैं , और यह कि आप लोकल एमुलेटर सूट को स्थापित और कॉन्फ़िगर करते हैं और इसके सीएलआई कमांड की समीक्षा करते हैं।

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

फायरबेस लोकल एमुलेटर सूट एक फायरबेस प्रोजेक्ट के लिए उत्पादों का अनुकरण करता है।

उपयोग करने के लिए प्रोजेक्ट का चयन करने के लिए, एमुलेटर शुरू करने से पहले, सीएलआई में अपनी कार्यशील निर्देशिका में firebase use करें। या, आप प्रत्येक एमुलेटर कमांड को --project फ्लैग पास कर सकते हैं।

स्थानीय एमुलेटर सूट वास्तविक फायरबेस परियोजनाओं और डेमो परियोजनाओं के अनुकरण का समर्थन करता है।

परियोजना प्रकार विशेषताएँ एमुलेटर के साथ प्रयोग करें
वास्तविक

एक वास्तविक फायरबेस प्रोजेक्ट वह है जिसे आपने बनाया और कॉन्फ़िगर किया है (सबसे अधिक संभावना है कि फायरबेस कंसोल के माध्यम से)।

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

वास्तविक Firebase प्रोजेक्ट के साथ काम करते समय, आप किसी भी या सभी समर्थित उत्पादों के लिए एमुलेटर चला सकते हैं।

आप जिन उत्पादों का अनुकरण नहीं कर रहे हैं, उनके लिए आपके ऐप्स और कोड लाइव संसाधन (डेटाबेस इंस्टेंस, स्टोरेज बकेट, फ़ंक्शन, आदि) के साथ इंटरैक्ट करेंगे।

डेमो

एक डेमो फायरबेस प्रोजेक्ट में कोई वास्तविक फायरबेस कॉन्फ़िगरेशन नहीं है और कोई लाइव संसाधन नहीं है। इन परियोजनाओं को आमतौर पर कोडलैब या अन्य ट्यूटोरियल के माध्यम से एक्सेस किया जाता है।

डेमो प्रोजेक्ट के लिए प्रोजेक्ट आईडी में demo- प्रीफ़िक्स होता है।

डेमो फायरबेस प्रोजेक्ट्स के साथ काम करते समय, आपके ऐप्स और कोड केवल एमुलेटर के साथ इंटरैक्ट करते हैं। यदि आपका ऐप किसी ऐसे संसाधन से इंटरैक्ट करने का प्रयास करता है जिसके लिए कोई एमुलेटर नहीं चल रहा है, तो वह कोड विफल हो जाएगा।

हम अनुशंसा करते हैं कि आप जहां भी संभव हो डेमो प्रोजेक्ट का उपयोग करें। लाभों में शामिल हैं:

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

एमुलेटर से बात करने के लिए अपने ऐप को इंस्ट्रुमेंट करें

कॉल करने योग्य कार्यों के लिए अपने ऐप को इंस्ट्रुमेंट करें

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

एंड्रॉयड
// 10.0.2.2 is the special IP address to connect to the 'localhost' of
// the host computer from an Android emulator.
FirebaseFunctions functions = FirebaseFunctions.getInstance();
functions.useEmulator("10.0.2.2", 5001);
तीव्र
Functions.functions().useFunctionsEmulator(origin: "http://localhost:5001")

Web version 9

import { getApp } from "firebase/app";
import { getFunctions, connectFunctionsEmulator } from "firebase/functions";

const functions = getFunctions(getApp());
connectFunctionsEmulator(functions, "localhost", 5001);

Web version 8

firebase.functions().useEmulator("localhost", 5001);

HTTPS फंक्शन एमुलेशन के लिए अपने ऐप को इंस्ट्रुमेंट करें

आपके कोड में प्रत्येक HTTPS फ़ंक्शन निम्न URL प्रारूप का उपयोग करके स्थानीय एमुलेटर से परोसा जाएगा:

http:// $HOST : $PORT / $PROJECT / $REGION / $NAME

उदाहरण के लिए डिफ़ॉल्ट होस्ट पोर्ट और क्षेत्र के साथ एक साधारण helloWorld फ़ंक्शन यहां परोसा जाएगा:

https://localhost:5001/ $PROJECT /us-central1/helloWorld

बैकग्राउंड-ट्रिगर फंक्शन एमुलेशन के लिए अपने ऐप को इंस्ट्रुमेंट करें

क्लाउड फ़ंक्शंस एमुलेटर निम्नलिखित स्रोतों से पृष्ठभूमि-ट्रिगर फ़ंक्शंस का समर्थन करता है:

  • रीयलटाइम डेटाबेस एमुलेटर
  • क्लाउड फायरस्टोर एमुलेटर
  • प्रमाणीकरण एमुलेटर
  • पब/उप एमुलेटर

पृष्ठभूमि की घटनाओं को ट्रिगर करने के लिए, एमुलेटर सूट यूआई का उपयोग करके बैक-एंड संसाधनों को संशोधित करें, या अपने ऐप या परीक्षण कोड को अपने प्लेटफॉर्म के लिए एसडीके का उपयोग करके एमुलेटर से कनेक्ट करें।

एक्सटेंशन द्वारा उत्सर्जित कस्टम ईवेंट के लिए टेस्ट हैंडलर्स

क्लाउड फ़ंक्शंस v2 के साथ फ़ायरबेस एक्सटेंशन कस्टम ईवेंट को संभालने के लिए आपके द्वारा कार्यान्वित फ़ंक्शंस के लिए, Eventarc ट्रिगर्स का समर्थन करने के लिए Eventarc एमुलेटर के साथ Cloud Functions एमुलेटर जोड़े।

ईवेंट उत्सर्जित करने वाले एक्सटेंशन के लिए कस्टम ईवेंट हैंडलर का परीक्षण करने के लिए, आपको क्लाउड फ़ंक्शंस और Eventarc एमुलेटर स्थापित करना होगा।

क्लाउड फ़ंक्शंस रनटाइम EVENTARC_EMULATOR पर्यावरण चर को localhost:9299 वर्तमान प्रक्रिया में यदि Eventarc एमुलेटर चल रहा है। EVENTARC_EMULATOR परिवेश चर सेट होने पर Firebase व्यवस्थापक SDK स्वचालित रूप से Eventarc एमुलेटर से जुड़ जाते हैं। आप डिफ़ॉल्ट पोर्ट को संशोधित कर सकते हैं जैसा कि स्थानीय एमुलेटर सूट कॉन्फ़िगर करें के तहत चर्चा की गई है।

जब परिवेश चर ठीक से कॉन्फ़िगर किए जाते हैं, तो Firebase Admin SDK स्वचालित रूप से Eventarc एमुलेटर को ईवेंट भेजता है। बदले में, Eventarc एमुलेटर किसी भी पंजीकृत हैंडलर को ट्रिगर करने के लिए क्लाउड फ़ंक्शंस एमुलेटर को कॉल बैक करता है।

हैंडलर निष्पादन के विवरण के लिए आप एमुलेटर सूट UI में फ़ंक्शन लॉग देख सकते हैं।

स्थानीय परीक्षण वातावरण कॉन्फ़िगर करें

यदि आपके फ़ंक्शन dotenv-आधारित परिवेश कॉन्फ़िगरेशन पर निर्भर करते हैं, तो आप अपने स्थानीय परीक्षण परिवेश में उस व्यवहार का अनुकरण कर सकते हैं।

स्थानीय क्लाउड फ़ंक्शंस एमुलेटर का उपयोग करते समय, आप एक .env.local फ़ाइल सेट करके अपने प्रोजेक्ट के लिए पर्यावरण चर को ओवरराइड कर सकते हैं। .env.local की सामग्री को .env और प्रोजेक्ट-विशिष्ट .env फ़ाइल पर प्राथमिकता दी जाती है।

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

.env .env.dev .env.local
ग्रह = पृथ्वी

श्रोता = मनुष्य

श्रोता = देव मनुष्य श्रोता = स्थानीय मनुष्य

स्थानीय संदर्भ में शुरू होने पर, एमुलेटर पर्यावरण चर को लोड करता है जैसा कि दिखाया गया है:

  $ firebase emulators:start
  i  emulators: Starting emulators: functions
  # Starts emulator with following environment variables:
  #  PLANET=Earth
  #  AUDIENCE=Local Humans

क्लाउड फ़ंक्शंस एमुलेटर में रहस्य और प्रमाणिकता

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

पर्यावरण चर के लिए क्लाउड फ़ंक्शंस एमुलेटर समर्थन के समान, आप एक .secret.local फ़ाइल सेट करके गुप्त मानों को ओवरराइड कर सकते हैं। यह आपके लिए स्थानीय रूप से अपने कार्यों का परीक्षण करना आसान बनाता है, खासकर यदि आपके पास गुप्त मूल्य तक पहुंच नहीं है।

क्लाउड फ़ंक्शंस के परीक्षण के लिए अन्य कौन से उपकरण मौजूद हैं?

क्लाउड फ़ंक्शंस एमुलेटर अन्य प्रोटोटाइप और परीक्षण टूल द्वारा पूरक है:

  • क्लाउड फ़ंक्शंस शेल, जो इंटरैक्टिव, पुनरावृत्त फ़ंक्शंस प्रोटोटाइप और विकास की अनुमति देता है। शेल विकास के लिए आरईपीएल-शैली इंटरफ़ेस के साथ क्लाउड फ़ंक्शंस एमुलेटर को नियोजित करता है। क्लाउड फायरस्टोर या रीयलटाइम डेटाबेस एमुलेटर के साथ कोई एकीकरण प्रदान नहीं किया गया है। शेल का उपयोग करके, आप डेटा का मज़ाक उड़ाते हैं और उन उत्पादों के साथ सहभागिता का अनुकरण करने के लिए फ़ंक्शन कॉल करते हैं जिनका स्थानीय एमुलेटर सूट वर्तमान में समर्थन नहीं करता है: एनालिटिक्स, रिमोट कॉन्फिगर और क्रैशलिटिक्स।
  • क्लाउड फ़ंक्शंस के लिए फायरबेस टेस्ट एसडीके, कार्यों के विकास के लिए मोचा ढांचे के साथ एक Node.js। वास्तव में, क्लाउड फंक्शंस टेस्ट एसडीके क्लाउड फंक्शंस शेल के ऊपर ऑटोमेशन प्रदान करता है।

आप अंतःक्रियात्मक रूप से परीक्षण कार्यों और क्लाउड फ़ंक्शंस के यूनिट परीक्षण पर क्लाउड फ़ंक्शंस शेल और क्लाउड फ़ंक्शंस टेस्ट SDK के बारे में अधिक जानकारी प्राप्त कर सकते हैं।

क्लाउड फ़ंक्शंस एमुलेटर उत्पादन से कैसे भिन्न होता है

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

बादल IAM

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

मेमोरी और प्रोसेसर प्रतिबंध

एमुलेटर आपके कार्यों के लिए मेमोरी या प्रोसेसर प्रतिबंध लागू नहीं करता है। हालांकि, एमुलेटर timeoutSeconds रनटाइम तर्क के माध्यम से टाइमिंग आउट फ़ंक्शंस का समर्थन करता है।

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

स्थानीय और उत्पादन वातावरण में अंतर के लिए योजना बनाना

चूंकि एम्यूलेटर आपकी स्थानीय मशीन पर चलता है, यह अनुप्रयोगों और अंतर्निहित कार्यक्रमों और उपयोगिताओं के लिए आपके स्थानीय वातावरण पर निर्भर करता है।

ध्यान रखें कि Cloud Functions के विकास के लिए आपका स्थानीय परिवेश Google उत्पादन परिवेश से भिन्न हो सकता है:

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

  • इसी तरह, अंतर्निहित उपयोगिताओं (उदाहरण के लिए, शेल कमांड जैसे ls , mkdir ) उत्पादन में उपलब्ध संस्करणों से भिन्न हो सकते हैं, खासकर यदि आप एक गैर-लिनक्स वातावरण (जैसे, macOS) में विकसित कर रहे हैं। आप मूल कमांड के लिए केवल-नोड विकल्पों का उपयोग करके या अपने परिनियोजन के साथ बंडल करने के लिए लिनक्स बायनेरिज़ का निर्माण करके इस समस्या को संभाल सकते हैं।

पुनः प्रयास किया जाएगा

क्लाउड फ़ंक्शंस एमुलेटर विफलता पर पुन: प्रयास करने वाले कार्यों का समर्थन नहीं करता है।

आगे क्या?