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

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

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

আপনি 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"
}

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

$ (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!

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

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

$  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 দিয়ে শুরু করার সময় আপনি আপনার প্রথম কয়েকটি ফাংশন একটি ফাইলে রাখতে পারেন:

ইনডেক্স.জেএস

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!")

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

নোড.জেএস

foo.js সম্পর্কে

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

বার.জেএস

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

ইনডেক্স.জেএস

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!")

বার.পি

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 : প্রয়োজনীয়, কিন্তু খালি থাকতে পারে

গ্রুপ ফাংশন

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

মেট্রিক্স.জেএস


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

আপনার 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 সম্পর্কে আরও জানতে, দেখুন: