আপনার প্রোজেক্টে Cloud Functions ইন্টিগ্রেট করার সময়, আপনার কোড আরও বড় হয়ে যেতে পারে এবং তাতে অনেক স্বতন্ত্র ফাংশন থাকতে পারে। আপনার কাছে একটি ফাইলে যুক্তিসঙ্গতভাবে ফিট করার জন্য অনেক বেশি ফাংশন থাকতে পারে অথবা বিভিন্ন টিম ফাংশনের বিভিন্ন গ্রুপ ডিপ্লয় করতে পারে, যার ফলে একটি টিম অন্য টিমের ফাংশন ওভাররাইট বা ভুলবশত মুছে ফেলার ঝুঁকি তৈরি হতে পারে। Cloud Functions আপনার কোড সাজানোর বিভিন্ন উপায় অফার করে যাতে আপনার ফাংশন নেভিগেট ও ম্যানেজ করা আরও সহজ হয়।
কোডবেসে ফাংশন সাজানো
আপনি 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 প্রপার্টি একাধিক রিপোজিটরি ম্যানেজ করার কাজকে সহজ করতে সাহায্য করতে পারে। আসুন এমন একটি কেস পরীক্ষা করা যাক যেখানে আপনার দুটি ভিন্ন রিপোজিটরি রয়েছে
যা একই Firebase প্রোজেক্টে ফাংশন স্থাপন করে:
$ tree .
├── repoA
│ ├── firebase.json
│ └── functions
│ ├── index.js
│ └── package.json
└── repoB
├── firebase.json
└── functions
├── index.js
└── package.json
কোডবেস অ্যানোটেশন ছাড়া, Firebase CLI আপনাকে ডিপ্লয় করার সময় অন্য রিপোজিটরিতে সংজ্ঞায়িত ফাংশন মুছে ফেলার জন্য প্রম্পট করবে:
$ (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 প্রপার্টি, একটি রিপোজিটরিতে একাধিক সোর্স প্যাকেজ ম্যানেজ করার কাজকে
সহজ করতে সাহায্য করতে পারে। আসুন এমন একটি কেস পরীক্ষা করা যাক যেখানে আপনার কাছে একটি Firebase
প্রজেক্ট ডিরেক্টরি আছে যার ফাংশন সংজ্ঞাগুলি একাধিক সাব-প্যাকেজ জুড়ে ছড়িয়ে আছে:
$ tree .
├── firebase.json
├── teamA
│ ├── index.js
│ └── package.json
└── teamB
├── index.js
└── package.json
এই সেট-আপ নিম্নলিখিত ব্যবহারের ক্ষেত্রে উপযুক্ত:
- আপনার একটি মোনোরেপো সেট-আপ আছে এবং বিভিন্ন টিম একটি আইসোলেটেড প্যাকেজে তাদের নিজস্ব ফাংশন সংজ্ঞা ম্যানেজ করে।
- আপনার কাছে এমন একটি ফাংশন আছে যা এক্সটার্নাল সোর্সের উপর খুব বেশি নির্ভরশীল এবং শুরু হতে অনেক সময় নেয় এবং আপনি সেই ফাংশনটিকে অন্যান্য লেটেন্সি-সেনসিটিভ ফাংশন থেকে আলাদা করতে চান।
এই ধরনের monrepo সেট-আপের জন্য, 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)...
...
একাধিক ফাইলে ফাংশন লিখুন
Cloud Functions ব্যবহার শুরু করার সময়, আপনি হয়ত প্রথম কয়েকটি ফাংশন একটি ফাইলে রাখতে পারেন:
index.js
const functions = require('firebase-functions/v1');
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/v1'); exports.foo = functions.https.onRequest((request, response) => { // ... });
bar.js
const functions = require('firebase-functions/v1'); 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;
Python
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/v1'); 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
পরবর্তী ধাপ
Cloud Functions সম্পর্কে আরও জানতে, দেখুন: