अपने ऐप्लिकेशन को Cloud Functions एम्युलेटर से कनेक्ट करें

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

कोई Firebase प्रोजेक्ट चुनें

Firebase लोकल एम्युलेटर सुइट, किसी एक Firebase प्रोजेक्ट के लिए प्रॉडक्ट को एम्युलेट करता है.

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

Local Emulator Suite, असली Firebase प्रोजेक्ट और डेमो प्रोजेक्ट के एम्युलेशन के साथ काम करता है.

प्रोजेक्ट का टाइप सुविधाएं एम्युलेटर के साथ इस्तेमाल करें
रीयल

असली Firebase प्रोजेक्ट वह होता है जिसे आपने बनाया और कॉन्फ़िगर किया है (ऐसा ज़्यादातर Firebase कंसोल के ज़रिए होता है).

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

रीयल Firebase प्रोजेक्ट के साथ काम करते समय, इस्तेमाल किए जा सकने वाले किसी भी या सभी प्रॉडक्ट के लिए एम्युलेटर चलाए जा सकते हैं.

आप जिन प्रॉडक्ट को एम्युलेट नहीं कर रहे हैं उनके लिए, आपके ऐप्लिकेशन और कोड लाइव रिसॉर्स (डेटाबेस इंस्टेंस, स्टोरेज बकेट, फ़ंक्शन वगैरह) के साथ इंटरैक्ट करेंगे.

डेमो

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

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

डेमो Firebase प्रोजेक्ट के साथ काम करते समय, आपके ऐप्लिकेशन और कोड सिर्फ़ एम्युलेटर के साथ इंटरैक्ट करते हैं. अगर आपका ऐप्लिकेशन किसी ऐसे संसाधन से इंटरैक्ट करने की कोशिश करता है जिसके लिए एम्युलेटर नहीं चल रहा है, तो वह कोड काम नहीं करेगा.

हमारा सुझाव है कि जहां भी मुमकिन हो, डेमो प्रोजेक्ट का इस्तेमाल करें. सदस्यता के साथ यहां दिए गए फ़ायदे मिलते हैं:

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

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

कॉल करने लायक फ़ंक्शन के लिए, अपने ऐप्लिकेशन को इंस्टॉल करें

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

Kotlin+KTX
// 10.0.2.2 is the special IP address to connect to the 'localhost' of
// the host computer from an Android emulator.
val functions = Firebase.functions
functions.useEmulator("10.0.2.2", 5001)
Java
// 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);
Swift
Functions.functions().useFunctionsEmulator(origin: "http://127.0.0.1:5001")

Web

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

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

Web

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

एचटीटीपीएस फ़ंक्शन एम्युलेशन के लिए अपने ऐप्लिकेशन का इंस्ट्रुमेंट

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

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

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

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

बैकग्राउंड से ट्रिगर होने वाले फ़ंक्शन को एम्युलेट करने के लिए, अपने ऐप्लिकेशन को इंस्ट्रुमेंट की सुविधा इस्तेमाल करें

Cloud Functions एम्युलेटर, इन सोर्स के बैकग्राउंड में ट्रिगर होने वाले फ़ंक्शन के साथ काम करता है:

  • रीयलटाइम डेटाबेस एम्युलेटर
  • Cloud Firestore एम्युलेटर
  • पुष्टि करने वाला एम्युलेटर
  • Pub/Sub एम्युलेटर

बैकग्राउंड इवेंट ट्रिगर करने के लिए, Emulator Suite यूज़र इंटरफ़ेस (यूआई) का इस्तेमाल करके बैक-एंड संसाधनों में बदलाव करें. इसके अलावा, अपने प्लैटफ़ॉर्म पर SDK टूल का इस्तेमाल करने वाले एम्युलेटर से अपने ऐप्लिकेशन या टेस्ट कोड को कनेक्ट करके भी ऐसा किया जा सकता है.

एक्सटेंशन से जनरेट होने वाले कस्टम इवेंट के लिए, हैंडलर की जांच करें

Cloud Functions v2 वाले Firebase एक्सटेंशन के कस्टम इवेंट को हैंडल करने के लिए लागू किए गए फ़ंक्शन के लिए, Cloud Functions एम्युलेटर, Eventarc ट्रिगर के साथ काम करने के लिए Eventarc एम्युलेटर के साथ जुड़ता है.

