अपने ऐप्लिकेशन को 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 प्रोजेक्ट के साथ काम करते समय, AdMob के साथ काम करने वाले किसी भी या सभी प्रॉडक्ट के लिए एम्युलेटर चलाए जा सकते हैं. जिन प्रॉडक्ट के लिए एम्युलेटर नहीं चलाए जा रहे हैं उनके लिए, आपके ऐप्लिकेशन और कोड, लाइव संसाधन (डेटाबेस इंस्टेंस, स्टोरेज बकेट, फ़ंक्शन वगैरह) के साथ इंटरैक्ट करेंगे. |
| डेमो |
डेमो 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)
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 एक्सटेंशन के कस्टम इवेंट को हैंडल करने के लिए लागू किए गए फ़ंक्शन के लिए, Cloud Functions एम्युलेटर, Eventarc ट्रिगर के साथ काम करने के लिए, Eventarc एम्युलेटर के साथ पेयर होता है.Firebase ExtensionsCloud FunctionsCloud Functions
एक्सटेंशन के कस्टम इवेंट हैंडलर की जांच करने के लिए, Cloud Functions और Eventarc एम्युलेटर इंस्टॉल करने होंगे.
अगर Eventarc एम्युलेटर चल रहा है, तो Cloud Functions रनटाइम, मौजूदा प्रोसेस में EVENTARC_EMULATOR एनवायरमेंट
वैरिएबल को localhost:9299 पर सेट करता है. Firebase Admin SDKs एनवायरमेंट वैरिएबल सेट होने पर, Eventarc
एम्युलेटर अपने-आप EVENTARC_EMULATOR से कनेक्ट हो जाते हैं. डिफ़ॉल्ट पोर्ट में बदलाव किया जा सकता है.
इसके बारे में, कॉन्फ़िगर 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 एम्युलेटर का इस्तेमाल करता है. Cloud Firestore या Realtime Database एम्युलेटर के साथ इंटिग्रेशन की सुविधा उपलब्ध नहीं है. शेल का इस्तेमाल करके, डेटा को मॉक किया जा सकता है. साथ ही, फ़ंक्शन कॉल करके, उन प्रॉडक्ट के साथ इंटरैक्शन को सिम्युलेट किया जा सकता है जिन्हें Local Emulator Suite फ़िलहाल सपोर्ट नहीं करता. जैसे, Analytics, Remote Config, और Crashlytics.
- Cloud Functions के लिए Firebase Test SDK. यह फ़ंक्शन डेवलपमेंट के लिए, mocha फ़्रेमवर्क के साथ Node.js है. असल में, Cloud Functions Test SDK, Cloud Functions शेल के ऊपर ऑटोमेशन की सुविधा देता है.
Cloud Functions शेल और Cloud Functions Test SDK के बारे में ज़्यादा जानने के लिए, इंटरैक्टिव तरीके से फ़ंक्शन की जांच करना और Cloud Functions की यूनिट टेस्टिंग लेख पढ़ें.
Cloud Functions एम्युलेटर, प्रोडक्शन से कैसे अलग है
ज़्यादातर मामलों में, Cloud Functions एम्युलेटर, प्रोडक्शन एनवायरमेंट के काफ़ी करीब होता है. हमने यह पक्का करने के लिए काफ़ी काम किया है कि Node रनटाइम में मौजूद हर चीज़, प्रोडक्शन के जितनी करीब हो सके. हालांकि, एम्युलेटर, कंटेनर वाले पूरे प्रोडक्शन एनवायरमेंट की नकल नहीं करता. इसलिए, आपका फ़ंक्शन कोड, असल में काम करने जैसा ही होगा. हालांकि, आपके एनवायरमेंट के अन्य पहलू (जैसे, स्थानीय फ़ाइलें, फ़ंक्शन क्रैश होने के बाद का व्यवहार वगैरह) अलग-अलग होंगे.
Cloud IAM
Firebase Emulator Suite, रनटाइम के लिए, IAM से जुड़े किसी भी व्यवहार को दोहराने या उसका पालन करने की कोशिश नहीं करता. एम्युलेटर, Firebase के सुरक्षा नियमों का पालन करते हैं. हालांकि, उन स्थितियों में जहां आम तौर पर IAM का इस्तेमाल किया जाता है, जैसे कि Cloud Functions को शुरू करने वाले सेवा खाते और इस तरह अनुमतियां सेट करने के लिए, एम्युलेटर को कॉन्फ़िगर नहीं किया जा सकता. साथ ही, यह आपके डेवलपर मशीन पर, दुनिया भर में उपलब्ध खाते का इस्तेमाल करेगा. यह ठीक उसी तरह होगा जैसे स्थानीय स्क्रिप्ट को सीधे तौर पर चलाया जाता है.
मेमोरी और प्रोसेसर से जुड़ी पाबंदियां
एम्युलेटर, आपके फ़ंक्शन के लिए मेमोरी या प्रोसेसर से जुड़ी पाबंदियां लागू नहीं करता. हालांकि, एम्युलेटर, timeoutSeconds रनटाइम आर्ग्युमेंट के ज़रिए, फ़ंक्शन के टाइम आउट होने की सुविधा देता है.
ध्यान दें कि एम्युलेटर में फ़ंक्शन चलाने पर, फ़ंक्शन के एक्ज़ीक्यूशन का समय, प्रोडक्शन में लगने वाले समय से अलग हो सकता है. हमारा सुझाव है कि एम्युलेटर की मदद से फ़ंक्शन डिज़ाइन और टेस्ट करने के बाद, एक्ज़ीक्यूशन के समय की पुष्टि करने के लिए, प्रोडक्शन में सीमित टेस्ट चलाएं.
स्थानीय और प्रोडक्शन एनवायरमेंट में अंतर की योजना बनाना
एम्युलेटर, आपकी स्थानीय मशीन पर चलता है. इसलिए, यह ऐप्लिकेशन, बिल्ट-इन प्रोग्राम, और यूटिलिटी के लिए, आपके स्थानीय एनवायरमेंट पर निर्भर करता है.
ध्यान रखें कि Cloud Functions डेवलपमेंट के लिए आपका स्थानीय एनवायरमेंट, Google के प्रोडक्शन एनवायरमेंट से अलग हो सकता है:
प्रोडक्शन एनवायरमेंट को सिम्युलेट करने के लिए, स्थानीय तौर पर इंस्टॉल किए गए ऐप्लिकेशन (जैसे, इस ट्यूटोरियल में ImageMagick) का व्यवहार, प्रोडक्शन से अलग हो सकता है. खास तौर पर, अगर आपको अलग-अलग वर्शन की ज़रूरत है या अगर आप Linux के अलावा किसी अन्य एनवायरमेंट में डेवलपमेंट कर रहे हैं. अपने फ़ंक्शन के डिप्लॉयमेंट के साथ, गायब प्रोग्राम की अपनी बाइनरी कॉपी डिप्लॉय करें.
इसी तरह, बिल्ट-इन यूटिलिटी (जैसे, शेल कमांड, जैसे कि
ls,mkdir) के वर्शन, प्रोडक्शन में उपलब्ध वर्शन से अलग हो सकते हैं. खास तौर पर, अगर आप Linux के अलावा किसी अन्य एनवायरमेंट (जैसे, macOS) में डेवलपमेंट कर रहे हैं. इस समस्या को, नेटिव कमांड के लिए, सिर्फ़ Node के विकल्पों का इस्तेमाल करके या अपने डिप्लॉयमेंट के साथ बंडल करने के लिए, Linux बाइनरी बनाकर हल किया जा सकता है.
फिर से प्रयास कर रहा है
Cloud Functions एम्युलेटर, फ़ंक्शन के फ़ेल होने पर, उन्हें फिर से चलाने की सुविधा नहीं देता.
इसके बाद क्या करना है?
- वीडियो और सिलसिलेवार तरीके से उदाहरणों का कलेक्शन देखने के लिए, Firebase Emulators ट्रेनिंग प्लेलिस्ट को फ़ॉलो करें.
- Cloud Functions for Firebase एम्युलेटर के बारे में ज़्यादा जानने के लिए, Cloud Functions for Firebase एम्युलेटर के बारे में ज़्यादा जानने के लिए, स्थानीय तौर पर फ़ंक्शन चलाना लेख पढ़ें.