মাইগ্রেশন পরবর্তী সর্বোত্তম অনুশীলন

আপনি Firebase Extensions থেকে ফাংশন কিটে মাইগ্রেট করার পর, আপনার Firebase প্রোজেক্টে কিট ইনস্ট্যান্সগুলোকে সাধারণ ২য় প্রজন্মের Cloud Functions মতোই পরিচালনা করতে পারবেন। এই নির্দেশিকায় আলোচনা করা হয়েছে কীভাবে বিদ্যমান কোনো এক্সটেনশন মাইগ্রেট না করেই সরাসরি npm থেকে নতুন ফাংশন কিট ইনস্টল করতে হয়, কিটের প্যারামিটার ও গ্লোবাল অপশন আপডেট করতে হয়, পাবলিশাররা আপডেট প্রকাশ করলে npm প্যাকেজের ভার্সন আপগ্রেড করতে হয় এবং প্রয়োজনে মাইগ্রেশনটি রোল ব্যাক করতে হয়।

মাইগ্রেট না করে এনপিএম প্যাকেজ থেকে ফাংশন কিট ব্যবহার করা

আপনি যদি কোনো এক্সটেনশন থেকে মাইগ্রেট না করেন, তাহলে ফাংশন কিট ব্যবহারের দুটি অংশ থাকে:

কিটটি ইনস্টল করা হচ্ছে

আপনি নিম্নলিখিত CLI কমান্ড ব্যবহার করে একটি ফাংশন কিট ইনস্টল করতে পারেন:

firebase functions:kits:install --package <npm-package-name>

সমাধান করা উদাহরণ:

firebase functions:kits:install --package @firebase-function-kits/firestore-bigquery-export --project my-project
✔ What would you like to name this kit? firestore-bigquery-export
✔ What would you like to name this instance? firestore-bigquery-export
i  function-kits/firestore-bigquery-export/source/package.json is unchanged
i  function-kits/firestore-bigquery-export/source/tsconfig.json is unchanged
i  function-kits/firestore-bigquery-export/source/.gitignore is unchanged
i  functions: Running npm install @firebase-function-kits/firestore-bigquery-export@next --save-prefix=^...
i  functions: Building TypeScript source...
✔  Wrote configuration info to firebase.json

i  functions: Loaded environment variables from function-kits/firestore-bigquery-export/config-firestore-bigquery-export/.env.my-project
Prompting for parameters for codebase firestore-bigquery-export:
✔ Enter a string value for FUNCTION_DEFAULT_REGION:
(Global default region where functions should be deployed. Can be overridden per-function.) us-east1

✔ Enter a string value for BigQuery Project ID:
(Override the default project for BigQuery instance. This can allow updates to be directed to a BigQuery
instance on another GCP project.) my-bigquery-project