इवेंट ट्रिगर करने वाले एक्सटेंशन के लिए, कस्टम इवेंट हैंडलर की जांच करने के लिए, आपको Cloud Functions और Eventarc एम्युलेटर इंस्टॉल करने होंगे.

अगर Eventarc एम्युलेटर चल रहा है, तो Cloud Functions रनटाइम मौजूदा प्रोसेस में EVENTARC_EMULATOR एनवायरमेंट वैरिएबल को localhost:9299 पर सेट कर देता है. EVENTARC_EMULATOR एनवायरमेंट वैरिएबल सेट होने पर, Firebase एडमिन SDK टूल, Eventarc एम्युलेटर से अपने-आप कनेक्ट हो जाते हैं. लोकल एम्युलेटर सुइट को कॉन्फ़िगर करें में बताए गए तरीके से, डिफ़ॉल्ट पोर्ट में बदलाव किया जा सकता है.

एनवायरमेंट वैरिएबल को सही तरीके से कॉन्फ़िगर किए जाने के बाद, Firebase एडमिन SDK टूल, Eventarc एम्युलेटर को अपने-आप इवेंट भेजता है. इसके बदले में, Eventarc एम्युलेटर, किसी भी रजिस्टर किए गए हैंडलर को ट्रिगर करने के लिए, Cloud Functions एम्युलेटर को वापस कॉल करता है.

हैंडलर को एक्ज़ीक्यूशन करने के बारे में जानकारी के लिए, Emulator Suite के यूज़र इंटरफ़ेस (यूआई) में फ़ंक्शन लॉग देखें.

लोकल टेस्टिंग एनवायरमेंट कॉन्फ़िगर करें

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

लोकल Cloud Functions एम्युलेटर का इस्तेमाल करते समय, आप .env.local फ़ाइल सेट अप करके अपने प्रोजेक्ट के लिए एनवायरमेंट वैरिएबल को बदल सकते हैं. .env.local के कॉन्टेंट को .env और प्रोजेक्ट के हिसाब से बनी .env फ़ाइल के मुकाबले प्राथमिकता दी जाती है.

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

.env .env.dev .env.local
PLANET=पृथ्वी

ऑडियंस=इंसान

ऑडियंस=डेवलपर ह्यूमन्स ऑडियंस=स्थानीय इंसान

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

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

Cloud Functions एम्युलेटर में सीक्रेट और क्रेडेंशियल

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

Cloud Functions एम्युलेटर, एनवायरमेंट वैरिएबल के लिए काम करता है. इसी तरह, .secret.local फ़ाइल सेट अप करके, सीक्रेट वैल्यू को बदला जा सकता है. इससे, आपके लिए स्थानीय तौर पर फ़ंक्शन की जांच करना आसान हो जाता है, खासकर तब, जब आपके पास सीक्रेट वैल्यू का ऐक्सेस न हो.

Cloud Functions की जांच करने के लिए और कौनसे टूल मौजूद हैं?

Cloud Functions एम्युलेटर, दूसरे प्रोटोटाइप और टेस्ट टूल की मदद से काम करता है:

  • Cloud Functions शेल है, जिसकी मदद से इंटरैक्टिव और बार-बार होने वाले फ़ंक्शन प्रोटोटाइप बनाए जा सकते हैं और उन्हें डेवलप किया जा सकता है. यह शेल, डेवलपमेंट के लिए REPL-स्टाइल इंटरफ़ेस के साथ Cloud Functions एम्युलेटर का इस्तेमाल करता है. Cloud Firestore या रीयलटाइम डेटाबेस एम्युलेटर के साथ कोई इंटिग्रेशन नहीं दिया गया है. शेल का इस्तेमाल करके, आप डेटा मॉक बनाते हैं और फ़ंक्शन कॉल करके ऐसे प्रॉडक्ट के साथ इंटरैक्शन को सिम्युलेट करते हैं जिनका इस्तेमाल Local Emulator Suite फ़िलहाल नहीं करता: Analytics, रिमोट कॉन्फ़िगरेशन, और Crashlytics.
  • Cloud Functions के लिए Firebase टेस्ट SDK टूल. यह फ़ंक्शन डेवलपमेंट के लिए मोका फ़्रेमवर्क के साथ Node.js है. इसलिए, Cloud Functions टेस्ट SDK टूल की मदद से Cloud Functions शेल के ऊपर ऑटोमेशन की सुविधा मिलती है.

