একাধিক ফাংশন সংগঠিত


আপনি যখন আপনার প্রকল্পে ক্লাউড ফাংশনগুলিকে একীভূত করেন, আপনার কোডটি অনেকগুলি স্বাধীন ফাংশন ধারণ করতে প্রসারিত হতে পারে। একটি ফাইলে যুক্তিসঙ্গতভাবে ফিট করার জন্য আপনার কাছে অনেকগুলি ফাংশন থাকতে পারে, বা বিভিন্ন দল বিভিন্ন ফাংশন স্থাপন করতে পারে, একটি দল ওভাররাইট করার বা দুর্ঘটনাক্রমে অন্য দলের ফাংশন মুছে ফেলার ঝুঁকি তৈরি করতে পারে। ক্লাউড ফাংশনগুলি আপনার ফাংশনগুলি নেভিগেট করা এবং বজায় রাখা সহজ করতে আপনার কোড সংগঠিত করার বিভিন্ন উপায় অফার করে৷

কোডবেসে ফাংশন সংগঠিত করুন

আপনি firebase.json এ ফাংশন কনফিগারেশন অবজেক্টের codebase প্রপার্টি ব্যবহার করতে পারেন একটি একক রিপোজিটরি মনোরেপো সেটআপের মধ্যে একাধিক রিপোজিটরি বা সাব-প্যাকেজ জুড়ে ফাংশনের একটি বড় সংগ্রহ পরিচালনা করতে:

# firebase.json
"functions": {
  "codebase": "my-codebase"
  # NOTE: Codebase must be less than 63 characters and can contain only
  # lowercase letters, numeric characters, underscores, and dashes.
}

codebase প্রপার্টি Firebase CLI v10.7.1 এবং তার উপরে সমর্থিত।

একাধিক সংগ্রহস্থল পরিচালনা করা

codebase প্রপার্টি একাধিক রিপোজিটরির ব্যবস্থাপনাকে সহজ করতে সাহায্য করতে পারে। আসুন একটি কেস পরীক্ষা করি যেখানে আপনার দুটি ভিন্ন সংগ্রহস্থল রয়েছে যা একই ফায়ারবেস প্রকল্পে ফাংশন স্থাপন করে:

$  tree .
├── repoA
│   ├── firebase.json
│   └── functions
│       ├── index.js
│       └── package.json
└── repoB
    ├── firebase.json
    └── functions
        ├── index.js
        └── package.json

কোডবেস টীকা ব্যতীত, ফায়ারবেস সিএলআই আপনাকে স্থাপনের সময় অন্যান্য সংগ্রহস্থলে সংজ্ঞায়িত ফাংশনগুলি মুছে ফেলার জন্য অনুরোধ করবে:

$ (cd repoA && firebase deploy --only functions)
...
i  functions: preparing functions directory for uploading...
✔  functions: functions folder uploaded successfully
The following functions are found in your project but do not exist in your local source code:
        fn1FromRepoB
        fn2FromRepoB
        ...
? Would you like to proceed with deletion? Selecting no will continue the rest of the deployments. (y/N)

প্রতিটি প্রকল্পের সংগ্রহস্থলে firebase.json এর ফাংশন কনফিগারেশন বিভাগে একটি অনন্য কোডবেস টীকা যোগ করে আপনি এই সমস্যাটি এড়াতে পারেন:

# repoA/firebase.json
"functions": {
  "codebase": "repo-a"
}

# repoB/firebase.json
"functions": {
  "codebase": "repo-b"
}

কোডবেস টীকা সহ, Firebase CLI আপনাকে আপনার তাত্ক্ষণিক সংগ্রহস্থলের বাইরে সংজ্ঞায়িত ফাংশনগুলি মুছতে আর অনুরোধ করে না:

$ (cd repoA && firebase deploy --only functions)
...
i  functions: preparing functions directory for uploading...
✔  functions: functions folder uploaded successfully
#  Gleefully ignores functions from repoB
i  functions: creating Node.js 16 function fnFromRepoA (us-central1)...
✔  Deploy Complete!

একাধিক উৎস প্যাকেজ পরিচালনা করা (মনোরেপো)

codebase বৈশিষ্ট্য একটি একক সংগ্রহস্থলে একাধিক উত্স প্যাকেজ পরিচালনাকে সহজ করতে সহায়তা করতে পারে। চলুন এমন একটি কেস পরীক্ষা করি যেখানে আপনার কাছে একটি ফায়ারবেস প্রজেক্ট ডিরেক্টরি রয়েছে যেখানে বেশ কয়েকটি সাব-প্যাকেজ জুড়ে ফাংশন সংজ্ঞা রয়েছে:

$  tree .
├── firebase.json
├── teamA
│   ├── index.js
│   └── package.json
└── teamB
    ├── index.js
    └── package.json

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

  • আপনার একটি মনোরেপো সেটআপ আছে এবং বিভিন্ন দল একটি বিচ্ছিন্ন প্যাকেজে তাদের নিজস্ব ফাংশন সংজ্ঞা পরিচালনা করে।
  • আপনার একটি ভারী বাহ্যিক নির্ভরতা এবং একটি দীর্ঘ-চলমান প্রারম্ভিকতা সহ একটি ফাংশন রয়েছে এবং আপনি সেই ফাংশনটিকে অন্যান্য, লেটেন্সি-সংবেদনশীল ফাংশন থেকে আলাদা করতে চান৷

