Firebase एक्सटेंशन को फ़ंक्शन किट में माइग्रेट करना

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

Firebase Extensions एक्सटेंशन बनाने, अपडेट करने, और हटाने से जुड़े सभी पहलुओं को मैनेज करता है. फ़ंक्शन किट, एक्सटेंशन की सुविधाओं को सामान्य दूसरी जनरेशन के Cloud Functions for Firebase के तौर पर पैकेज करती हैं. फ़ंक्शन किट स्टैंडर्ड होती हैं Cloud Functions. इसलिए, इन्हें बनाने, अपडेट करने, मिटाने, और इनसे जुड़ी समस्याओं को हल करने के लिए, आपको अपने Firebase प्रोजेक्ट में Firebase सीएलआई का इस्तेमाल करना होगा. इस गाइड में, फ़ंक्शन को मैनेज करने और अपडेट उपलब्ध होने पर उन्हें अपनाने के बारे में बताया गया है.

इस पूरी गाइड में, Stream Cloud Firestore से BigQuery एक्सटेंशन (firestore-bigquery-export) का इस्तेमाल एक उदाहरण के तौर पर किया गया है. इससे आपको माइग्रेशन के हर चरण के लिए कमांड और कमांड आउटपुट के बारे में पता चलता है.

माइग्रेशन का तरीका तय करना

Firebase सभी Firebase Extensions पब्लिशर को यह सुझाव देता है कि वे अपने एक्सटेंशन के लिए, npm पर पब्लिश की गई फ़ंक्शन किट के तौर पर विकल्प बनाएं. यह देखने के लिए कि आपके एक्सटेंशन के लिए फ़ंक्शन किट बदलने की सुविधा उपलब्ध है या नहीं, इन तरीकों का इस्तेमाल करें:

  • अपने प्रोजेक्ट के लिए, Firebase कंसोल के एक्सटेंशन पेज पर जाएं. आपने जो भी एक्सटेंशन इंस्टॉल किए हैं उनमें से हर एक के लिए, यह जानकारी दी जाती है कि उसके लिए फ़ंक्शन किट का विकल्प उपलब्ध है या नहीं.
  • टर्मिनल में अपनी Firebase प्रोजेक्ट के अंदर firebase ext:list चलाएं. इससे आपको पता चलेगा कि इंस्टॉल किए गए किन एक्सटेंशन के आधिकारिक विकल्प उपलब्ध हैं:

    firebase ext:list --project my-project
    
    i  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 रिपॉज़िटरी और KMS कुंजियों के लिए, मैन्युअल तरीके से समाधान करना ज़रूरी है Cloud Functions for Firebase कस्टम Docker रिपॉज़िटरी या ग्राहक के मैनेज किए गए एन्क्रिप्शन कुंजी (केएमएस कुंजी) को कॉन्फ़िगर करने के लिए, सिस्टम के पैरामीटर बदलने की सुविधा के साथ काम नहीं करता. अगर आपका एक्सटेंशन इनमें से किसी भी पैरामीटर को कॉन्फ़िगर करता है, तो अक्सर पूछे जाने वाले सवालों में दिए गए समाधान देखें.

शुरू करने से पहले

आपको Firebase सीएलआई सेट अप करना होगा. साथ ही, Firebase प्रोजेक्ट शुरू करना होगा. सीएलआई का इस्तेमाल करते समय, पक्का करें कि firebase-tools वर्शन >= 15.32.0 का इस्तेमाल किया जा रहा हो. इसमें माइग्रेशन और फ़ंक्शन किट के नए कमांड शामिल हैं.

खाते के लिए ज़रूरी अनुमतियां और भूमिकाएं

माइग्रेशन के दौरान, Firebase CLI को क्या बनाना और कॉन्फ़िगर करना है, इसके आधार पर Firebase और Google Cloud से पुष्टि करने के लिए इस्तेमाल किए जा रहे खाते में ये भूमिकाएं होनी चाहिए:

  • roles/firebaseextensions.editor
  • roles/cloudbuild.builds.editor
  • roles/artifactregistry.writer
  • roles/run.developer
  • roles/iam.serviceAccountUser
  • roles/iam.serviceAccountCreator
  • roles/cloudfunctions.admin (अगर आपको सार्वजनिक एंडपॉइंट के लिए setIamPermissions करना है)
  • roles/secretmanager.admin (अगर सीक्रेट का इस्तेमाल किया जा रहा है)
  • roles/serviceusage.serviceUsageAdmin (अगर आपको नए एपीआई चालू करने हैं)

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

कोई सीएलआई वर्कफ़्लो चुनें

एक्सटेंशन इंस्टेंस से npm पर उपलब्ध फ़ंक्शन किट पर माइग्रेट करने के लिए, इनमें से कोई एक विकल्प चुनें:

  • (सुझाया गया) ext:migrate सीएलआई कमांड का इस्तेमाल करके माइग्रेट करें. यह कमांड, एक्सटेंशन को अनइंस्टॉल करने से पहले, फ़ंक्शन किट के बदले जाने वाले एक्सटेंशन को डिप्लॉय करती है.
  • फ़ंक्शन किट के सीएलआई कमांड का इस्तेमाल करके माइग्रेट करें. एक्सटेंशन को अपडेट करने, फ़ंक्शन किट इंस्टॉल करने, उसे एक्सटेंशन की तरह कॉन्फ़िगर करने, किट को डिप्लॉय करने, और एक्सटेंशन को अनइंस्टॉल करने के लिए, अलग-अलग निर्देशों का इस्तेमाल किया जा सकता है. इससे, कमांड का क्रम बदलने या चरणों के बीच अतिरिक्त काम करने में ज़्यादा आसानी होती है.

ext:migrate का इस्तेमाल करके माइग्रेट करना

हर एक्सटेंशन इंस्टेंस के लिए, माइग्रेशन शुरू करने के लिए यह कमांड चलाएं:

firebase ext:migrate --project <project-id>

इस कमांड से आपको इन कामों को करने में मदद मिलती है:

  1. माइग्रेट करने के लिए ऐसा एक्सटेंशन चुना गया है जिसके लिए आधिकारिक फ़ंक्शन किट उपलब्ध है.
  2. उस एक्सटेंशन का कोई इंस्टेंस चुनना.
  3. अगर ज़रूरी हो, तो एक्सटेंशन को नए वर्शन में अपडेट करना.
  4. फ़ंक्शन किट इंस्टॉल करना और एक्सटेंशन इंस्टेंस को कॉन्फ़िगर करने के तरीके से ही इंस्टेंस को कॉन्फ़िगर करना.
  5. फ़ंक्शन किट को डिप्लॉय करना.
  6. पुष्टि करना कि फ़ंक्शन किट को सही तरीके से डिप्लॉय किया गया है और सभी लाइफ़साइकल हुक (अगर कोई हो) चल रहे हैं.
  7. एक्सटेंशन इंस्टेंस को अनइंस्टॉल किया जा रहा है.

अगर आपको किसी एक्सटेंशन या एक्सटेंशन इंस्टेंस को माइग्रेट करना है, तो उसे कमांड-लाइन फ़्लैग का इस्तेमाल करके तय करें:

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 to 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>

अगर आपको पुष्टि करने के दौरान किसी भी समय इस माइग्रेशन को रोकना है या पहले जैसा करना है, तो एक्सटेंशन अनइंस्टॉल करना में दिए गए निर्देशों का इस्तेमाल करके, किट को अनइंस्टॉल किया जा सकता है.

फ़ंक्शन किट के 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 CLI, डिप्लॉयमेंट प्रोसेस की शुरुआत में आपसे उनके बारे में पूछता है. अप-टू-डेट 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 to 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>

अगर आपको पुष्टि करने के दौरान किसी भी समय इस माइग्रेशन को रोकना है या पहले जैसा करना है, तो एक्सटेंशन अनइंस्टॉल करना में दिए गए निर्देशों का इस्तेमाल करके, किट को अनइंस्टॉल किया जा सकता है.

5. एक्सटेंशन को अनइंस्टॉल करना

फ़ंक्शन किट को डिप्लॉय करने के बाद, उसकी पुष्टि करें. इसके बाद, एक्सटेंशन को अनइंस्टॉल करें, ताकि किट और एक्सटेंशन, दोनों के लिए एक ही फ़ंक्शन दो बार न चले. --immediate फ़्लैग पास करके, Firebase CLI से सभी एक्सटेंशन अनइंस्टॉल किए जा सकते हैं. भले ही, आपने उन्हें किसी भी तरीके से इंस्टॉल किया हो:

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 एनवायरमेंट, दोनों में डिप्लॉय किया है, तो हो सकता है कि आपके पास firestore-bigquery-export एक्सटेंशन के दो इंस्टेंस इंस्टॉल हों. ऐसा इसलिए, क्योंकि हर एनवायरमेंट में documents Cloud Firestore इंस्टेंस होता है, जिसे BigQuery में एक्सपोर्ट किया जाता है:

  • export-documents-testing
  • export-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 के लिए कॉन्फ़िगर किए गए इंस्टेंस को फिर से इस्तेमाल करने या दूसरा इंस्टेंस इंस्टॉल करने का विकल्प दिखेगा.