इस गाइड में, एक्सटेंशन को बंद हो चुके Firebase Extensions एनवायरमेंट से फ़ंक्शन किट में माइग्रेट करने का तरीका बताया गया है. इस फ़ंक्शन किट को Firebase (दूसरी जनरेशन) के कोड बेस के लिए, अपने Cloud Functions में इंस्टॉल और डिप्लॉय किया जा सकता है.
Firebase Extensions ने एक्सटेंशन बनाने, अपडेट करने, और हटाने के सभी पहलुओं को मैनेज किया. फ़ंक्शन किट, एक्सटेंशन की क्षमताओं को दूसरी जनरेशन के Cloud Functions for Firebase के तौर पर पैकेज करती हैं. फ़ंक्शन किट, स्टैंडर्ड Cloud Functions होते हैं. इसलिए, इन्हें अपने Firebase प्रोजेक्ट में Firebase सीएलआई का इस्तेमाल करके बनाया, अपडेट किया, मिटाया, और ठीक किया जा सकता है. इस गाइड की मदद से, अपने फ़ंक्शन को मैनेज किया जा सकता है. साथ ही, अपडेट उपलब्ध होने पर उन्हें अपनाया जा सकता है.
इस गाइड में, Stream Cloud Firestore to BigQuery एक्सटेंशन (firestore-bigquery-export) का इस्तेमाल उदाहरण के तौर पर किया गया है. इससे आपको माइग्रेशन के हर चरण के लिए, कमांड और कमांड आउटपुट के बारे में जानकारी मिलती है.
माइग्रेशन का तरीका तय करना
Firebase, Firebase Extensions के सभी पब्लिशर को अपने एक्सटेंशन के विकल्प के तौर पर, npm पर पब्लिश किए गए फ़ंक्शन किट बनाने के लिए बढ़ावा देता है. आपके पास यह देखने के विकल्प हैं कि आपके एक्सटेंशन के लिए, फ़ंक्शन किट का कोई विकल्प उपलब्ध है या नहीं. इसके लिए, ये तरीके अपनाएं:
- अपने प्रोजेक्ट के लिए, Firebase कंसोल के एक्सटेंशन पेज पर जाएं. आपने जो भी एक्सटेंशन इंस्टॉल किया है उससे पता चलता है कि उसके लिए फ़ंक्शन किट का कोई विकल्प उपलब्ध है या नहीं.
टर्मिनल में अपने Firebase प्रोजेक्ट में
firebase ext:listचलाएं, ताकि यह पता चल सके कि आपके इंस्टॉल किए गए कौनसे एक्सटेंशन के लिए आधिकारिक विकल्प उपलब्ध हैं:firebase ext:list --project my-projecti extensions: ensuring required API firebaseextensions.googleapis.com is enabled... ✔ extensions: required API firebaseextensions.googleapis.com is enabled i extensions: list of extensions installed in my-project: ┌────────────────────────────────────┬───────────┬────────────────────────────────┬────────┬─────────┬─────────────────────┬───────────────────────────────────────────────────┐ │ Extension │ Publisher │ Instance ID │ State │ Version │ Your last update │ Replacement Kit │ ├────────────────────────────────────┼───────────┼────────────────────────────────┼────────┼─────────┼─────────────────────┼───────────────────────────────────────────────────┤ │ firebase/firestore-bigquery-export │ firebase │ firestore-bigquery-export-zbrp │ ACTIVE │ 0.3.2 │ 2026-06-10 18:35:03 │ @firebase-function-kits/firestore-bigquery-export │ ├────────────────────────────────────┼───────────┼────────────────────────────────┼────────┼─────────┼─────────────────────┼───────────────────────────────────────────────────┤ │ firebase/storage-resize-images │ firebase │ storage-resize-images │ ACTIVE │ 0.3.6 │ 2026-06-03 17:41:24 │ │ └────────────────────────────────────┴───────────┴────────────────────────────────┴────────┴─────────┴─────────────────────┴───────────────────────────────────────────────────┘ ⚠ Notice: Firebase Extensions will shut down on March 31, 2027. Learn more: https://firebase.google.com/docs/extensions/faq-and-troubleshooting
अगर आपके एक्सटेंशन के लिए, आधिकारिक फ़ंक्शन किट का कोई विकल्प उपलब्ध है, तो उसे npm पर फ़ंक्शन किट पर माइग्रेट करें सेक्शन का इस्तेमाल करके माइग्रेट किया जा सकता है.
अगर आपको पब्लिश किया गया कोई विकल्प नहीं मिलता है, तो एक्सटेंशन कोड को फ़ोर्क करके अपना विकल्प बनाया जा सकता है. ऐसा इसलिए, क्योंकि सभी एक्सटेंशन ओपन सोर्स होते हैं. इसके लिए, खुद की बनाई गई फ़ंक्शन किट पर माइग्रेट करें गाइड में दिया गया तरीका अपनाएं.
| माइग्रेशन का तरीका चुनें: | npm पर फ़ंक्शन किट पर माइग्रेट करना खुद की बनाई गई फ़ंक्शन किट पर माइग्रेट करना |
npm पर फ़ंक्शन किट पर माइग्रेट करना
माइग्रेशन से जुड़ी सीमाओं के बारे में जानें
किसी एक्सटेंशन इंस्टेंस को माइग्रेट करने से पहले, देखें कि आपके सेटअप में इनमें से किसी सुविधा का इस्तेमाल किया जा रहा है या नहीं. इन सुविधाओं के लिए, कोई दूसरा तरीका अपनाना पड़ता है या फ़ंक्शन किट में ये सुविधाएं अब तक काम नहीं करती हैं:
- कस्टम Docker रिपॉज़िटरी और केएमएस कुंजियों के लिए, मैन्युअल तरीके से काम करना पड़ता है Cloud Functions for Firebase, कस्टम Docker रिपॉज़िटरी या ग्राहक की ओर से मैनेज की जाने वाली एन्क्रिप्शन कुंजी (केएमएस कुंजी) को कॉन्फ़िगर करने के लिए, सिस्टम पैरामीटर को बदलने की सुविधा के साथ काम नहीं करता. अगर आपका एक्सटेंशन इनमें से किसी भी पैरामीटर को कॉन्फ़िगर करता है, तो अक्सर पूछे जाने वाले सवालों में बताया गया तरीका देखें.
शुरू करने से पहले
आपको Firebase सीएलआई सेट अप करना होगा और Firebase प्रोजेक्ट शुरू करना होगा. सीएलआई का इस्तेमाल करते समय, पक्का करें कि firebase-tools वर्शन >= 15.32.0 का इस्तेमाल किया जा रहा हो. इसमें माइग्रेशन और फ़ंक्शन किट के नए कमांड मौजूद हैं.
खाते के लिए ज़रूरी अनुमतियां और भूमिकाएं
माइग्रेशन के दौरान, Firebase सीएलआई को क्या बनाना और कॉन्फ़िगर करना है, इसके आधार पर Firebase और Google Cloud के साथ पुष्टि करने के लिए इस्तेमाल किए जा रहे खाते के पास ये भूमिकाएं होनी चाहिए:
roles/firebaseextensions.editorroles/cloudbuild.builds.editorroles/artifactregistry.writerroles/run.developerroles/iam.serviceAccountUserroles/iam.serviceAccountCreatorroles/cloudfunctions.admin(अगर आपको सार्वजनिक एंडपॉइंट के लिएsetIamPermissionsकरना है)roles/secretmanager.admin(अगर सीक्रेट का इस्तेमाल किया जा रहा है)roles/serviceusage.serviceUsageAdmin(अगर आपको नए एपीआई चालू करने हैं)
हमारा सुझाव है कि ऐसे खाते का इस्तेमाल करें जिससे पहले भी एक्सटेंशन इंस्टॉल किए गए हों और फ़ंक्शन डिप्लॉय किए गए हों. ऐसा इसलिए, क्योंकि ऐसे खाते को ज़्यादातर अनुमतियां पहले ही मिल चुकी होंगी. अगर माइग्रेट किए जा रहे खाते को ज़्यादा भूमिकाओं की ज़रूरत है, तो उन्हें जोड़ने के लिए Google Cloud IAM के निर्देशों का पालन करें.
कोई सीएलआई वर्कफ़्लो चुनें
किसी एक्सटेंशन इंस्टेंस से npm पर उपलब्ध फ़ंक्शन किट पर माइग्रेट करने के लिए, इनमें से कोई एक विकल्प चुनें:
- (सुझाया गया)
ext:migrateसीएलआई कमांड का इस्तेमाल करके माइग्रेट करें. यह कमांड, एक्सटेंशन को अनइंस्टॉल करने से पहले, फ़ंक्शन किट के बदले इस्तेमाल होने वाले एक्सटेंशन को डिप्लॉय करता है. - फ़ंक्शन किट के सीएलआई कमांड का इस्तेमाल करके माइग्रेट करें. अपने एक्सटेंशन को अपडेट करने, फ़ंक्शन किट इंस्टॉल करने, उसे एक्सटेंशन की तरह कॉन्फ़िगर करने, किट को डिप्लॉय करने, और एक्सटेंशन को अनइंस्टॉल करने के लिए, अलग-अलग कमांड का इस्तेमाल किया जा सकता है. इससे, निर्देशों को फिर से क्रम में लगाने या चरणों के बीच अतिरिक्त काम करने में ज़्यादा आसानी होती है.
ext:migrate का इस्तेमाल करके माइग्रेट करना
हर एक्सटेंशन इंस्टेंस के लिए एक बार, माइग्रेशन शुरू करने के लिए यह कमांड चलाएं:
firebase ext:migrate --project <project-id>
इस निर्देश की मदद से, आपको ये काम करने में मदद मिलती है:
- माइग्रेट करने के लिए कोई ऐसा एक्सटेंशन चुनना जिसके लिए, आधिकारिक फ़ंक्शन किट का विकल्प उपलब्ध हो.
- उस एक्सटेंशन का कोई इंस्टेंस चुनना.
- अगर ज़रूरी हो, तो एक्सटेंशन को उसके नए वर्शन पर अपडेट करना.
- फ़ंक्शन किट इंस्टॉल करना और किसी इंस्टेंस को उसी तरह कॉन्फ़िगर करना जिस तरह एक्सटेंशन इंस्टेंस को कॉन्फ़िगर किया जाता है.
- फ़ंक्शन किट को डिप्लॉय किया जा रहा है.
- यह पुष्टि करना कि फ़ंक्शन किट सही तरीके से डिप्लॉय हो गई है और सभी लाइफ़साइकल हुक (अगर कोई है) चल रहे हैं.
- एक्सटेंशन इंस्टेंस को अनइंस्टॉल किया जा रहा है.
अगर आपको किसी खास एक्सटेंशन या एक्सटेंशन इंस्टेंस को माइग्रेट करना है, तो इन कमांड-लाइन फ़्लैग का इस्तेमाल करके इसकी जानकारी दें:
firebase ext:migrate --extension firebase/firestore-bigquery-export --project <project-id>
# or
firebase ext:migrate --ext-instance firestore-bigquery-export-abcd --project <project-id>
अगर आपको पता है कि आपको किस पैकेज पर माइग्रेट करना है, तो --package फ़्लैग का इस्तेमाल करके इसकी जानकारी दें. खास तौर पर, तब जब यह Google की ओर से लिस्ट किया गया आधिकारिक पैकेज न हो:
firebase ext:migrate --ext-instance firestore-bigquery-export-abcd --package @firebase-function-kits/firestore-bigquery-export --project <project-id>
फ़ंक्शन किट की डिप्लॉयमेंट की पुष्टि करना
यह पुष्टि करने के लिए कि किट के firebase deploy में कोई गड़बड़ी नहीं थी, डिप्लॉयमेंट लॉग देखें. इससे पता चलेगा कि कोई लाइफ़साइकल हुक ट्रिगर हुआ था या नहीं. लोकप्रिय एक्सटेंशन, जैसे कि Stream Cloud Firestore से BigQuery, लाइफ़साइकल हुक का इस्तेमाल करते हैं. यहां एक उदाहरण दिया गया है, जिसमें बताया गया है कि ट्रिगर होने पर लाइफ़साइकल हुक कैसा दिखता है:
i functions: Executing afterFirstDeploy lifecycle hook targeting: kit-firestore-bigquery-export-initBigQuerySync...
✔ functions: Successfully queued task for lifecycle hook kit-firestore-bigquery-export-initBigQuerySync in queue projects/my-project/locations/europe-west1/queues/kit-firestore-bigquery-export-initBigQuerySync.
i functions: View logs for afterFirstDeploy at: https://console.cloud.google.com/logs/query;query=resource.type%3D%22cloud_run_revision%22%0Aresource.labels.service_name%3D%22kit-firestore-bigquery-export--initbigquerysync%22%0Aresource.labels.location%3D%22europe-west1%22;project=my-project
इन लॉग मैसेज से यह पुष्टि होती है:
- लाइफ़साइकल हुक मिला और उसे लागू किया गया.
- लाइफ़साइकल हुक से जुड़ी टास्क सूची में, एक टास्क को सूची में जोड़ा गया.
- Cloud Logging का लिंक दिया गया था, ताकि आप पुष्टि कर सकें कि टास्क बिना किसी गड़बड़ी के पूरा हो गया है.
Google Cloud कंसोल पर लॉग के लिंक पर जाएं. इससे यह पुष्टि की जा सकेगी कि लॉग में कोई गड़बड़ी नहीं है और टास्क सूची के इवेंट को प्रोसेस कर लिया गया है. अगर लाइफ़साइकल इवेंट सही तरीके से लागू नहीं हुआ, तो इसे फिर से ट्रिगर करने के लिए यह कमांड चलाएं:
firebase functions:lifecycle:run <hook-name> <codebase>
अगर पहली बार फ़ंक्शन किट इंस्टेंस को डिप्लॉय किया जा रहा है, तो यह चलाएं:
firebase functions:lifecycle:run afterFirstDeploy <kit-instance-id>
अगर पुष्टि करने के दौरान आपको कभी भी इस माइग्रेशन को रोकना है या पहले जैसा करना है, तो एक्सटेंशन अनइंस्टॉल करें में दिए गए निर्देशों का इस्तेमाल करके, किट को अनइंस्टॉल किया जा सकता है.
यह पुष्टि करने के बाद कि फ़ंक्शन किट का शुरुआती डिप्लॉयमेंट पूरा हो गया है, आपको यह पुष्टि करनी होगी कि किट की सुविधा उम्मीद के मुताबिक काम कर रही है या नहीं. एक्सटेंशन अब भी चल रहा है, इसलिए आपको ध्यान रखना होगा कि आप जो जांच कर रहे हैं वह सिर्फ़ यह न हो कि दोनों में से किसी एक ने काम किया है. ऐसा इसलिए, क्योंकि एक्सटेंशन काम कर रहा है और आगे भी काम करता रहेगा.
अगर प्रोसेसिंग में कोई बदलाव नहीं हुआ है और आपको एक्सटेंशन और किट से डुप्लीकेट नतीजे नहीं दिख रहे हैं, तो सबसे अच्छा विकल्प यह है कि किट की सुविधा को ट्रिगर करने के बाद, सीधे किट के लॉग की जांच करें.
उदाहरण: Cloud Firestore से BigQuery तक स्ट्रीम करना
Stream Cloud Firestore to BigQuery एक्सटेंशन, रॉ चेंजलॉग टेबल (*_raw_changelog) और सबसे नए व्यू की टेबल (*_raw_latest) दोनों में डेटा सेव करता है. अगर किट और एक्सटेंशन को एक ही इवेंट डिलीवर किया जाता है, तो डुप्लीकेट कॉपी हटा दी जाएगी. इसलिए, BigQuery में किसी भी लाइन या डुप्लीकेट लाइन की मौजूदगी का इस्तेमाल करके, यह पुष्टि नहीं की जा सकती कि किट काम कर रही है या नहीं.
firebase functions:logs का इस्तेमाल करके, Firestore कलेक्शन में डेटा लिखने के कुछ ही समय बाद, फ़ंक्शन लॉग देखे जा सकते हैं. साथ ही, लॉग एंट्री में यह देखा जा सकता है कि डेटा लिखने की प्रोसेस पूरी हुई या नहीं. firestore-bigquery-export के डिफ़ॉल्ट इंस्टेंस आईडी वाली इस किट के लिए,
यह कुछ ऐसा दिखेगा:
2026-09-25T19:52:46.328612Z I kit-firestore-bigquery-export-fsexportbigquery: Started execution of extension
2026-09-25T19:52:46.328644Z I kit-firestore-bigquery-export-fsexportbigquery: {"message":"Firestore event received by onDocumentWritten trigger","document_name":"projects/extensions-eventarc-testing/databases/(default)/documents/exported-messages/cmGP6XLyksqGdw2OgTOq","operation":0,"event_id":"9f59a2a4-1a5e-4c41-a32d-561e3c734502"}
2026-09-25T19:52:46.616064Z I kit-firestore-bigquery-export-fsexportbigquery: Completed execution of extension
2026-09-2
अगर आपके पास बहुत सारे लॉग हैं, तो इस कमांड का इस्तेमाल करके, किसी खास किट फ़ंक्शन के हिसाब से फ़िल्टर किया जा सकता है:
firebase functions:log --only <function name>
किसी किट इंस्टेंस के लिए फ़ंक्शन के नाम ढूंढने के लिए, इस कमांड का इस्तेमाल करें:
firebase functions:list | grep kit-<kit instance id>
इस उदाहरण के लिए:
firebase functions:list | grep kit-firestore-bigquery-export
│ kit-firestore-bigquery-export-fsexportbigquery │ v2 │ google.cloud.firestore.document.v1.written │
│ kit-firestore-bigquery-export-initBigQuerySync │ v2 │ taskQueue │
│ kit-firestore-bigquery-export-setupBigQuerySync │ v2 │ taskQueue │
│ kit-firestore-bigquery-export-syncBigQuery │ v2 │ taskQueue │
फ़ंक्शन किट की README फ़ाइल देखें
कुछ किट के लिए, फ़ंक्शन किट से अपने-आप होने वाले काम के अलावा, अतिरिक्त काम की ज़रूरत पड़ सकती है. जिस किट को इंस्टॉल किया जा रहा है उसके लिए README देखें और अन्य निर्देशों का पालन करें.
फ़ंक्शन किट सीएलआई का इस्तेमाल करके माइग्रेट करना
शुरू करने से पहले, उस एक्सटेंशन का इंस्टेंस आईडी और उसकी जगह इस्तेमाल होने वाली किट के npm पैकेज का नाम पहचानें और लिख लें जिसे आपको किट पर माइग्रेट करना है. firebase ext:list के आउटपुट का इस्तेमाल करके, इन दोनों को ढूंढा जा सकता है. ext:list का इस्तेमाल करने का उदाहरण देखने के लिए, माइग्रेशन पाथ तय करना लेख पढ़ें.
1. अपने एक्सटेंशन इंस्टेंस को नए वर्शन पर अपग्रेड करना
आपको अपने एक्सटेंशन को नए वर्शन पर अपडेट करना होगा, ताकि आपके एक्सटेंशन इंस्टेंस और उसके रिप्लेसमेंट किट के बीच का अंतर कम हो सके. अगर आपका एक्सटेंशन अपग्रेड नहीं किया गया है, तो आपके एक्सटेंशन इंस्टेंस और उसकी किट के रिप्लेसमेंट के बीच काफ़ी अहम और नुकसान पहुंचा सकने वाले बदलाव हो सकते हैं. ऐसा हो सकता है कि एक्सपोर्ट किया गया कॉन्फ़िगरेशन, किट की उम्मीद के मुताबिक न हो. ऐसा वर्शन के हिसाब से पैरामीटर में होने वाले बदलावों की वजह से होता है.
एक्सटेंशन को अपडेट करने के लिए, इनमें से किसी एक विकल्प का इस्तेमाल करें. यह इस बात पर निर्भर करता है कि उसे कहां इंस्टॉल किया गया था:
- Firebase कंसोल से
- Firebase सीएलआई से, इसका इस्तेमाल करके:
firebase ext:update <extension-instance-id> --project <project-id> firebase deploy --only extensions --project <project-id>
अगर इस चरण को स्किप किया जाता है, तो कॉन्फ़िगरेशन एक्सपोर्ट करते समय सीएलआई आपको अपग्रेड करने के लिए कहेगा. ऐसा तब होगा, जब आपका एक्सटेंशन नए वर्शन पर न हो.
2. बदले गए फ़ंक्शन किट इंस्टेंस की समीक्षा करना और उसे इंस्टॉल करना
इस सीएलआई कमांड का इस्तेमाल करके, फ़ंक्शन किट इंस्टॉल की जा सकती है:
firebase functions:kits:install --template migration --no-configure --package <npm-package-name> --project <project-id>
इंस्टॉलेशन के दौरान, अपनी किट के लिए कोई इंस्टेंस आईडी चुनते समय, उसे कहीं लिख लें. इससे आपको माइग्रेशन के निर्देशों में बाद में उसका इस्तेमाल करने में मदद मिलेगी.
किट इंस्टॉल होने के बाद, आपके Firebase प्रोजेक्ट में एक नई डायरेक्ट्री बन जाती है. इसकी लोकेशन function-kits/<kit-name>/source जैसी होती है. इसमें npm पैकेज होता है, जो आपके एक्सटेंशन की जगह ले लेता है. साथ ही, इसमें एक बेसिक index.ts फ़ाइल होती है, जो उन फ़ंक्शन को एक्सपोर्ट करती है जिन्हें Firebase को डिप्लॉय करना है और जिनके लिए कस्टम कॉन्फ़िगरेशन सेट करना है.
किट के लिए README की समीक्षा करें और वहां दिए गए अन्य निर्देशों का पालन करें.
अगर आपके पास एक ही प्रोजेक्ट में किट के कई इंस्टेंस हैं, तो उसी किट के नए इंस्टेंस बनाने के लिए, इस निर्देश को दोहराया जा सकता है. इसके अलावा, किट के एक इंस्टेंस को अलग-अलग कॉन्फ़िगरेशन वाले दो Firebase प्रोजेक्ट में डिप्लॉय किया जा सकता है. उदाहरण के लिए, स्टेजिंग प्रोजेक्ट और प्रोडक्शन प्रोजेक्ट. इन ऐडवांस सेटअप के बारे में ज़्यादा जानने के लिए, ऐडवांस माइग्रेशन देखें.
उदाहरण:
firebase functions:kits:install --template migration --no-configure --package @firebase-function-kits/firestore-bigquery-export --project my-project
3. फ़ंक्शन किट इंस्टेंस को एक्सटेंशन की तरह ही कॉन्फ़िगर करें
आपको इस किट इंस्टेंस को उस एक्सटेंशन के कॉन्फ़िगरेशन के मुताबिक कस्टमाइज़ करना होगा जिसे बदला जा रहा है. एक्सटेंशन इंस्टेंस के कॉन्फ़िगरेशन को .env फ़ाइल में एक्सपोर्ट किया जा सकता है. इसमें सभी Cloud Functions के लिए पैरामीटर, एनवायरमेंट वैरिएबल, और सीक्रेट रेफ़रंस कॉन्फ़िगरेशन का डेटा सेव होता है. इसमें किट भी शामिल हैं. इसे सीधे अपनी किट की कॉन्फ़िगरेशन फ़ाइल में एक्सपोर्ट करने के लिए, यह कमांड चलाएं:
firebase ext:export --mode functions --instance <extension-instance-id> --kit-instance <kit-instance-id> --project <project-id>
इस चरण के आखिर में, इस इंस्टेंस के कॉन्फ़िगरेशन की जानकारी, आपकी इंस्टेंस कॉन्फ़िगरेशन डायरेक्ट्री में मौजूद प्रोजेक्ट के हिसाब से बनी .env फ़ाइल में सेव हो जाती है. जैसे:
function-kits/<kit-name>/config-<instance-id>/.env.<project-id>
4. किट को डिप्लॉय करना और उसकी पुष्टि करना
अब किट इंस्टॉल हो गई है और फ़ंक्शन के सेट के तौर पर उपलब्ध है. इसलिए, किट को बदलने की प्रोसेस को डिप्लॉय किया जा सकता है. फ़ंक्शन किट, स्टैंडर्ड फ़ंक्शन की तरह काम करती हैं. इनमें हर किट इंस्टेंस, आपके फ़ंक्शन को व्यवस्थित करने के लिए एक अलग कोड बेस के तौर पर काम करता है. आपके पास अपने सभी फ़ंक्शन या सिर्फ़ किसी खास किट इंस्टेंस को डिप्लॉय करने का विकल्प होता है. किसी एक एक्सटेंशन इंस्टेंस को माइग्रेट करते समय, सिर्फ़ उस किट इंस्टेंस को डिप्लॉय करें.
अगर आपकी किट में ऐसे नए पैरामीटर इस्तेमाल किए जाते हैं जो उस एक्सटेंशन इंस्टेंस में मौजूद नहीं थे जिससे आपने माइग्रेट किया है, तो डिप्लॉयमेंट की प्रोसेस शुरू होने पर, Firebase सीएलआई आपसे उनके बारे में पूछता है. अप-टू-डेट firestore-bigquery-export एक्सटेंशन के इस उदाहरण में, इसकी उम्मीद नहीं की जाती. हालांकि, कई किट, किट के इस्तेमाल किए गए किसी भी इवेंट ट्रिगर सोर्स के लिए, नए पैरामीटर का अनुरोध करती हैं. इस माइग्रेशन के तहत, अपडेट की गई किट में 2nd gen फ़ंक्शन इस्तेमाल किए जाते हैं. पहले, एक्सटेंशन में 1st gen फ़ंक्शन इस्तेमाल किए जाते थे. दूसरी जनरेशन में, फ़ंक्शन अपने इवेंट सोर्स के पास मौजूद होते हैं और उन्हें एक अतिरिक्त पैरामीटर के तौर पर जोड़ा जाता है. आने वाले समय में, अगर नए पैरामीटर जोड़े जाते हैं, तो सीएलआई आपको अगले डिप्लॉयमेंट के बारे में सूचना देगा.
उदाहरण:
firebase deploy --only functions:firestore-bigquery-export --project my-project
आउटपुट:
=== Deploying to 'my-project'...
i deploying functions
i functions: Loaded environment variables from function-kits/firestore-bigquery-export/config-firestore-bigquery-export/.env.my-project
i functions: ensuring required API bigquery.googleapis.com is enabled...
i functions: ensuring required API cloudtasks.googleapis.com is enabled...
✔ functions: required APIs are enabled
i functions: granting declarative IAM roles to managed service account:
- BigQuery Data Editor
- BigQuery User
- Cloud Datastore User
- Eventarc Event Receiver
- roles/run.invoker
✔ functions: successfully granted IAM roles
i functions: creating Node.js 22 (2nd Gen) function kit-firestore-bigquery-export-fsexportbigquery(us-central1)...
i functions: creating Node.js 22 (2nd Gen) function kit-firestore-bigquery-export-initBigQuerySync(us-central1)...
i functions: creating Node.js 22 (2nd Gen) function kit-firestore-bigquery-export-setupBigQuerySync(us-central1)...
✔ functions[kit-firestore-bigquery-export-fsexportbigquery(us-central1)] Successful create operation.
✔ functions[kit-firestore-bigquery-export-initBigQuerySync(us-central1)] Successful create operation.
✔ functions[kit-firestore-bigquery-export-setupBigQuerySync(us-central1)] Successful create operation.
i functions: Executing afterFirstDeploy lifecycle hook targeting: kit-firestore-bigquery-export-initBigQuerySync...
✔ functions: Successfully queued task for lifecycle hook kit-firestore-bigquery-export-initBigQuerySync in queue projects/my-project/locations/us-central1/queues/kit-firestore-bigquery-export-initBigQuerySync.
✔ Deploy complete!
यह पुष्टि करने के लिए कि किट के firebase deploy में कोई गड़बड़ी नहीं थी, डिप्लॉयमेंट लॉग देखें. इससे पता चलेगा कि कोई लाइफ़साइकल हुक ट्रिगर हुआ था या नहीं. लोकप्रिय एक्सटेंशन, जैसे कि Stream Cloud Firestore से BigQuery, लाइफ़साइकल हुक का इस्तेमाल करते हैं. यहां एक उदाहरण दिया गया है, जिसमें बताया गया है कि ट्रिगर होने पर लाइफ़साइकल हुक कैसा दिखता है:
i functions: Executing afterFirstDeploy lifecycle hook targeting: kit-firestore-bigquery-export-initBigQuerySync...
✔ functions: Successfully queued task for lifecycle hook kit-firestore-bigquery-export-initBigQuerySync in queue projects/my-project/locations/europe-west1/queues/kit-firestore-bigquery-export-initBigQuerySync.
i functions: View logs for afterFirstDeploy at: https://console.cloud.google.com/logs/query;query=resource.type%3D%22cloud_run_revision%22%0Aresource.labels.service_name%3D%22kit-firestore-bigquery-export--initbigquerysync%22%0Aresource.labels.location%3D%22europe-west1%22;project=my-project
इन लॉग मैसेज से यह पुष्टि होती है:
- लाइफ़साइकल हुक मिला और उसे लागू किया गया.
- लाइफ़साइकल हुक से जुड़ी टास्क सूची में, एक टास्क को सूची में जोड़ा गया.
- Cloud Logging का लिंक दिया गया था, ताकि आप पुष्टि कर सकें कि टास्क बिना किसी गड़बड़ी के पूरा हो गया है.
Google Cloud कंसोल पर लॉग के लिंक पर जाएं. इससे यह पुष्टि की जा सकेगी कि लॉग में कोई गड़बड़ी नहीं है और टास्क सूची के इवेंट को प्रोसेस कर लिया गया है. अगर लाइफ़साइकल इवेंट सही तरीके से लागू नहीं हुआ, तो इसे फिर से ट्रिगर करने के लिए यह कमांड चलाएं:
firebase functions:lifecycle:run <hook-name> <codebase>
अगर पहली बार फ़ंक्शन किट इंस्टेंस को डिप्लॉय किया जा रहा है, तो यह चलाएं:
firebase functions:lifecycle:run afterFirstDeploy <kit-instance-id>
अगर पुष्टि करने के दौरान आपको कभी भी इस माइग्रेशन को रोकना है या पहले जैसा करना है, तो एक्सटेंशन अनइंस्टॉल करें में दिए गए निर्देशों का इस्तेमाल करके, किट को अनइंस्टॉल किया जा सकता है.
यह पुष्टि करने के बाद कि फ़ंक्शन किट का शुरुआती डिप्लॉयमेंट पूरा हो गया है, आपको यह पुष्टि करनी होगी कि किट की सुविधा उम्मीद के मुताबिक काम कर रही है या नहीं. एक्सटेंशन अब भी चल रहा है, इसलिए आपको ध्यान रखना होगा कि आप जो जांच कर रहे हैं वह सिर्फ़ यह न हो कि दोनों में से किसी एक ने काम किया है. ऐसा इसलिए, क्योंकि एक्सटेंशन काम कर रहा है और आगे भी काम करता रहेगा.
अगर प्रोसेसिंग में कोई बदलाव नहीं हुआ है और आपको एक्सटेंशन और किट से डुप्लीकेट नतीजे नहीं दिख रहे हैं, तो सबसे अच्छा विकल्प यह है कि किट की सुविधा को ट्रिगर करने के बाद, सीधे किट के लॉग की जांच करें.
उदाहरण: Cloud Firestore से BigQuery तक स्ट्रीम करना
Stream Cloud Firestore to BigQuery एक्सटेंशन, रॉ चेंजलॉग टेबल (*_raw_changelog) और सबसे नए व्यू की टेबल (*_raw_latest) दोनों में डेटा सेव करता है. अगर किट और एक्सटेंशन को एक ही इवेंट डिलीवर किया जाता है, तो डुप्लीकेट कॉपी हटा दी जाएगी. इसलिए, BigQuery में किसी भी लाइन या डुप्लीकेट लाइन की मौजूदगी का इस्तेमाल करके, यह पुष्टि नहीं की जा सकती कि किट काम कर रही है या नहीं.
firebase functions:logs का इस्तेमाल करके, Firestore कलेक्शन में डेटा लिखने के कुछ ही समय बाद, फ़ंक्शन लॉग देखे जा सकते हैं. साथ ही, लॉग एंट्री में यह देखा जा सकता है कि डेटा लिखने की प्रोसेस पूरी हुई या नहीं. firestore-bigquery-export के डिफ़ॉल्ट इंस्टेंस आईडी वाली इस किट के लिए,
यह कुछ ऐसा दिखेगा:
2026-09-25T19:52:46.328612Z I kit-firestore-bigquery-export-fsexportbigquery: Started execution of extension
2026-09-25T19:52:46.328644Z I kit-firestore-bigquery-export-fsexportbigquery: {"message":"Firestore event received by onDocumentWritten trigger","document_name":"projects/extensions-eventarc-testing/databases/(default)/documents/exported-messages/cmGP6XLyksqGdw2OgTOq","operation":0,"event_id":"9f59a2a4-1a5e-4c41-a32d-561e3c734502"}
2026-09-25T19:52:46.616064Z I kit-firestore-bigquery-export-fsexportbigquery: Completed execution of extension
2026-09-2
अगर आपके पास बहुत सारे लॉग हैं, तो इस कमांड का इस्तेमाल करके, किसी खास किट फ़ंक्शन के हिसाब से फ़िल्टर किया जा सकता है:
firebase functions:log --only <function name>
किसी किट इंस्टेंस के लिए फ़ंक्शन के नाम ढूंढने के लिए, इस कमांड का इस्तेमाल करें:
firebase functions:list | grep kit-<kit instance id>
इस उदाहरण के लिए:
firebase functions:list | grep kit-firestore-bigquery-export
│ kit-firestore-bigquery-export-fsexportbigquery │ v2 │ google.cloud.firestore.document.v1.written │
│ kit-firestore-bigquery-export-initBigQuerySync │ v2 │ taskQueue │
│ kit-firestore-bigquery-export-setupBigQuerySync │ v2 │ taskQueue │
│ kit-firestore-bigquery-export-syncBigQuery │ v2 │ taskQueue │
5. एक्सटेंशन को अनइंस्टॉल करना
डिप्लॉय की गई फ़ंक्शन किट की पुष्टि करने के बाद, एक्सटेंशन को अनइंस्टॉल किया जा सकता है. इससे, किट और एक्सटेंशन के लिए, उसके व्यवहार की डुप्लीकेट कॉपी नहीं बनाई जा सकेगी. Firebase सीएलआई से सभी एक्सटेंशन अनइंस्टॉल किए जा सकते हैं. इससे कोई फ़र्क़ नहीं पड़ता कि आपने उन्हें कैसे इंस्टॉल किया है. इसके लिए, आपको --immediate फ़्लैग पास करना होगा:
firebase ext:uninstall <extension-instance-id> --project <project-id> --immediate
उदाहरण:
firebase ext:uninstall firestore-bigquery-export --project my-project --immediate
आउटपुट:
i extensions: uninstalling firestore-bigquery-export...
i extensions: deleting extension instance resources in project my-project...
✔ extensions: successfully uninstalled firestore-bigquery-export
ऐडवांस माइग्रेशन
आपके पास कई Firebase प्रोजेक्ट में एक्सटेंशन हो सकते हैं. इन्हें एक ही कोड बेस से मैनेज किया जा सकता है. उदाहरण के लिए, अगर आपने testing एनवायरमेंट और production एनवायरमेंट में एक ही इन्फ़्रास्ट्रक्चर को डिप्लॉय किया है, तो दोनों में एक documents Cloud Firestore इंस्टेंस होगा, जिसे BigQuery में एक्सपोर्ट किया जाएगा. ऐसे में, हो सकता है कि आपके पास firestore-bigquery-export एक्सटेंशन के दो इंस्टेंस इंस्टॉल हों:
export-documents-testingexport-documents-production
अगर आपने Firebase सीएलआई का इस्तेमाल करते समय, एक्सटेंशन के इन दो इंस्टेंस को एक ही कोड बेस में फ़ंक्शन किट के दो इंस्टेंस पर माइग्रेट किया है और firebase deploy --project testing और firebase deploy --project production का इस्तेमाल करके डिप्लॉय किया है, तो हर डिप्लॉयमेंट से testing और production, दोनों एनवायरमेंट में दो इंस्टेंस बन जाएंगे.
इसके बजाय, एक्सटेंशन के दो इंस्टेंस को फ़ंक्शन किट के एक इंस्टेंस से बदलें. यह इंस्टेंस, firestore-bigquery-export के लिए होगा और इसे कई प्रोजेक्ट में डिप्लॉय किया जाएगा. हर प्रोजेक्ट का अपना कॉन्फ़िगरेशन होगा. इंस्टेंस के लिए आपकी कॉन्फ़िगरेशन डायरेक्ट्री, कुछ इस तरह दिखनी चाहिए:
config-export-documents/.env.testing.env.production
testing और production पर हर डिप्लॉयमेंट, आपकी किट का एक इंस्टेंस बनाता है. साथ ही, उससे जुड़ा कॉन्फ़िगरेशन भी बनाता है. मौजूदा सीएलआई कमांड, इस सेटअप को तब तक बनाते हैं, जब तक ext:migrate या functions:kits:install के हर इन्वोकेशन में --project फ़्लैग पास किया जाता है.
उदाहरण:
firebase functions:kits:install --package @firebase-function-kits/firestore-bigquery-export --project testing --no-configure --template migration
✔ What would you like to name this kit? firestore-bigquery-export
✔ What would you like to name this instance? export-documents
✔ Wrote function-kits/firestore-bigquery-export/source/package.json
✔ Wrote function-kits/firestore-bigquery-export/source/tsconfig.json
✔ Wrote function-kits/firestore-bigquery-export/source/.gitignore
✔ Wrote function-kits/firestore-bigquery-export/source/src/index.ts
i functions: Running npm install
✔ Wrote configuration info to firebase.json
✔ functions: Function kit firestore-bigquery-export successfully installed.
# This creates the export-documents instance with an empty .env.testing file
# for the testing project. Now populate it via export:
firebase ext:export --mode functions --instance export-documents-testing \
--kit-instance export-documents --project testing
# Repeat the export for production into the same kit instance to create
# .env.production from the export-documents-prod instance:
firebase ext:export --mode functions --instance export-documents-prod \
--kit-instance export-documents --project production
अब आपके पास एक किट इंस्टेंस है, जिसे आपके testing और production प्रोजेक्ट में उनके कॉन्फ़िगरेशन के साथ डिप्लॉय करने के लिए कॉन्फ़िगर किया गया है. अगर आपने testing प्रोजेक्ट में कोई इंस्टेंस बनाया है और production प्रोजेक्ट में उसी पैकेज के लिए functions:kits:install कमांड चलाया है, तो आपको testing के लिए कॉन्फ़िगर किए गए इंस्टेंस को फिर से इस्तेमाल करने या दूसरा इंस्टेंस इंस्टॉल करने का विकल्प दिखेगा.