এইরকম মনরেপো সেটআপ সমর্থন করতে, firebase.json এ একাধিক ফাংশন কনফিগারেশন সংজ্ঞায়িত করুন:

"functions": [
  {
    "source": "teamA",
    "codebase": "team-a"
  },
  {
    "source": "teamB",
    "codebase": "team-b"
  },
]

এই কনফিগারেশনের সাথে, Firebase CLI সমস্ত প্যাকেজ থেকে একটি একক ডিপ্লোয় কমান্ডে ফাংশন স্থাপন করে:

$ firebase deploy --only functions
i  deploying functions
i  functions: preparing codebase team-a for deployment
i  functions: preparing codebase team-b for deployment
i  functions: creating Node.js 16 function team-a:helloATeam(us-central1)...
i  functions: creating Node.js 16 function team-b:helloBTeam(us-central1)...
...

আপনি একটি নির্দিষ্ট কোডবেস স্থাপন করতে পারেন:

$ firebase deploy --only functions:team-b
i  deploying functions
i  functions: preparing codebase team-b for deployment
i  functions: updating Node.js 16 function team-b:helloBTeam(us-central1)...
...

একাধিক ফাইলে ফাংশন লিখুন

ক্লাউড ফাংশনগুলির সাথে শুরু করার সময় আপনি আপনার প্রথম কয়েকটি ফাংশন একটি ফাইলে রাখতে পারেন:

index.js

const functions = require('firebase-functions');
exports.foo = functions.https.onRequest((request, response) => {
  // ...
});
exports.bar = functions.https.onRequest((request, response) => {
  // ...
});

main.py

from firebase_functions import https_fn

@https_fn.on_request()
def foo(req: https_fn.Request) -> https_fn.Response:
    return https_fn.Response("Hello foo!")

@https_fn.on_request()
def bar(req: https_fn.Request) -> https_fn.Response:
    return https_fn.Response("Hello bar!")

এটি কয়েকটি ফাংশনের সাথে পরিচালনা করা কঠিন হয়ে উঠতে পারে। পরিবর্তে, আপনি প্রতিটি ফাংশনের জন্য আপনার সমস্ত যুক্তি তার নিজস্ব ফাইলে রাখতে পারেন এবং রপ্তানির তালিকা হিসাবে আপনার উত্স ফাইলটি ব্যবহার করতে পারেন:

Node.js

foo.js

const functions = require('firebase-functions');
exports.foo = functions.https.onRequest((request, response) => {
  // ...
});

bar.js

const functions = require('firebase-functions');
exports.bar = functions.https.onRequest((request, response) => {
  // ...
});

index.js

const foo = require('./foo');
const bar = require('./bar');
exports.foo = foo.foo;
exports.bar = bar.bar;

পাইথন

foo.py

from firebase_functions import https_fn

@https_fn.on_request()
def foo(req: https_fn.Request) -> https_fn.Response:
    return https_fn.Response("Hello foo!")

bar.py

from firebase_functions import https_fn

@https_fn.on_request()
def bar(req: https_fn.Request) -> https_fn.Response:
    return https_fn.Response("Hello foo!")

main.py

from fn_impl.foo import *
from fn_impl.bar import *

এই সেটআপটি নিম্নলিখিতগুলির মতো একটি প্রকল্প ডিরেক্টরি কাঠামো অনুমান করে:

my-project
├── firebase.json
└── functions
    ├── fn_impl
    │   ├── __init__.py
    │   ├── foo.py
    │   └── bar.py
    ├── main.py
    └── requirements.txt

fn_impl : যেকোনো নাম থাকতে পারে

__init__.py : প্রয়োজনীয়, কিন্তু খালি হতে পারে

গ্রুপ ফাংশন

অনেক প্রকল্পে, ফাংশনগুলিকে যৌক্তিক গোষ্ঠীতে বিভক্ত করা যেতে পারে যেগুলি একসাথে স্থাপন এবং রক্ষণাবেক্ষণ করা উচিত। উদাহরণস্বরূপ, আপনার মেট্রিক্স রিপোর্ট করার জন্য ব্যবহৃত ফাংশনগুলির একটি গ্রুপ থাকতে পারে:

metrics.js


const functions = require('firebase-functions');
exports.usageStats = functions.https.onRequest((request, response) => {
  // ...
});
exports.nightlyReport = functions.https.onRequest((request, response) => {
  // ...
});

আপনার index.js ফাইলে রপ্তানি করার সময় আপনি এই ফাংশনগুলিকে একটি গ্রুপে রাখতে পারেন:

index.js


// Export both functions from metrics.js in the "metrics" group:
//  - metrics-usageStats
//  - metrics-nightlyReport
exports.metrics = require('./metrics');

মোতায়েন করা হলে, ফাংশনগুলি তাদের গোষ্ঠীর নামের সাথে প্রিফিক্স করা হবে, তাই এই উদাহরণে ফাংশনগুলির নাম দেওয়া হবে metrics-usageStats এবং metrics-nightlyReport

ফাংশন স্থাপন করার সময় আপনি একটি একক গ্রুপে ক্রিয়া সীমাবদ্ধ করতে পারেন:


firebase deploy --only functions:metrics

পরবর্তী পদক্ষেপ

ক্লাউড ফাংশন সম্পর্কে আরও জানতে, দেখুন: