अपने ऐप्लिकेशन को Cloud Functions एम्युलेटर से कनेक्ट करने से पहले, पक्का करें कि आपको Firebase Local Emulator Suite के वर्कफ़्लो की पूरी जानकारी हो. साथ ही, आपने Local Emulator Suite को इंस्टॉल और कॉन्फ़िगर किया हो और इसके सीएलआई कमांड की समीक्षा की हो.
कोई Firebase प्रोजेक्ट चुनें
Firebase Local Emulator Suite, किसी एक Firebase प्रोजेक्ट के लिए प्रॉडक्ट को एम्युलेट करता है.
इस्तेमाल करने के लिए प्रोजेक्ट चुनने के लिए, एम्युलेटर शुरू करने से पहले, सीएलआई में अपनी वर्किंग डायरेक्ट्री में firebase use चलाएं. इसके अलावा, हर एम्युलेटर कमांड में --project फ़्लैग को पास किया जा सकता है.
Local Emulator Suite, असली Firebase प्रोजेक्ट और डेमो प्रोजेक्ट को एम्युलेट करने की सुविधा देता है.
| प्रोजेक्ट टाइप | सुविधाएं | एम्युलेटर के साथ इस्तेमाल करना |
|---|---|---|
| रियाल |
असली Firebase प्रोजेक्ट वह होता है जिसे आपने बनाया और कॉन्फ़िगर किया हो. ऐसा ज़्यादातर Firebase कंसोल की मदद से किया जाता है. असल प्रोजेक्ट में लाइव संसाधन होते हैं. जैसे, डेटाबेस इंस्टेंस, स्टोरेज बकेट, फ़ंक्शन या कोई अन्य संसाधन जिसे आपने उस Firebase प्रोजेक्ट के लिए सेट अप किया है. |
असली Firebase प्रोजेक्ट के साथ काम करते समय, काम करने वाले किसी भी या सभी प्रॉडक्ट के लिए एम्युलेटर चलाए जा सकते हैं. जिन प्रॉडक्ट को एम्युलेट नहीं किया जा रहा है उनके लिए, आपके ऐप्लिकेशन और कोड, लाइव रिसॉर्स (डेटाबेस इंस्टेंस, स्टोरेज बकेट, फ़ंक्शन वगैरह) के साथ इंटरैक्ट करेंगे. |
| डेमो |
डेमो Firebase प्रोजेक्ट में कोई असल Firebase कॉन्फ़िगरेशन और लाइव संसाधन नहीं होते. आम तौर पर, इन प्रोजेक्ट को कोडलैब या अन्य ट्यूटोरियल की मदद से ऐक्सेस किया जाता है. डेमो प्रोजेक्ट के प्रोजेक्ट आईडी में, |
डेमो Firebase प्रोजेक्ट के साथ काम करते समय, आपके ऐप्लिकेशन और कोड सिर्फ़ एम्युलेटर के साथ इंटरैक्ट करते हैं. अगर आपका ऐप्लिकेशन किसी ऐसे संसाधन के साथ इंटरैक्ट करने की कोशिश करता है जिसके लिए एम्युलेटर नहीं चल रहा है, तो वह कोड काम नहीं करेगा. |
हमारा सुझाव है कि जहां भी संभव हो वहां डेमो प्रोजेक्ट का इस्तेमाल करें. इसके ये फ़ायदे हैं:
- इसे सेट अप करना आसान है, क्योंकि एम्युलेटर को Firebase प्रोजेक्ट बनाए बिना भी चलाया जा सकता है
- ज़्यादा सुरक्षा, क्योंकि अगर आपका कोड गलती से ऐसे रिसॉर्स को कॉल करता है जो एम्युलेट नहीं किए गए हैं (प्रोडक्शन), तो डेटा में बदलाव, इस्तेमाल, और बिलिंग की कोई संभावना नहीं होती
- ऑफ़लाइन मोड में बेहतर सहायता मिलती है, क्योंकि एसडीके कॉन्फ़िगरेशन को डाउनलोड करने के लिए इंटरनेट ऐक्सेस करने की ज़रूरत नहीं होती.
एम्युलेटर से बात करने के लिए, अपने ऐप्लिकेशन को इंस्ट्रुमेंट करें
कॉल किए जा सकने वाले फ़ंक्शन के लिए, अपने ऐप्लिकेशन को इंस्ट्रुमेंट करना
अगर आपके प्रोटोटाइप और टेस्ट की गतिविधियों में कॉल किए जा सकने वाले बैकएंड फ़ंक्शन शामिल हैं, तो Cloud Functions for Firebase एम्युलेटर के साथ इंटरैक्शन को इस तरह कॉन्फ़िगर करें:
Kotlin
// 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().useEmulator(withHost: "localhost", port: 5001)
Unity
FirebaseFunctions functions = FirebaseFunctions.DefaultInstance; // Connects to the Functions Emulator running on port 5001 functions.UseFunctionsEmulator("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
टास्क सूची के फ़ंक्शन को एम्युलेट करने के लिए, अपने ऐप्लिकेशन को इंस्ट्रुमेंट करना
एम्युलेटर, ट्रिगर की परिभाषाओं के आधार पर, एम्युलेट की गई टास्क सूची अपने-आप सेट अप करता है. साथ ही, अगर Admin SDK को पता चलता है कि एम्युलेटर, CLOUD_TASKS_EMULATOR_HOST एनवायरमेंट वैरिएबल के ज़रिए चल रहा है, तो वह सूची में शामिल अनुरोधों को एम्युलेटर पर फिर से भेजता है.
ध्यान दें कि प्रोडक्शन में इस्तेमाल किया जाने वाला डिस्पैच सिस्टम, एम्युलेटर में लागू किए गए सिस्टम की तुलना में ज़्यादा जटिल होता है. इसलिए, आपको एम्युलेट किए गए व्यवहार से प्रोडक्शन एनवायरमेंट को सटीक रूप से दिखाने की उम्मीद नहीं करनी चाहिए. एम्युलेटर में मौजूद पैरामीटर, टास्क को भेजने और फिर से कोशिश करने की दर की ऊपरी सीमा तय करते हैं.
बैकग्राउंड में ट्रिगर होने वाले फ़ंक्शन को एम्युलेट करने के लिए, अपने ऐप्लिकेशन को इंस्ट्रुमेंट करना
Cloud Functions एम्युलेटर, इन सोर्स से बैकग्राउंड में ट्रिगर होने वाले फ़ंक्शन के साथ काम करता है:
- Realtime Database एम्युलेटर
- Cloud Firestore एम्युलेटर
- Authentication एम्युलेटर
- Pub/Sub एम्युलेटर
- Firebase अलर्ट एम्युलेटर
बैकग्राउंड इवेंट ट्रिगर करने के लिए, Emulator Suite UI का इस्तेमाल करके बैक-एंड रिसॉर्स में बदलाव करें. इसके अलावा, अपने प्लैटफ़ॉर्म के लिए एसडीके का इस्तेमाल करके, अपने ऐप्लिकेशन या टेस्ट कोड को एम्युलेटर से कनेक्ट करें.
एक्सटेंशन से ट्रिगर होने वाले कस्टम इवेंट के लिए, टेस्ट हैंडलर
Cloud Functions v2 की मदद से Firebase Extensions कस्टम इवेंट को मैनेज करने के लिए लागू किए जाने वाले फ़ंक्शन के लिए, Cloud Functions एम्युलेटर, Eventarc एम्युलेटर के साथ जुड़ जाता है. इससे Eventarc ट्रिगर को सपोर्ट मिलता है.
इवेंट ट्रिगर करने वाले एक्सटेंशन के लिए, कस्टम इवेंट हैंडलर की जांच करने के लिए, आपको Cloud Functions और Eventarc एमुलेटर इंस्टॉल करने होंगे.
अगर Eventarc एम्युलेटर चल रहा है, तो Cloud Functions रनटाइम, मौजूदा प्रोसेस में EVENTARC_EMULATOR एनवायरमेंट वैरिएबल को localhost:9299 पर सेट करता है. EVENTARC_EMULATOR एनवायरमेंट वैरिएबल सेट होने पर, Firebase Admin SDKs अपने-आप Eventarc एमुलेटर से कनेक्ट हो जाते हैं. Local Emulator Suite को कॉन्फ़िगर करें में बताए गए तरीके से, डिफ़ॉल्ट पोर्ट में बदलाव किया जा सकता है.
एनवायरमेंट वैरिएबल सही तरीके से कॉन्फ़िगर होने पर, Firebase Admin SDK Eventarc एम्युलेटर को अपने-आप इवेंट भेजता है. इसके बाद, Eventarc एमुलेटर, Cloud Functions एमुलेटर को कॉल बैक करता है, ताकि रजिस्टर किए गए किसी भी हैंडलर को ट्रिगर किया जा सके.
हैंडलर के लागू होने की जानकारी के लिए, Emulator Suite UI में फ़ंक्शन लॉग देखे जा सकते हैं.
लोकल टेस्टिंग एनवायरमेंट को कॉन्फ़िगर करना
अगर आपके फ़ंक्शन, dotenv पर आधारित एनवायरमेंट कॉन्फ़िगरेशन पर निर्भर हैं, तो आपके पास अपने लोकल टेस्टिंग एनवायरमेंट में उस व्यवहार को एम्युलेट करने का विकल्प होता है.
लोकल Cloud Functions एम्युलेटर का इस्तेमाल करते समय, .env.local फ़ाइल सेट अप करके, अपने प्रोजेक्ट के लिए एनवायरमेंट वैरिएबल को बदला जा सकता है. .env.local के कॉन्टेंट को .env और प्रोजेक्ट के हिसाब से बनी .env फ़ाइल के कॉन्टेंट से ज़्यादा प्राथमिकता दी जाती है.
उदाहरण के लिए, किसी प्रोजेक्ट में ये तीन फ़ाइलें शामिल हो सकती हैं. इनमें डेवलपमेंट और लोकल टेस्टिंग के लिए, थोड़ी अलग वैल्यू हो सकती हैं:
.env
|
.env.dev
|
.env.local
|
| PLANET=Earth
AUDIENCE=Humans |
AUDIENCE=Dev Humans | AUDIENCE=Local Humans |
लोकल कॉन्टेक्स्ट में शुरू होने पर, एम्युलेटर एनवायरमेंट वैरिएबल लोड करता है, जैसा कि यहां दिखाया गया है:
$ 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 शेल, जो इंटरैक्टिव और बार-बार होने वाले फ़ंक्शन के प्रोटोटाइप और डेवलपमेंट की अनुमति देता है. शेल, Cloud Functions एम्युलेटर का इस्तेमाल करता है. इसमें डेवलपमेंट के लिए, REPL-स्टाइल इंटरफ़ेस होता है. Cloud Firestore या Realtime Database एम्युलेटर के साथ इंटिग्रेशन की सुविधा नहीं दी गई है. शेल का इस्तेमाल करके, डेटा को मॉक किया जा सकता है और फ़ंक्शन कॉल किए जा सकते हैं. इससे उन प्रॉडक्ट के साथ इंटरैक्शन को सिम्युलेट किया जा सकता है जो फ़िलहाल Local Emulator Suite के साथ काम नहीं करते: Analytics, रिमोट कॉन्फ़िगरेशन, और Crashlytics.
- Cloud Functions के लिए Firebase Test SDK, फ़ंक्शन डेवलपमेंट के लिए mocha फ़्रेमवर्क के साथ Node.js. Cloud Functions टेस्ट एसडीके, Cloud Functions शेल के ऊपर ऑटोमेशन की सुविधा देता है.
Cloud Functions शेल और Cloud Functions टेस्ट एसडीके के बारे में ज़्यादा जानने के लिए, इंटरैक्टिव तरीके से फ़ंक्शन की जांच करना और Cloud Functions की यूनिट टेस्टिंग पर जाएं.
Cloud Functions एम्युलेटर, प्रोडक्शन से कैसे अलग है
ज़्यादातर मामलों में, Cloud Functions एम्युलेटर, प्रोडक्शन एनवायरमेंट के काफ़ी करीब होता है. हमने यह पक्का करने के लिए काफ़ी मेहनत की है कि Node रनटाइम में मौजूद हर चीज़, प्रोडक्शन के ज़्यादा से ज़्यादा करीब हो. हालांकि, एम्युलेटर, कंटेनर में मौजूद पूरे प्रोडक्शन एनवायरमेंट की नकल नहीं करता. इसलिए, आपका फ़ंक्शन कोड असल में काम करेगा, लेकिन आपके एनवायरमेंट के अन्य पहलू (जैसे, लोकल फ़ाइलें, फ़ंक्शन क्रैश होने के बाद का व्यवहार वगैरह) अलग होंगे.
Cloud IAM
Firebase Emulator Suite, आईएएम से जुड़े किसी भी व्यवहार को दोहराने या उसका पालन करने की कोशिश नहीं करता. एम्युलेटर, Firebase के सुरक्षा नियमों का पालन करते हैं. हालांकि, कुछ मामलों में आईएएम का इस्तेमाल किया जाता है. उदाहरण के लिए, Cloud Functions को शुरू करने वाले सेवा खाते और अनुमतियों को सेट करने के लिए. ऐसे मामलों में, एम्युलेटर को कॉन्फ़िगर नहीं किया जा सकता. साथ ही, यह आपकी डेवलपमेंट मशीन पर दुनिया भर में उपलब्ध खाते का इस्तेमाल करेगा. यह सीधे तौर पर लोकल स्क्रिप्ट चलाने जैसा है.
मेमोरी और प्रोसेसर से जुड़ी पाबंदियां
एम्युलेटर, आपके फ़ंक्शन के लिए मेमोरी या प्रोसेसर से जुड़ी पाबंदियां लागू नहीं करता. हालांकि, एम्युलेटर में timeoutSeconds रनटाइम आर्ग्युमेंट की मदद से, फ़ंक्शन के टाइम आउट होने की सुविधा काम करती है.
ध्यान दें कि एम्युलेटर में फ़ंक्शन चलाने पर, फ़ंक्शन के लागू होने में लगने वाला समय, प्रोडक्शन से अलग हो सकता है. हमारा सुझाव है कि एम्युलेटर की मदद से फ़ंक्शन डिज़ाइन और टेस्ट करने के बाद, प्रोडक्शन में सीमित टेस्ट चलाएं. इससे, फ़ंक्शन के लागू होने में लगने वाले समय की पुष्टि की जा सकेगी.
लोकल और प्रोडक्शन एनवायरमेंट में अंतर के लिए प्लानिंग करना
एम्युलेटर आपकी लोकल मशीन पर चलता है. इसलिए, यह ऐप्लिकेशन, पहले से मौजूद प्रोग्राम, और यूटिलिटी के लिए आपकी लोकल मशीन के एनवायरमेंट पर निर्भर करता है.
ध्यान रखें कि Cloud Functions डेवलपमेंट के लिए आपका लोकल एनवायरमेंट, Google के प्रोडक्शन एनवायरमेंट से अलग हो सकता है:
प्रोडक्शन एनवायरमेंट को सिम्युलेट करने के लिए, स्थानीय तौर पर इंस्टॉल किए गए ऐप्लिकेशन (जैसे, इस ट्यूटोरियल में मौजूद ImageMagick) का व्यवहार, प्रोडक्शन एनवायरमेंट से अलग हो सकता है. ऐसा खास तौर पर तब होता है, जब आपको किसी दूसरे वर्शन की ज़रूरत हो या Linux के अलावा किसी दूसरे एनवायरमेंट में डेवलप करना हो. अपने फ़ंक्शन डिप्लॉयमेंट के साथ-साथ, मौजूद नहीं होने वाले प्रोग्राम की बाइनरी कॉपी को डिप्लॉय करें.
इसी तरह, पहले से मौजूद यूटिलिटी (जैसे,
ls,mkdirजैसे शेल कमांड) प्रोडक्शन में उपलब्ध वर्शन से अलग हो सकती हैं. ऐसा खास तौर पर तब होता है, जब नॉन-Linux एनवायरमेंट (जैसे, macOS) में डेवलपमेंट किया जा रहा हो. इस समस्या को हल करने के लिए, नेटिव कमांड के बजाय सिर्फ़ Node वाले विकल्पों का इस्तेमाल करें. इसके अलावा, Linux बाइनरी बनाकर उन्हें अपने डिप्लॉयमेंट के साथ बंडल करें.
फिर से प्रयास कर रहा है
Cloud Functions एम्युलेटर, फ़ंक्शन के काम न करने पर उन्हें फिर से चलाने की सुविधा नहीं देता.
आगे क्या करना है?
- चुनिंदा वीडियो और उदाहरणों के साथ सिलसिलेवार तरीके से जानकारी पाने के लिए, Firebase एमुलेटर की ट्रेनिंग प्लेलिस्ट देखें.
- Cloud Functions for Firebase एम्युलेटर के बारे में ज़्यादा जानने के लिए, फ़ंक्शन को स्थानीय तौर पर चलाएं पर जाएं.