Cloud Functions शेल और Cloud Functions टेस्ट SDK टूल के बारे में ज़्यादा जानने के लिए फ़ंक्शन को इंटरैक्टिव तरीके से टेस्ट करें और Cloud Functions की यूनिट टेस्टिंग पर जाएं.

Cloud Functions एम्युलेटर, प्रोडक्शन से किस तरह अलग है

Cloud Functions एम्युलेटर, इस्तेमाल के ज़्यादातर उदाहरणों में प्रोडक्शन एनवायरमेंट के काफ़ी करीब है. हमने यह पक्का करने के लिए कड़ी मेहनत की है कि नोड रनटाइम में सब कुछ प्रोडक्शन के ज़्यादा से ज़्यादा करीब हो. हालांकि, एम्युलेटर पूरे कंटेनर वाले प्रोडक्शन एनवायरमेंट की नकल नहीं करता है. इसलिए, आपका फ़ंक्शन कोड असल में लागू होगा, लेकिन आपके एनवायरमेंट के अन्य पहलुओं (जैसे कि लोकल फ़ाइलें, फ़ंक्शन क्रैश होने के बाद का व्यवहार वगैरह) पर असर पड़ेगा.

Cloud IAM

Firebase Emulator Suite, दौड़ने के लिए किसी भी IAM से जुड़े व्यवहार को दोहराने या उनका पालन करने की कोशिश नहीं करता. एम्युलेटर, Firebase के सुरक्षा के लिए बताए गए नियमों का पालन करते हैं. हालांकि, आम तौर पर ऐसी स्थितियों में जहां IAM का इस्तेमाल होता है, जैसे कि Cloud Functions के लिए, सेवा खाते और अनुमतियों को सेट करने के लिए, एम्युलेटर को कॉन्फ़िगर नहीं किया जा सकता. साथ ही, वह आपकी डेवलपर मशीन पर दुनिया भर में उपलब्ध खाते का इस्तेमाल करेगा. यह ठीक वैसा ही है जैसे सीधे तौर पर स्थानीय स्क्रिप्ट चलाने के लिए किया जाता है.

मेमोरी और प्रोसेसर से जुड़ी पाबंदियां

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

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

स्थानीय और प्रोडक्शन के माहौल में अंतर को ध्यान में रखना

एम्युलेटर, आपकी लोकल मशीन पर चलता है. इसलिए, यह ऐप्लिकेशन, पहले से मौजूद प्रोग्राम, और काम की चीज़ों के लिए आपके स्थानीय एनवायरमेंट पर निर्भर करता है.

ध्यान रखें कि Cloud Functions डेवलपमेंट के लिए आपका लोकल एनवायरमेंट, Google प्रोडक्शन एनवायरमेंट से अलग हो सकता है:

  • प्रोडक्शन एनवायरमेंट को सिम्युलेट करने के लिए, स्थानीय तौर पर इंस्टॉल किए जाने वाले ऐप्लिकेशन (उदाहरण के लिए, इस ट्यूटोरियल से ImageMagick) प्रोडक्शन से अलग हो सकते हैं. खास तौर पर तब, जब आपको अलग-अलग वर्शन की ज़रूरत हो या आप Linux के बजाय किसी गैर-Linux एनवायरमेंट में डेवलप कर रहे हों. अपने फ़ंक्शन डिप्लॉयमेंट के साथ-साथ, छूटी हुई प्रोग्राम की अपनी बाइनरी कॉपी डिप्लॉय करें.

  • इसी तरह, पहले से मौजूद सुविधाएं (जैसे, ls, mkdir) प्रोडक्शन में उपलब्ध वर्शन से अलग हो सकती हैं. खास तौर पर तब, जब डेवलपर को बिना Linux वाले एनवायरमेंट (जैसे, macOS) में डेवलप किया जा रहा हो. नेटिव कमांड के बदले सिर्फ़ नोड वाले विकल्पों का इस्तेमाल करके या अपने डिप्लॉयमेंट के साथ बंडल करने के लिए, Linux बाइनरी बनाकर इस समस्या को हल किया जा सकता है.

फिर से कोशिश की जा रही है

Cloud Functions एम्युलेटर, फ़ेल होने पर फिर से कोशिश करने वाले फ़ंक्शन के साथ काम नहीं करता.

आगे क्या करना है?