✔ Enter a string value for Firestore Instance ID:
(The Firestore database to use. Use "(default)" for the default database. You can view your available
Firestore databases at https://console.cloud.google.com/firestore/databases.) eu-testing

# Omitting many more parameters for brevity

✔  Wrote configuration info to firebase.json
✔  functions: Function kit firestore-bigquery-export successfully installed.

i  functions: At the first deploy, the following functions will be created in your project:
- kit-firestore-bigquery-export-fsexportbigquery
- kit-firestore-bigquery-export-initBigQuerySync
- kit-firestore-bigquery-export-setupBigQuerySync
i  functions: At the first deploy, the following Task Queues will be created in your project:
- kit-firestore-bigquery-export-initBigQuerySync
- kit-firestore-bigquery-export-setupBigQuerySync
i  functions: At the first deploy, the following APIs will be enabled in your project:
- bigquery.googleapis.com
- cloudtasks.googleapis.com
i  functions: At the first deploy, the following roles will be granted to the kit service account:
- BigQuery Data Editor
- BigQuery User
- Cloud Datastore User
- Eventarc Event Receiver
- roles/run.invoker
⚠  functions: Please review the changes above. If you do not want them applied to your project, uninstall this kit before running firebase deploy.

ডিফল্ট গ্লোবাল অপশন পরিবর্তন করা

আপনার কিট ইনস্ট্যান্সের জন্য গ্লোবাল অপশনগুলো কনফিগার করতে, function-kits/<your-kit-id>/source/src/index.ts -এ অবস্থিত index.ts ফাইলটি পরিবর্তন করুন।

আপনি যদি চান যে কিটের সমস্ত ইনস্ট্যান্স জুড়ে ডিফল্ট মানগুলো একই থাকুক, তাহলে সেগুলো সরাসরি index.ts এ সেট করুন। অন্যথায়, index.ts এ নথিভুক্ত উদাহরণ এবং নির্দেশাবলী অনুসরণ করে প্রতিটি ইনস্ট্যান্সের জন্য আলাদা প্যারামিটার তৈরি করুন।

কিটটি স্থাপন করা

আপনার ফাংশন কিট স্থাপন করতে, চালান:

firebase deploy --only functions:<kit-instance-id>

সমাধান করা উদাহরণ:

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!

কিটটি ইনস্টল এবং স্থাপন করলে নিম্নলিখিত কাজগুলো সম্পন্ন হয়:

  • function-kits/firestore-bigquery-export/source তৈরি করে, যার মধ্যে কিট সোর্স কোড থাকে। এতে একটি সাধারণ index.ts ফাইলও অন্তর্ভুক্ত, যা কিট প্যাকেজটি ইম্পোর্ট ও এক্সপোর্ট করার পাশাপাশি এমন একটি প্যারামিটার সেট করে, যা আপনাকে কিটের প্রতিটি ইনস্ট্যান্সের জন্য আলাদা লোকেশন বেছে নিতে দেয়।
  • function-kits/firestore-bigquery-export/config-firestore-bigquery-export/.env.<project-id> তৈরি করে এবং ফাংশনের জন্য প্রবেশ করানো কনফিগারেশন ডেটা দিয়ে তা পূরণ করে। ভবিষ্যতের আপডেটে নতুন প্যারামিটার যোগ করা হলে, পরবর্তী ডেপ্লয়মেন্টের সময় আপনাকে জানানো হবে।
  • এই কিটটি চালানোর জন্য প্রয়োজনীয় Google Cloud রিসোর্স তৈরি করে, যার মধ্যে নির্দিষ্ট IAM রোল, ফাংশন, ইভেন্টআর্ক ট্রিগার এবং ক্লাউড টাস্ক কিউ সহ একটি সার্ভিস অ্যাকাউন্ট অন্তর্ভুক্ত।

যদি আপনার একই প্রোজেক্টে কিটটির একাধিক ইনস্ট্যান্স থাকে, তাহলে আপনি একই কিটের নতুন ইনস্ট্যান্স তৈরি ও ডেপ্লয় করতে এই কমান্ডগুলো পুনরাবৃত্তি করতে পারেন। এছাড়াও আপনি একটিমাত্র কিট ইনস্ট্যান্সকে ভিন্ন ভিন্ন কনফিগারেশনের একাধিক Firebase প্রোজেক্টে (যেমন, একটি স্টেজিং প্রোজেক্ট এবং একটি প্রোডাকশন প্রোজেক্ট) ডেপ্লয় করতে পারেন। অ্যাডভান্সড সেটআপ সম্পর্কে আরও জানতে, অ্যাডভান্সড মাইগ্রেশন দেখুন।

একটি কিট আনইনস্টল করা

কিট এবং এর সমস্ত ইনস্ট্যান্স মুছে ফেলতে, চালান:

firebase functions:kits:uninstall --kit <kit-id>

এটি সমস্ত ইনস্ট্যান্স ও তাদের কনফিগারেশন মুছে দেয় এবং ডিস্ক থেকে কিট সোর্সটি সরিয়ে ফেলে।

কিটটির শুধুমাত্র একটি ইনস্ট্যান্স অপসারণ করতে, চালান:

firebase functions:kits:uninstall --instance <kit-instance-id>

আপনার কাছে যদি কিটটির কেবল একটিই ইনস্ট্যান্স থাকে, তবে এটি সম্পূর্ণ কিটটি আনইনস্টল করে দেবে।

কিট কনফিগারেশন আপডেট করা

ইনস্টলেশন বা আপনার প্রথম ডেপ্লয়মেন্টের সময়, আপনাকে আপনার কিটের জন্য সমস্ত প্যারামিটার কনফিগার করতে বলা হয় (যদি না আপনি কোনো এক্সটেনশন থেকে কনফিগারেশন মাইগ্রেট করে থাকেন)। এই প্যারামিটারগুলো আপনার কিট ইনস্ট্যান্স কনফিগারেশন ডিরেক্টরিতে থাকা .env ফাইলে সংরক্ষিত থাকে। উদাহরণস্বরূপ, যদি আপনার my-project firestore-bigquery-export নামের একটি কিট ইনস্ট্যান্স থাকে, তাহলে .env ফাইলটি function-kits/firestore-bigquery-export/config-firestore-bigquery-export/.env.my-project অবস্থিত।

এটি দেখতে নিম্নরূপ:

DATASET_LOCATION=us
BIGQUERY_PROJECT_ID=my-project
DATABASE=eu-testing
DATABASE_REGION=eur3
COLLECTION_PATH=posts
WILDCARD_IDS=false
DATASET_ID=firestore_export
TABLE_ID=posts
TABLE_PARTITIONING=NONE
TIME_PARTITIONING_FIELD=
TIME_PARTITIONING_FIRESTORE_FIELD=
TIME_PARTITIONING_FIELD_TYPE=omit
CLUSTERING=
MAX_DISPATCHES_PER_SECOND=100
VIEW_TYPE=view
MAX_STALENESS=
REFRESH_INTERVAL_MINUTES=
BACKUP_COLLECTION=
TRANSFORM_FUNCTION=
USE_NEW_SNAPSHOT_QUERY_SYNTAX=no
EXCLUDE_OLD_DATA=no
KMS_KEY_NAME=
MAX_ENQUEUE_ATTEMPTS=3
LOG_LEVEL=info
FUNCTION_DEFAULT_REGION=us-west1

আপনি যে কনফিগারেশন ভ্যালুটি পরিবর্তন করতে চান তা যদি আপনার জানা থাকে, তবে আপনি সরাসরি .env ফাইলে সেটি এডিট করতে পারেন। আপনি যদি ইনস্টলেশন এবং ডিপ্লয়মেন্টের সময় চালু হওয়া ইন্টারেক্টিভ প্রম্পটটি ব্যবহার করতে পছন্দ করেন, তবে .env ফাইল থেকে যে প্যারামিটারগুলো পরিবর্তন করতে চান সেগুলো সরিয়ে দিন এবং কিট ইনস্ট্যান্সটি পুনরায় ডিপ্লয় করুন। ডিপ্লয়মেন্টের সময় আপনাকে সেই প্যারামিটারগুলো প্রবেশ করানোর জন্য অনুরোধ করা হবে।

উদাহরণস্বরূপ, আপনি যদি COLLECTION_PATH=posts লাইনটি মুছে দেন এবং ডিপ্লয় করেন, তাহলে ডিপ্লয়মেন্টের সময় আপনাকে এটির জন্য অনুরোধ করা হবে:

i functions: Loaded environment variables from function-kits/firestore-bigquery-export/config-firestore-bigquery-export-d9cd/.env.ajp-testing
Prompting for parameters for codebase firestore-bigquery-export:

Collection path: What is the path of the collection that you would like to export? You may use {wildcard} notation to match a subcollection of all documents in a collection (for example: chatrooms/{chatid}/posts). Parent Firestore Document IDs from {wildcards} can be returned in path_params as a JSON formatted string.
? Enter a string value for Collection path: (posts)

একটি ফাংশন কিট রক্ষণাবেক্ষণ এবং আপগ্রেড করা

বাগ সংশোধন, নতুন ফিচার যোগ, ডিপেন্ডেন্সি আপডেট বা নিরাপত্তা দুর্বলতা মোকাবেলার জন্য পাবলিশাররা সময়ের সাথে সাথে তাদের npm প্যাকেজগুলো আপডেট করতে পারেন। আমরা এই রিলিজগুলো সম্পর্কে অবগত থাকার এবং আপডেটগুলো ইনস্টল করার পরামর্শ দিই—বিশেষ করে যেগুলো নিরাপত্তা দুর্বলতা মোকাবেলা করে।

` functions:kits:install কমান্ডটি এমন একটি কোডবেস তৈরি করে যা একটি কিটকে এনপিএম প্যাকেজ হিসেবে ইনস্টল করে এবং আপনার কিটের প্রতিটি ইনস্ট্যান্সের জন্য এর সমস্ত ফাংশন এক্সপোর্ট করে। একটি কিট আপগ্রেড করতে, প্যাকেজের ভার্সন আপডেট করুন এবং তারপরে পরিবর্তনগুলি প্রয়োগ করার জন্য আপনার কিটের প্রতিটি ইনস্ট্যান্স পুনরায় ডিপ্লয় করুন।

একটি কিটে আপডেট আছে কিনা তা নির্ধারণ করা

function-kits/<your-kit-id>/source এ আপনার কিটের source ডিরেক্টরিতে যান। এই source ডিরেক্টরি থেকে, আপনার ফাংশন কিট এবং Cloud Functions এসডিকে সহ সমস্ত পুরোনো এনপিএম প্যাকেজের একটি রিপোর্ট পেতে নিম্নলিখিত কমান্ডটি চালান:

npm outdated

আপনি যদি ইতিমধ্যেই আপডেট করার প্রয়োজন এমন ডিপেন্ডেন্সি শনাক্ত করার জন্য গিটহাবের ডিপেন্ডাবটের মতো কোনো টুল ব্যবহার করে থাকেন, তাহলে আমরা আপনার কিট ডিরেক্টরিটিকে সেই ওয়ার্কফ্লোতে একীভূত করার পরামর্শ দিই।

একটি কিট আপডেট করা

কিট এবং এর নির্ভরতাগুলিকে সর্বশেষ নন-ব্রেকিং সংস্করণে (প্রধান সংস্করণ আপডেটগুলি ব্যতীত, যেগুলিতে ব্রেকিং পরিবর্তন থাকতে পারে) আপডেট করতে, চালান:

npm update --save

আপনি যদি শুধু ফাংশন কিট প্যাকেজটি আপডেট করতে চান এবং অন্য কোনো প্যাকেজ নয়, তাহলে npm update এ প্যাকেজের নামটি পাস করুন:

npm update <package-name> --save

একটি প্যাকেজকে সর্বশেষ প্রধান সংস্করণে আপগ্রেড করতে (যা ব্রেকিং পরিবর্তন আনতে পারে), চালান:

npm update --save <npm-package-name>@latest

প্যাকেজের ডকুমেন্টেশন এবং রিলিজ নোট পর্যালোচনা করে দেখুন কী কী পরিবর্তন হয়েছে এবং বড় ধরনের পরিবর্তন (breaking changes) এড়ানোর জন্য ডেপ্লয়মেন্টের আগে বা পরে আপনার কোনো অতিরিক্ত পদক্ষেপ নেওয়ার প্রয়োজন আছে কিনা।

আপডেট করা ইনস্ট্যান্স স্থাপন করা হচ্ছে

npm update চালালে শুধুমাত্র আপনার লোকাল সোর্স কোড আপডেট হয়। ক্লাউডে আপনার চলমান ফাংশনগুলো আপডেট করতে, সেগুলোকে রিডিপ্লয় করুন। আপনি আপনার প্রোজেক্টের সমস্ত ফাংশন, সমস্ত ফাংশন কিট সহ, নিম্নলিখিত কমান্ডটি চালিয়ে রিডিপ্লয় করতে পারেন:

firebase deploy --only functions

মাইগ্রেশন বাতিল করা

মাইগ্রেশন বাতিল করতে, প্রথমে এক্সটেনশনটি পুনরায় ইনস্টল করুন। ইনস্টলেশনের সময় প্রয়োজনীয় কনফিগারেশন মানগুলি খুঁজে পেতে আপনি কিটটির .env ফাইল ব্যবহার করতে পারেন।

এক্সটেনশনটি স্থাপন করার পরে, কিট ইনস্ট্যান্সটি আনইনস্টল করুন (যদি এটিই সর্বশেষ অবশিষ্ট ইনস্ট্যান্স হয়, তবে এটি সম্পূর্ণ কিটটি আনইনস্টল করে দেবে):

firebase functions:kits:uninstall --instance <kit-instance-id> --project <project-id>

ভবিষ্যৎ মাইগ্রেশনের জন্য এক্সটেনশন কনফিগারেশন সংরক্ষণ করা হচ্ছে

২০২৭ সালের ৩১শে মার্চের পর, আপনি বিদ্যমান এক্সটেনশন কনফিগারেশনটি আর আনতে পারবেন না। যদি আপনি ২০২৭ সালের ৩১শে মার্চের আগে মাইগ্রেট করতে না পারেন, তবে আমরা আপনার এক্সটেনশনটি সংরক্ষণ করার জন্য দৃঢ়ভাবে সুপারিশ করছি, যাতে এই তারিখের পরে আপনি মাইগ্রেট করার সিদ্ধান্ত নিলে তা কাজে লাগে।

  1. আপনার এক্সটেনশন ইনস্ট্যান্স আইডিগুলোর একটি তালিকা নিন:

    আপনার Firebase প্রোজেক্টে থাকা সমস্ত এক্সটেনশন ইনস্ট্যান্সের তালিকা পেতে আপনি ext:list CLI কমান্ডটি ব্যবহার করতে পারেন:

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

    সমাধান করা উদাহরণ:

    firebase ext:list --project my-project
    
    » firebaselocal ext:list
    i  extensions: ensuring required API firebaseextensions.googleapis.com is enabled...
    i  extensions: list of extensions installed in ajp-testing:
    ┌────────────────────────────────────┬───────────┬────────────────────────────────┬────────┬─────────┬─────────────────────┬───────────────────────────────────────────────────┐
    │ Extension                          │ Publisher │ Instance ID                    │ State  │ Version │ Your last update    │ Replacement Kit                                   │
    ├────────────────────────────────────┼───────────┼────────────────────────────────┼────────┼─────────┼─────────────────────┼───────────────────────────────────────────────────┤
    │ firebase/firestore-bigquery-export │ firebase  │ firestore-bigquery-export-zbrp │ ACTIVE │ 0.3.3   │ 2026-09-06 22:31:04 │ @firebase-function-kits/firestore-bigquery-export │
    ├────────────────────────────────────┼───────────┼────────────────────────────────┼────────┼─────────┼─────────────────────┼───────────────────────────────────────────────────┤
    │ firebase/firestore-bigquery-export │ firebase  │ firestore-bigquery-export      │ ACTIVE │ 0.3.2   │ 2026-06-03 17:41:24 │ @firebase-function-kits/firestore-bigquery-export │
    └────────────────────────────────────┴───────────┴────────────────────────────────┴────────┴─────────┴─────────────────────┴───────────────────────────────────────────────────┘
    ⚠ Notice: Firebase Extensions will shut down on March 31, 2027. Learn more: https://firebase.google.com/docs/extensions/faq-and-troubleshooting
    

    ext:list কমান্ডটির একটি JSON আউটপুট ফরম্যাটও রয়েছে, এবং যদি আপনার jq ইউটিলিটিটি ইনস্টল করা থাকে, তবে আপনি এটি ব্যবহার করে একটি প্রোজেক্টের সমস্ত ইনস্ট্যান্স আইডির একটি তালিকা পেতে পারেন:

    firebase ext:list --json --project <project-id> | jq -r '.result[].instanceId'
    

    সমাধান করা উদাহরণ:

    firebase ext:list --json --project my-project | jq -r '.result[].instanceId'
    

    আউটপুট:

    firestore-bigquery-export-zbrp
    firestore-bigquery-export
    
  2. প্রতিটি ইনস্ট্যান্সের জন্য কনফিগারেশন রপ্তানি করুন:

    প্রতিটি ইনস্ট্যান্সের কনফিগারেশন ডিস্কে সংরক্ষণ করতে, নিম্নলিখিত এক্সপোর্ট কমান্ডটি চালান:

    firebase ext:export --mode functions --project <project-id> --instance <your-instance-id>
    

    সমাধান করা উদাহরণ:

    firebase ext:export --mode functions --project my-project --instance firestore-bigquery-export
    

    আউটপুট:

    i  extensions: ensuring required API firebaseextensions.googleapis.com is enabled...
    i  functions: Saving exported extensions config as a Function Kits .env file
    i  functions: Created new local file firestore-bigquery-export/.env.testing to store param values. We suggest explicitly adding or excluding this file from version control.
    i  functions: Loaded environment variables from firestore-bigquery-export/.env.testing
    i  functions: Loaded environment variables from firestore-bigquery-export/.env.testing
    i  functions: Writing new parameter values to disk: firestore-bigquery-export/.env.testing
    

    ডিস্কে, আপনি এই এক্সটেনশন ইনস্ট্যান্সটির একটি এক্সপোর্ট <instance-id>/.env.<project-id> মতো কোনো একটি লোকেশনে খুঁজে পাবেন। এই উদাহরণে, এটি firestore-bigquery-export/.env.my-project এ অবস্থিত।

    আপনি প্রতিটি ইনস্ট্যান্সের জন্য এই প্রক্রিয়াটি একবার পুনরাবৃত্তি করতে পারেন, এবং এটি আপনার এক্সটেনশন ইনস্ট্যান্সের সমস্ত কনফিগারেশন সহ এক সেট .env ফাইল তৈরি করে যা পরবর্তীতে মাইগ্রেশনের অংশ হিসাবে পুনরায় ব্যবহার করা যেতে পারে।

  3. এক্সপোর্ট করা .env ফাইলগুলো আরও ভালো কোনো জায়গায় সরিয়ে নিন:

    আপনার এক্সটেনশনগুলো থেকে এক্সপোর্ট করা .env ফাইলগুলো সরাসরি আপনার Firebase প্রজেক্টে রাখা হয়েছিল, কিন্তু আপনি যদি ফাংশন কিটে মাইগ্রেট না করে থাকেন, তবে দৈনন্দিন ভিত্তিতে এগুলোর প্রয়োজন নেই। ভবিষ্যতে প্রয়োজন না হওয়া পর্যন্ত আপনি এগুলোকে আপনার প্রজেক্ট থেকে অন্য কোনো উপযুক্ত স্টোরেজ লোকেশনে সরিয়ে রাখতে পারেন অথবা মুছে ফেলার সিদ্ধান্ত নিতে পারেন।