ফাংশন পরিচালনা করুন


আপনি Firebase CLI কমান্ডগুলি ব্যবহার করে বা আপনার ফাংশন সোর্স কোডে রানটাইম বিকল্পগুলি সেট করে ফাংশন স্থাপন, মুছতে এবং সংশোধন করতে পারেন।

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

firebase deploy --only functions

ডিফল্টরূপে, Firebase CLI একই সময়ে আপনার উত্সের ভিতরে সমস্ত ফাংশন স্থাপন করে। যদি আপনার প্রজেক্টে 5টির বেশি ফাংশন থাকে, আমরা সুপারিশ করি যে আপনি শুধুমাত্র আপনার সম্পাদনা করা ফাংশনগুলি স্থাপন করতে নির্দিষ্ট ফাংশনের নামের সাথে --only পতাকা ব্যবহার করুন৷ এইভাবে নির্দিষ্ট ফাংশন স্থাপন করা স্থাপনার প্রক্রিয়াকে গতিশীল করে এবং আপনাকে স্থাপনার কোটা এড়াতে সহায়তা করে। যেমন:

firebase deploy --only functions:addMessage,functions:makeUppercase

প্রচুর সংখ্যক ফাংশন স্থাপন করার সময়, আপনি আদর্শ কোটা অতিক্রম করতে পারেন এবং HTTP 429 বা 500 ত্রুটি বার্তা পেতে পারেন। এটি সমাধান করতে, 10 বা তার কম গোষ্ঠীতে ফাংশন স্থাপন করুন।

উপলব্ধ কমান্ডের সম্পূর্ণ তালিকার জন্য Firebase CLI রেফারেন্স দেখুন।

ডিফল্টরূপে, Firebase CLI সোর্স কোডের functions/ ফোল্ডারে দেখায়। আপনি যদি পছন্দ করেন, আপনি কোডবেস বা ফাইলের একাধিক সেটে ফাংশন সংগঠিত করতে পারেন।

ফাংশন মুছুন

আপনি এই উপায়ে পূর্বে স্থাপন করা ফাংশন মুছে ফেলতে পারেন:

  • Firebase CLI-তে functions:delete সহ স্পষ্টভাবে
  • স্পষ্টভাবে Google Cloud কনসোলে
  • নিহিতভাবে স্থাপনার পূর্বে উৎস থেকে ফাংশন অপসারণ করে।

সমস্ত মুছে ফেলার ক্রিয়াকলাপ আপনাকে উত্পাদন থেকে ফাংশন অপসারণের আগে নিশ্চিত করতে অনুরোধ করে।

Firebase CLI-তে স্পষ্ট ফাংশন মুছে ফেলা একাধিক আর্গুমেন্টের পাশাপাশি ফাংশন গোষ্ঠীকে সমর্থন করে এবং আপনাকে একটি নির্দিষ্ট অঞ্চলে চলমান একটি ফাংশন নির্দিষ্ট করতে দেয়। এছাড়াও, আপনি নিশ্চিতকরণ প্রম্পট ওভাররাইড করতে পারেন।

# Delete all functions that match the specified name in all regions.
firebase functions:delete myFunction
# Delete a specified function running in a specific region.
firebase functions:delete myFunction --region us-east-1
# Delete more than one function
firebase functions:delete myFunction myOtherFunction
# Delete a specified functions group.
firebase functions:delete groupA
# Bypass the confirmation prompt.
firebase functions:delete myFunction --force

অন্তর্নিহিত ফাংশন মুছে ফেলার সাথে, firebase deploy আপনার সোর্স পার্স করে এবং ফাইল থেকে মুছে ফেলা যে কোনো ফাংশন প্রোডাকশন থেকে সরিয়ে দেয়।

একটি ফাংশনের নাম, অঞ্চল বা ট্রিগার পরিবর্তন করুন

আপনি যদি অঞ্চলগুলির পুনঃনামকরণ বা পরিবর্তন করেন বা উত্পাদন ট্র্যাফিক পরিচালনা করে এমন ফাংশনগুলির জন্য ট্রিগার করেন তবে পরিবর্তনের সময় ইভেন্টগুলি হারানো এড়াতে এই বিভাগে পদক্ষেপগুলি অনুসরণ করুন৷ আপনি এই পদক্ষেপগুলি অনুসরণ করার আগে, প্রথমে নিশ্চিত করুন যে আপনার ফাংশন idempotent , যেহেতু পরিবর্তনের সময় আপনার ফাংশনের নতুন সংস্করণ এবং পুরানো সংস্করণ উভয়ই একই সময়ে চলবে৷

একটি ফাংশন পুনঃনামকরণ করুন

একটি ফাংশন পুনঃনামকরণ করতে, আপনার উত্সে ফাংশনের একটি নতুন নামকরণকৃত সংস্করণ তৈরি করুন এবং তারপরে দুটি পৃথক স্থাপনার কমান্ড চালান। প্রথম কমান্ডটি নতুন নামযুক্ত ফাংশন স্থাপন করে এবং দ্বিতীয় কমান্ডটি পূর্বে স্থাপন করা সংস্করণটিকে সরিয়ে দেয়। উদাহরণস্বরূপ, যদি আপনার কাছে একটি HTTP-ট্রিগার করা ওয়েবহুক থাকে যার নাম আপনি পুনঃনামকরণ করতে চান, তাহলে কোডটি নিম্নরূপ সংশোধন করুন:

Node.js পাইথন
// before
const {onRequest}  = require('firebase-functions/v2/https');

exports.webhook = onRequest((req, res) => {
    res.send("Hello");
});

// after
const {onRequest}  = require('firebase-functions/v2/https');

exports.webhookNew = onRequest((req, res) => {
    res.send("Hello");
});
# before
from firebase_functions import https_fn

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

# after
from firebase_functions import https_fn

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

তারপরে নতুন ফাংশন স্থাপন করতে নিম্নলিখিত কমান্ডগুলি চালান:

# Deploy new function
firebase deploy --only functions:webhookNew

# Wait until deployment is done; now both functions are running

# Delete webhook
firebase functions:delete webhook

একটি ফাংশনের অঞ্চল বা অঞ্চল পরিবর্তন করুন

আপনি যদি এমন একটি ফাংশনের জন্য নির্দিষ্ট অঞ্চলগুলি পরিবর্তন করেন যা উত্পাদন ট্র্যাফিক পরিচালনা করে, আপনি এই পদক্ষেপগুলি ক্রমানুসারে সম্পাদন করে ইভেন্ট ক্ষতি রোধ করতে পারেন:

  1. ফাংশন পুনঃনামকরণ করুন, এবং পছন্দ অনুযায়ী এর অঞ্চল বা অঞ্চল পরিবর্তন করুন।
  2. পুনঃনামকৃত ফাংশন স্থাপন করুন, যার ফলে অঞ্চলের উভয় সেটে সাময়িকভাবে একই কোড চালানো হয়।
  3. আগের ফাংশন মুছুন।

উদাহরণস্বরূপ, যদি আপনার কাছে একটি Cloud Firestore -triggered ফাংশন থাকে যা বর্তমানে us-central1 এর ডিফল্ট ফাংশন অঞ্চলে রয়েছে এবং আপনি এটিকে asia-northeast1 এ স্থানান্তর করতে চান, আপনাকে প্রথমে ফাংশনের নাম পরিবর্তন করতে এবং অঞ্চলটি সংশোধন করতে আপনার সোর্স কোড পরিবর্তন করতে হবে৷

Node.js পাইথন
// before
exports.firestoreTrigger = onDocumentCreated(
  "my-collection/{docId}",
  (event) => {},
);

// after
exports.firestoreTriggerAsia = onDocumentCreated(
  {
    document: "my-collection/{docId}",
    region: "asia-northeast1",
  },
  (event) => {},
);

আপডেট করা কোডটি অঞ্চলের সাথে সঠিক ইভেন্ট ফিল্টার (এই ক্ষেত্রে document ) উল্লেখ করা উচিত। আরও তথ্যের জন্য ক্লাউড ফাংশন অবস্থানগুলি দেখুন৷

# Before
@firestore_fn.on_document_created("my-collection/{docId}")
def firestore_trigger(event):
    pass

# After
@firestore_fn.on_document_created("my-collection/{docId}",
                                  region="asia-northeast1")
def firestore_trigger_asia(event):
    pass

তারপর চালানোর মাধ্যমে স্থাপন করুন:

firebase deploy --only functions:firestoreTriggerAsia

এখন দুটি অভিন্ন ফাংশন চলছে: firestoreTrigger us-central1 এ চলছে এবং firestoreTriggerAsia asia-northeast1 এ চলছে।

তারপর, firestoreTrigger মুছুন:

firebase functions:delete firestoreTrigger

এখন শুধুমাত্র একটি ফাংশন আছে - firestoreTriggerAsia , যা asia-northeast1 এ চলছে।

একটি ফাংশনের ট্রিগার প্রকার পরিবর্তন করুন

আপনি সময়ের সাথে সাথে Cloud Functions for Firebase বিকাশ করার সাথে সাথে আপনাকে বিভিন্ন কারণে একটি ফাংশনের ট্রিগার প্রকার পরিবর্তন করতে হতে পারে। উদাহরণস্বরূপ, আপনি এক ধরনের Firebase Realtime Database বা Cloud Firestore ইভেন্ট থেকে অন্য ধরনের পরিবর্তন করতে চাইতে পারেন।

শুধুমাত্র সোর্স কোড পরিবর্তন করে এবং firebase deploy চালানোর মাধ্যমে একটি ফাংশনের ইভেন্টের ধরন পরিবর্তন করা সম্ভব নয়। ত্রুটিগুলি এড়াতে, এই পদ্ধতি দ্বারা একটি ফাংশনের ট্রিগার প্রকার পরিবর্তন করুন:

  1. পছন্দসই ট্রিগার প্রকারের সাথে একটি নতুন ফাংশন অন্তর্ভুক্ত করতে উত্স কোডটি পরিবর্তন করুন৷
  2. ফাংশনটি স্থাপন করুন, যার ফলে অস্থায়ীভাবে পুরানো এবং নতুন উভয় ফাংশন চালানো হয়।
  3. Firebase CLI ব্যবহার করে প্রোডাকশন থেকে পুরানো ফাংশনটি স্পষ্টভাবে মুছে দিন।

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

Node.js পাইথন
// before
const {onObjectDeleted} = require("firebase-functions/v2/storage");

exports.objectDeleted = onObjectDeleted((event) => {
    // ...
});

// after
const {onObjectArchived} = require("firebase-functions/v2/storage");

exports.objectArchived = onObjectArchived((event) => {
    // ...
});
# before
from firebase_functions import storage_fn

@storage_fn.on_object_deleted()
def object_deleted(event):
  # ...

# after 
from firebase_functions import storage_fn

@storage_fn.on_object_archived()
def object_archived(event):
  # ...

তারপরে পুরানো ফাংশনটি মুছে ফেলার আগে প্রথমে নতুন ফাংশন তৈরি করতে নিম্নলিখিত কমান্ডগুলি চালান:

# Create new function objectArchived
firebase deploy --only functions:objectArchived

# Wait until deployment is done; now both objectDeleted and objectArchived are running

# Delete objectDeleted
firebase functions:delete objectDeleted

রানটাইম বিকল্প সেট করুন

Cloud Functions for Firebase আপনাকে রানটাইম বিকল্পগুলি নির্বাচন করতে দেয় যেমন Node.js রানটাইম সংস্করণ এবং প্রতি-ফাংশন টাইমআউট, মেমরি বরাদ্দকরণ এবং সর্বনিম্ন/সর্বোচ্চ ফাংশন দৃষ্টান্ত।

একটি সর্বোত্তম অনুশীলন হিসাবে, এই বিকল্পগুলি (Node.js সংস্করণ ব্যতীত) ফাংশন কোডের ভিতরে একটি কনফিগারেশন অবজেক্টে সেট করা উচিত। এই RuntimeOptions অবজেক্ট হল আপনার ফাংশনের রানটাইম বিকল্পগুলির জন্য সত্যের উৎস, এবং অন্য কোনো পদ্ধতির মাধ্যমে সেট করা বিকল্পগুলিকে ওভাররাইড করবে (যেমন Google ক্লাউড কনসোল বা gcloud CLI এর মাধ্যমে)।

যদি আপনার ডেভেলপমেন্ট ওয়ার্কফ্লোতে Google ক্লাউড কনসোল বা gcloud CLI-এর মাধ্যমে রানটাইম বিকল্পগুলি ম্যানুয়ালি সেট করা জড়িত থাকে এবং আপনি প্রতিটি স্থাপনায় এই মানগুলিকে ওভাররাইড করতে না চান, তাহলে preserveExternalChanges বিকল্পটিকে true সেট করুন। এই বিকল্পটি true সেট করার সাথে, Firebase আপনার কোডে সেট করা রানটাইম বিকল্পগুলিকে নিম্নলিখিত অগ্রাধিকারের সাথে আপনার ফাংশনের বর্তমানে-নিয়োজিত সংস্করণের সেটিংসের সাথে মার্জ করে:

  1. বিকল্প ফাংশন কোডে সেট করা আছে: বহিরাগত পরিবর্তন ওভাররাইড করুন।
  2. ফাংশন কোডে বিকল্পটি RESET_VALUE এ সেট করা হয়েছে: ডিফল্ট মান সহ বহিরাগত পরিবর্তনগুলি ওভাররাইড করুন৷
  3. বিকল্প ফাংশন কোডে সেট করা নেই, কিন্তু বর্তমানে স্থাপন করা ফাংশনে সেট করা হয়েছে: স্থাপন করা ফাংশনে নির্দিষ্ট করা বিকল্পটি ব্যবহার করুন।

preserveExternalChanges: true বিকল্পটি বেশিরভাগ পরিস্থিতিতে সুপারিশ করা হয় না কারণ আপনার কোডটি আর আপনার ফাংশনের জন্য রানটাইম বিকল্পের জন্য সত্যের সম্পূর্ণ উৎস হবে না। আপনি যদি এটি ব্যবহার করেন তবে Google ক্লাউড কনসোল দেখুন বা একটি ফাংশনের সম্পূর্ণ কনফিগারেশন দেখতে gcloud CLI ব্যবহার করুন৷

Node.js সংস্করণ সেট করুন

Cloud Functions জন্য Firebase SDK Node.js রানটাইম নির্বাচন করার অনুমতি দেয়। আপনি এই সমর্থিত Node.js সংস্করণগুলির একটির সাথে সম্পর্কিত রানটাইম পরিবেশে একচেটিয়াভাবে একটি প্রকল্পে সমস্ত ফাংশন চালানোর জন্য চয়ন করতে পারেন:

  • Node.js 22 (প্রিভিউ)
  • Node.js 20
  • Node.js 18

Node.js সংস্করণ 14 এবং 16 বাতিল করা হয়েছে এবং 2025 সালের প্রথম দিকে বাতিল করা হবে।

Node.js সংস্করণ সেট করতে:

আপনি package.json ফাইলের engines ফিল্ডে সংস্করণ সেট করতে পারেন যা শুরু করার সময় আপনার functions/ ডিরেক্টরিতে তৈরি হয়েছিল। উদাহরণস্বরূপ, শুধুমাত্র সংস্করণ 18 ব্যবহার করতে, package.json এ এই লাইনটি সম্পাদনা করুন:

  "engines": {"node": "20"}

আপনি যদি ইয়ার্ন প্যাকেজ ম্যানেজার ব্যবহার করেন বা engines ক্ষেত্রের জন্য আপনার অন্যান্য নির্দিষ্ট প্রয়োজনীয়তা থাকে, তাহলে আপনি পরিবর্তে firebase.jsonCloud Functions জন্য Firebase SDK-এর রানটাইম সেট করতে পারেন:

  {
    "functions": {
      "runtime": "nodejs18" // or nodejs20
    }
  }

CLI firebase.json এ সেট করা মান ব্যবহার করে package.json .json-এ আপনি আলাদাভাবে সেট করা যেকোনো মান বা পরিসরের চেয়ে।

আপনার Node.js রানটাইম আপগ্রেড করুন

আপনার Node.js রানটাইম আপগ্রেড করতে:

  1. নিশ্চিত করুন যে আপনার প্রকল্পটি ব্লেজ প্রাইসিং প্ল্যানে রয়েছে।
  2. নিশ্চিত করুন যে আপনি Firebase CLI v11.18.0 বা তার পরবর্তী ব্যবহার করছেন।
  3. শুরু করার সময় আপনার functions/ ডিরেক্টরিতে তৈরি করা package.json ফাইলে engines মান পরিবর্তন করুন। উদাহরণস্বরূপ, আপনি যদি 18 সংস্করণ থেকে 20 সংস্করণে আপগ্রেড করছেন, তাহলে এন্ট্রিটি দেখতে এইরকম হওয়া উচিত: "engines": {"node": "20"}
  4. ঐচ্ছিকভাবে, Firebase Local Emulator Suite ব্যবহার করে আপনার পরিবর্তনগুলি পরীক্ষা করুন।
  5. সমস্ত ফাংশন পুনরায় স্থাপন করুন।

পাইথন সংস্করণ সেট করুন

Cloud Functions 12.0.0 এবং উচ্চতর সংস্করণগুলির জন্য Firebase SDK পাইথন রানটাইম নির্বাচনের অনুমতি দেয়৷ দেখানো হিসাবে firebase.json এ রানটাইম সংস্করণ সেট করুন:

  {
    "functions": {
      "runtime": "python310" // or python311
    }
  }

স্কেলিং আচরণ নিয়ন্ত্রণ করুন

ডিফল্টরূপে, Cloud Functions for Firebase ইনকামিং অনুরোধের সংখ্যার উপর ভিত্তি করে চলমান দৃষ্টান্তের সংখ্যা স্কেল করে, ট্রাফিক হ্রাসের সময়ে সম্ভাব্যভাবে শূন্য দৃষ্টান্তে স্কেল করে। যাইহোক, যদি আপনার অ্যাপের কম লেটেন্সি প্রয়োজন হয় এবং আপনি ঠান্ডা শুরুর সংখ্যা সীমিত করতে চান, তাহলে আপনি উষ্ণ রাখা এবং অনুরোধ পরিবেশনের জন্য প্রস্তুত রাখার জন্য ন্যূনতম সংখ্যক কন্টেইনার দৃষ্টান্ত উল্লেখ করে এই ডিফল্ট আচরণটি পরিবর্তন করতে পারেন।

একইভাবে, আপনি ইনকামিং অনুরোধের প্রতিক্রিয়া হিসাবে দৃষ্টান্তের স্কেলিং সীমিত করতে সর্বোচ্চ সংখ্যা সেট করতে পারেন। এই সেটিংটি আপনার খরচ নিয়ন্ত্রণ করার উপায় হিসাবে ব্যবহার করুন বা একটি ব্যাকিং পরিষেবা যেমন একটি ডাটাবেসের সাথে সংযোগের সংখ্যা সীমিত করুন৷

প্রতি-ইনস্ট্যান্স কনকারেন্সি সেটিং (২য় জেনারে নতুন) সহ এই সেটিংসগুলি ব্যবহার করে, আপনি আপনার ফাংশনের জন্য স্কেলিং আচরণ নিয়ন্ত্রণ এবং সুর করতে পারেন। আপনার অ্যাপ্লিকেশন এবং ফাংশনের প্রকৃতি নির্ধারণ করবে কোন সেটিংস সবচেয়ে বেশি সাশ্রয়ী এবং এর ফলে সর্বোত্তম কার্যক্ষমতা হবে।

কম ট্রাফিক সহ কিছু অ্যাপের জন্য, মাল্টি-কনকারেন্সি ছাড়া একটি কম CPU বিকল্প সর্বোত্তম। অন্যদের জন্য যেখানে ঠাণ্ডা শুরু হওয়া একটি গুরুত্বপূর্ণ সমস্যা, সেখানে উচ্চ একযোগে এবং ন্যূনতম দৃষ্টান্ত স্থাপনের অর্থ হল ট্র্যাফিকের বড় স্পাইকগুলি পরিচালনা করার জন্য দৃষ্টান্তের একটি সেট সবসময় উষ্ণ রাখা হয়।

ছোট আকারের অ্যাপগুলির জন্য যেগুলি খুব কম ট্র্যাফিক পায়, উচ্চ একযোগে কম সর্বাধিক দৃষ্টান্ত সেট করার অর্থ হল অ্যাপটি অতিরিক্ত খরচ না করেই ট্র্যাফিকের বিস্ফোরণ পরিচালনা করতে পারে৷ যাইহোক, মনে রাখবেন যে যখন সর্বাধিক দৃষ্টান্তগুলি খুব কম সেট করা হয়, সিলিং পৌঁছে গেলে অনুরোধগুলি বাদ দেওয়া হতে পারে৷

সমসাময়িক অনুরোধের অনুমতি দিন

Cloud Functions for Firebase , প্রতিটি উদাহরণ একবারে একটি অনুরোধ পরিচালনা করতে পারে, তাই স্কেলিং আচরণ শুধুমাত্র সর্বনিম্ন এবং সর্বাধিক দৃষ্টান্ত সেটিংসের সাথে সেট করা হয়েছিল। দৃষ্টান্তের সংখ্যা নিয়ন্ত্রণ করার পাশাপাশি, Cloud Functions for Firebase (২য় জেনারে)-এ আপনি concurrency বিকল্পের সাথে প্রতিটি ইন্সট্যান্স একই সময়ে পরিবেশন করতে পারে এমন অনুরোধের সংখ্যা নিয়ন্ত্রণ করতে পারেন। কনকারেন্সির ডিফল্ট মান হল 80, কিন্তু আপনি এটিকে 1 থেকে 1000 এর মধ্যে যেকোনো পূর্ণসংখ্যাতে সেট করতে পারেন।

উচ্চতর কনকারেন্সি সেটিংস সহ ফাংশনগুলি কোল্ড স্টার্টিং ছাড়াই ট্রাফিকের স্পাইকগুলিকে শোষণ করতে পারে কারণ প্রতিটি উদাহরণে সম্ভবত কিছু হেডরুম থাকে। যদি একটি উদাহরণ 50টি সমবর্তী অনুরোধগুলি পরিচালনা করার জন্য কনফিগার করা হয় তবে বর্তমানে শুধুমাত্র 25টি পরিচালনা করছে, এটি কোল্ড স্টার্টের জন্য একটি নতুন উদাহরণের প্রয়োজন ছাড়াই 25টি অতিরিক্ত অনুরোধের একটি স্পাইক পরিচালনা করতে পারে। এর বিপরীতে, মাত্র 1 এর একযোগে সেটিং সহ, অনুরোধের এই স্পাইক 25টি ঠান্ডা শুরু হতে পারে।

এই সরলীকৃত দৃশ্যকল্প একযোগে সম্ভাব্য দক্ষতা লাভ প্রদর্শন করে। বাস্তবে, কার্যকারিতা অপ্টিমাইজ করার জন্য এবং ঠাণ্ডা কমানোর জন্য স্কেলিং আচরণ একযোগে শুরু হয় আরও জটিল। Cloud Functions for Firebase একত্রীকরণ Cloud Run দ্বারা চালিত হয় এবং Cloud Run কনটেইনার ইনস্ট্যান্স অটোস্কেলিংয়ের নিয়ম অনুসরণ করে।

Cloud Functions for Firebase উচ্চতর একযোগে সেটিংস নিয়ে পরীক্ষা করার সময়, নিম্নলিখিতগুলি মনে রাখবেন:

  • ব্যবহারিক সীমাতে না পৌঁছানো পর্যন্ত সর্বোত্তম পারফরম্যান্সের জন্য উচ্চতর কনকারেন্সি সেটিংসের জন্য উচ্চতর CPU এবং RAM প্রয়োজন হতে পারে। একটি ফাংশন যা ভারী ছবি বা ভিডিও প্রক্রিয়াকরণ করে, উদাহরণস্বরূপ, 1000টি সমবর্তী অনুরোধগুলি পরিচালনা করার জন্য সংস্থানগুলির অভাব হতে পারে, এমনকি যখন এটির CPU এবং RAM সেটিংস সর্বাধিক করা হয়।
  • যেহেতু Cloud Functions for Firebase (২য় জেনার) Cloud Run দ্বারা চালিত হয়, তাই আপনি কনকারেন্সি অপ্টিমাইজ করার জন্য Google Cloud নির্দেশিকাও দেখতে পারেন।
  • প্রোডাকশনে মাল্টিককারেন্সিতে স্যুইচ করার আগে পরীক্ষার পরিবেশে মাল্টিককারেন্সি ভালোভাবে পরীক্ষা করা নিশ্চিত করুন।

ন্যূনতম সংখ্যক দৃষ্টান্ত উষ্ণ রাখুন

আপনি সোর্স কোডে একটি ফাংশনের জন্য ন্যূনতম সংখ্যক দৃষ্টান্ত সেট করতে পারেন। উদাহরণস্বরূপ, এই ফাংশনটি উষ্ণ রাখার জন্য সর্বনিম্ন 5টি দৃষ্টান্ত সেট করে:

Node.js পাইথন
const { onCall } = require("firebase-functions/v2/https");

exports.getAutocompleteResponse = onCall(
  {
    // Keep 5 instances warm for this latency-critical function
    minInstances: 5,
  },
  (event) => {
    // Autocomplete user’s search term
  }
);
@https_fn.on_call(min_instances=5)
def get_autocomplete_response(event: https_fn.CallableRequest) -> https_fn.Response:

একটি ন্যূনতম দৃষ্টান্ত মান সেট করার সময় এখানে কিছু বিষয় বিবেচনা করতে হবে:

  • যদি Cloud Functions for Firebase আপনার অ্যাপটিকে আপনার সেটিং এর উপরে স্কেল করে, আপনি সেই থ্রেশহোল্ডের উপরে প্রতিটি উদাহরণের জন্য একটি ঠান্ডা শুরুর অভিজ্ঞতা পাবেন।
  • কোল্ড স্টার্ট স্পাইকি ট্র্যাফিক সহ অ্যাপগুলিতে সবচেয়ে মারাত্মক প্রভাব ফেলে। যদি আপনার অ্যাপে স্পাইকি ট্র্যাফিক থাকে এবং আপনি যদি এমন একটি মান সেট করেন যে প্রতিটি ট্রাফিক বৃদ্ধির সাথে কোল্ড স্টার্ট কমে যায়, আপনি উল্লেখযোগ্যভাবে কম লেটেন্সি দেখতে পাবেন। ক্রমাগত ট্র্যাফিক সহ অ্যাপগুলির জন্য, ঠান্ডা শুরু হলে কার্যক্ষমতাকে মারাত্মকভাবে প্রভাবিত করার সম্ভাবনা নেই৷
  • ন্যূনতম দৃষ্টান্ত সেট করা উত্পাদন পরিবেশের জন্য অর্থপূর্ণ হতে পারে, তবে সাধারণত পরীক্ষার পরিবেশে এড়ানো উচিত। আপনার পরীক্ষামূলক প্রকল্পে শূন্যে স্কেল করার জন্য কিন্তু এখনও আপনার উত্পাদন প্রকল্পে ঠান্ডা শুরু কমাতে, আপনি আপনার প্যারামিটারাইজড কনফিগারেশনে একটি ন্যূনতম দৃষ্টান্ত মান সেট করতে পারেন:

    Node.js পাইথন
    const functions = require('firebase-functions/v1');
    const { defineInt, defineString } = require('firebase-functions/params');
    
    // Define some parameters
    const minInstancesConfig = defineInt('HELLO_WORLD_MININSTANCES');
    const welcomeMessage = defineString('WELCOME_MESSAGE');
    
    // To use configured parameters inside the config for a function, provide them 
    // directly. To use them at runtime, call .value() on them.
    export const helloWorld = functions.runWith({ minInstances: minInstancesConfig}).https.onRequest(
      (req, res) => {
        res.send(`${welcomeMessage.value()}! I am a function.`);
      }
    );
    
    MIN_INSTANCES = params.IntParam("HELLO_WORLD_MININSTANCES")
    WELCOME_MESSAGE = params.StringParam("WELCOME_MESSAGE")
    
    @https_fn.on_request(min_instances=MIN_INSTANCES.value())
    def get_autocomplete_response(event: https_fn.Request) -> https_fn.Response:
        return https_fn.Response(f"{WELCOME_MESSAGE.value()} I'm a function.")
    

একটি ফাংশনের জন্য সর্বাধিক সংখ্যক দৃষ্টান্ত সীমিত করুন

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

Node.js পাইথন
const { onMessagePublished } = require("firebase-functions/v2/pubsub");

exports.mirrorevents = onMessagePublished(
  { topic: "topic-name", maxInstances: 100 },
  (event) => {
    // Connect to legacy database
  }
);
@pubsub_fn.on_message_published(topic="topic-name", max_instances=100)
def mirrorevents(event: pubsub_fn.CloudEvent):
#  Connect to legacy database

যদি একটি HTTP ফাংশন সর্বোচ্চ দৃষ্টান্তের সীমা পর্যন্ত স্কেল করা হয়, নতুন অনুরোধগুলি 30 সেকেন্ডের জন্য সারিবদ্ধ করা হয় এবং তারপরে কোনও উদাহরণ উপলব্ধ না হলে 429 Too Many Requests প্রতিক্রিয়া কোড দিয়ে প্রত্যাখ্যান করা হয়।

সর্বাধিক দৃষ্টান্ত সেটিংস ব্যবহার করার জন্য সর্বোত্তম অনুশীলন সম্পর্কে আরও জানতে, সর্বাধিক দৃষ্টান্ত সেট করার জন্য এই সেরা অনুশীলনগুলি দেখুন৷

টাইমআউট এবং মেমরি বরাদ্দ সেট করুন

কিছু ক্ষেত্রে, আপনার ফাংশনগুলির একটি দীর্ঘ সময়সীমার মান বা মেমরির একটি বড় বরাদ্দের জন্য বিশেষ প্রয়োজনীয়তা থাকতে পারে। আপনি Google Cloud কনসোলে বা ফাংশন সোর্স কোডে (শুধু ফায়ারবেস) এই মানগুলি সেট করতে পারেন৷

ফাংশন সোর্স কোডে মেমরি বরাদ্দ এবং টাইমআউট সেট করতে, আপনার ফাংশন চালানো ভার্চুয়াল মেশিন কাস্টমাইজ করতে মেমরি এবং টাইমআউট সেকেন্ডের জন্য বিশ্বব্যাপী বিকল্পগুলি ব্যবহার করুন। উদাহরণস্বরূপ, এই Cloud Storage ফাংশনটি 1GiB মেমরি ব্যবহার করে এবং 300 সেকেন্ডের পরে সময় শেষ হয়:

Node.js পাইথন
exports.convertLargeFile = onObjectFinalized({
  timeoutSeconds: 300,
  memory: "1GiB",
}, (event) => {
  // Do some complicated things that take a lot of memory and time
});
@storage_fn.on_object_finalized(timeout_sec=300, memory=options.MemoryOption.GB_1)
def convert_large_file(event: storage_fn.CloudEvent):
# Do some complicated things that take a lot of memory and time.

টাইমআউট সেকেন্ডের জন্য সর্বাধিক মান হল 540 , বা 9 মিনিট৷

Google Cloud কনসোলে মেমরি বরাদ্দ এবং সময়সীমা সেট করতে:

  1. Google Cloud কনসোলে বাম মেনু থেকে Cloud Functions for Firebase নির্বাচন করুন।
  2. ফাংশন তালিকায় তার নামের উপর ক্লিক করে একটি ফাংশন নির্বাচন করুন।
  3. উপরের মেনুতে সম্পাদনা আইকনে ক্লিক করুন।
  4. মেমরি বরাদ্দ লেবেলযুক্ত ড্রপ-ডাউন মেনু থেকে একটি মেমরি বরাদ্দ নির্বাচন করুন।
  5. উন্নত বিকল্পগুলি প্রদর্শন করতে আরও ক্লিক করুন, এবং টাইমআউট পাঠ্য বাক্সে কয়েক সেকেন্ড লিখুন।
  6. ফাংশন আপডেট করতে সংরক্ষণ করুন ক্লিক করুন.

CPU ডিফল্ট ওভাররাইড করুন

2GB পর্যন্ত মেমরি বরাদ্দ করা হয়েছে, Cloud Functions for Firebase প্রতিটি ফাংশন একটি CPU-তে ডিফল্ট হয় এবং তারপর 4 এবং 8GB-এর জন্য 2 CPU-তে বৃদ্ধি পায়। উল্লেখ্য যে এটি 1ম জেনার ডিফল্ট আচরণ থেকে উল্লেখযোগ্যভাবে ভিন্ন যেভাবে নিম্ন-মেমরি ফাংশনগুলির জন্য নিম্নোক্ত সারণীতে প্রকাশ করা হিসাবে সামান্য বেশি খরচ হতে পারে:

RAM বরাদ্দ সংস্করণ 1 ডিফল্ট CPU (ভগ্নাংশ) সংস্করণ 2 ডিফল্ট CPU প্রতি মিসে দাম বৃদ্ধি
128MB 1/12 1 10.5x
256MB 1/6 1 5.3x
512MB 1/3 1 2.7x
1 জিবি 7/12 1 1.6x
2 জিবি 1 1 1x
4GB 2 2 1x
8GB 2 2 1x
16 জিবি n/a 4 n/a

আপনি যদি আপনার 2nd gen ফাংশনের জন্য 1st gen এর আচরণ পছন্দ করেন, 1st gen ডিফল্টগুলিকে একটি বিশ্বব্যাপী বিকল্প হিসাবে সেট করুন:

Node.js পাইথন
// Turn off Firebase defaults
setGlobalOptions({ cpu: 'gcf_gen1' });
# Use 1st gen behavior
set_global_options(cpu="gcf_gen1")

CPU- নিবিড় ফাংশনের জন্য, 2nd gen অতিরিক্ত CPU কনফিগার করার নমনীয়তা প্রদান করে। আপনি দেখানো হিসাবে প্রতি-ফাংশন ভিত্তিতে CPU বুস্ট করতে পারেন:

Node.js পাইথন
// Boost CPU in a function:
export const analyzeImage = onObjectFinalized({ cpu: 2 }, (event) => {
  // computer vision goes here
});
# Boost CPU in a function:
@storage_fn.on_object_finalized(cpu=2)
def analyze_image(event: storage_fn.CloudEvent):
# computer vision goes here
,


আপনি Firebase CLI কমান্ডগুলি ব্যবহার করে বা আপনার ফাংশন সোর্স কোডে রানটাইম বিকল্পগুলি সেট করে ফাংশন স্থাপন, মুছতে এবং সংশোধন করতে পারেন।

ফাংশন স্থাপন

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

firebase deploy --only functions

ডিফল্টরূপে, Firebase CLI একই সময়ে আপনার উত্সের ভিতরে সমস্ত ফাংশন স্থাপন করে। যদি আপনার প্রজেক্টে 5টির বেশি ফাংশন থাকে, আমরা সুপারিশ করি যে আপনি শুধুমাত্র আপনার সম্পাদনা করা ফাংশনগুলি স্থাপন করতে নির্দিষ্ট ফাংশনের নামের সাথে --only পতাকা ব্যবহার করুন৷ এইভাবে নির্দিষ্ট ফাংশন স্থাপন করা স্থাপনার প্রক্রিয়াকে গতিশীল করে এবং আপনাকে স্থাপনার কোটা এড়াতে সহায়তা করে। যেমন:

firebase deploy --only functions:addMessage,functions:makeUppercase

প্রচুর সংখ্যক ফাংশন স্থাপন করার সময়, আপনি আদর্শ কোটা অতিক্রম করতে পারেন এবং HTTP 429 বা 500 ত্রুটি বার্তা পেতে পারেন। এটি সমাধান করতে, 10 বা তার কম গোষ্ঠীতে ফাংশন স্থাপন করুন।

উপলব্ধ কমান্ডের সম্পূর্ণ তালিকার জন্য Firebase CLI রেফারেন্স দেখুন।

ডিফল্টরূপে, Firebase CLI সোর্স কোডের functions/ ফোল্ডারে দেখায়। আপনি যদি পছন্দ করেন, আপনি কোডবেস বা ফাইলের একাধিক সেটে ফাংশন সংগঠিত করতে পারেন।

ফাংশন মুছুন

আপনি এই উপায়ে পূর্বে স্থাপন করা ফাংশন মুছে ফেলতে পারেন:

  • Firebase CLI-তে functions:delete সহ স্পষ্টভাবে
  • স্পষ্টভাবে Google Cloud কনসোলে
  • নিহিতভাবে স্থাপনার পূর্বে উৎস থেকে ফাংশন অপসারণ করে।

সমস্ত মুছে ফেলার ক্রিয়াকলাপ আপনাকে উত্পাদন থেকে ফাংশন অপসারণের আগে নিশ্চিত করতে অনুরোধ করে।

Firebase CLI-তে স্পষ্ট ফাংশন মুছে ফেলা একাধিক আর্গুমেন্টের পাশাপাশি ফাংশন গোষ্ঠীকে সমর্থন করে এবং আপনাকে একটি নির্দিষ্ট অঞ্চলে চলমান একটি ফাংশন নির্দিষ্ট করতে দেয়। এছাড়াও, আপনি নিশ্চিতকরণ প্রম্পট ওভাররাইড করতে পারেন।

# Delete all functions that match the specified name in all regions.
firebase functions:delete myFunction
# Delete a specified function running in a specific region.
firebase functions:delete myFunction --region us-east-1
# Delete more than one function
firebase functions:delete myFunction myOtherFunction
# Delete a specified functions group.
firebase functions:delete groupA
# Bypass the confirmation prompt.
firebase functions:delete myFunction --force

অন্তর্নিহিত ফাংশন মুছে ফেলার সাথে, firebase deploy আপনার সোর্স পার্স করে এবং ফাইল থেকে মুছে ফেলা যে কোনো ফাংশন প্রোডাকশন থেকে সরিয়ে দেয়।

একটি ফাংশনের নাম, অঞ্চল বা ট্রিগার পরিবর্তন করুন

আপনি যদি অঞ্চলগুলির পুনঃনামকরণ বা পরিবর্তন করেন বা উত্পাদন ট্র্যাফিক পরিচালনা করে এমন ফাংশনগুলির জন্য ট্রিগার করেন তবে পরিবর্তনের সময় ইভেন্টগুলি হারানো এড়াতে এই বিভাগে পদক্ষেপগুলি অনুসরণ করুন৷ আপনি এই পদক্ষেপগুলি অনুসরণ করার আগে, প্রথমে নিশ্চিত করুন যে আপনার ফাংশন idempotent , যেহেতু পরিবর্তনের সময় আপনার ফাংশনের নতুন সংস্করণ এবং পুরানো সংস্করণ উভয়ই একই সময়ে চলবে৷

একটি ফাংশন পুনঃনামকরণ করুন

একটি ফাংশন পুনঃনামকরণ করতে, আপনার উত্সে ফাংশনের একটি নতুন নামকরণকৃত সংস্করণ তৈরি করুন এবং তারপরে দুটি পৃথক স্থাপনার কমান্ড চালান। প্রথম কমান্ডটি নতুন নামযুক্ত ফাংশন স্থাপন করে এবং দ্বিতীয় কমান্ডটি পূর্বে স্থাপন করা সংস্করণটিকে সরিয়ে দেয়। উদাহরণস্বরূপ, যদি আপনার কাছে একটি HTTP-ট্রিগার করা ওয়েবহুক থাকে যার নাম আপনি পুনঃনামকরণ করতে চান, তাহলে কোডটি নিম্নরূপ সংশোধন করুন:

Node.js পাইথন
// before
const {onRequest}  = require('firebase-functions/v2/https');

exports.webhook = onRequest((req, res) => {
    res.send("Hello");
});

// after
const {onRequest}  = require('firebase-functions/v2/https');

exports.webhookNew = onRequest((req, res) => {
    res.send("Hello");
});
# before
from firebase_functions import https_fn

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

# after
from firebase_functions import https_fn

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

তারপরে নতুন ফাংশন স্থাপন করতে নিম্নলিখিত কমান্ডগুলি চালান:

# Deploy new function
firebase deploy --only functions:webhookNew

# Wait until deployment is done; now both functions are running

# Delete webhook
firebase functions:delete webhook

একটি ফাংশনের অঞ্চল বা অঞ্চল পরিবর্তন করুন

আপনি যদি এমন একটি ফাংশনের জন্য নির্দিষ্ট অঞ্চলগুলি পরিবর্তন করেন যা উত্পাদন ট্র্যাফিক পরিচালনা করে, আপনি এই পদক্ষেপগুলি ক্রমানুসারে সম্পাদন করে ইভেন্ট ক্ষতি রোধ করতে পারেন:

  1. ফাংশন পুনঃনামকরণ করুন, এবং পছন্দ অনুযায়ী এর অঞ্চল বা অঞ্চল পরিবর্তন করুন।
  2. পুনঃনামকৃত ফাংশন স্থাপন করুন, যার ফলে উভয় অঞ্চলের সেটে সাময়িকভাবে একই কোড চালানো হয়।
  3. আগের ফাংশন মুছুন।

উদাহরণস্বরূপ, যদি আপনার কাছে একটি Cloud Firestore -triggered ফাংশন থাকে যা বর্তমানে us-central1 এর ডিফল্ট ফাংশন অঞ্চলে রয়েছে এবং আপনি এটিকে asia-northeast1 এ স্থানান্তর করতে চান, আপনাকে প্রথমে ফাংশনের নাম পরিবর্তন করতে এবং অঞ্চলটি সংশোধন করতে আপনার সোর্স কোড পরিবর্তন করতে হবে৷

Node.js পাইথন
// before
exports.firestoreTrigger = onDocumentCreated(
  "my-collection/{docId}",
  (event) => {},
);

// after
exports.firestoreTriggerAsia = onDocumentCreated(
  {
    document: "my-collection/{docId}",
    region: "asia-northeast1",
  },
  (event) => {},
);

আপডেট করা কোডটি অঞ্চলের সাথে সঠিক ইভেন্ট ফিল্টার (এই ক্ষেত্রে document ) উল্লেখ করা উচিত। আরও তথ্যের জন্য ক্লাউড ফাংশন অবস্থানগুলি দেখুন৷

# Before
@firestore_fn.on_document_created("my-collection/{docId}")
def firestore_trigger(event):
    pass

# After
@firestore_fn.on_document_created("my-collection/{docId}",
                                  region="asia-northeast1")
def firestore_trigger_asia(event):
    pass

তারপর চালানোর মাধ্যমে স্থাপন করুন:

firebase deploy --only functions:firestoreTriggerAsia

এখন দুটি অভিন্ন ফাংশন চলছে: firestoreTrigger us-central1 এ চলছে এবং firestoreTriggerAsia asia-northeast1 এ চলছে।

তারপর, firestoreTrigger মুছুন:

firebase functions:delete firestoreTrigger

এখন শুধুমাত্র একটি ফাংশন আছে - firestoreTriggerAsia , যা asia-northeast1 এ চলছে।

একটি ফাংশনের ট্রিগার প্রকার পরিবর্তন করুন

আপনি সময়ের সাথে সাথে Cloud Functions for Firebase বিকাশ করার সাথে সাথে আপনাকে বিভিন্ন কারণে একটি ফাংশনের ট্রিগার প্রকার পরিবর্তন করতে হতে পারে। উদাহরণস্বরূপ, আপনি এক ধরনের Firebase Realtime Database বা Cloud Firestore ইভেন্ট থেকে অন্য ধরনের পরিবর্তন করতে চাইতে পারেন।

শুধুমাত্র সোর্স কোড পরিবর্তন করে এবং firebase deploy চালানোর মাধ্যমে একটি ফাংশনের ইভেন্টের ধরন পরিবর্তন করা সম্ভব নয়। ত্রুটিগুলি এড়াতে, এই পদ্ধতি দ্বারা একটি ফাংশনের ট্রিগার প্রকার পরিবর্তন করুন:

  1. পছন্দসই ট্রিগার প্রকারের সাথে একটি নতুন ফাংশন অন্তর্ভুক্ত করতে উত্স কোডটি পরিবর্তন করুন৷
  2. ফাংশনটি স্থাপন করুন, যার ফলে অস্থায়ীভাবে পুরানো এবং নতুন উভয় ফাংশন চালানো হয়।
  3. Firebase CLI ব্যবহার করে প্রোডাকশন থেকে পুরানো ফাংশনটি স্পষ্টভাবে মুছে দিন।

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

Node.js পাইথন
// before
const {onObjectDeleted} = require("firebase-functions/v2/storage");

exports.objectDeleted = onObjectDeleted((event) => {
    // ...
});

// after
const {onObjectArchived} = require("firebase-functions/v2/storage");

exports.objectArchived = onObjectArchived((event) => {
    // ...
});
# before
from firebase_functions import storage_fn

@storage_fn.on_object_deleted()
def object_deleted(event):
  # ...

# after 
from firebase_functions import storage_fn

@storage_fn.on_object_archived()
def object_archived(event):
  # ...

তারপরে পুরানো ফাংশনটি মুছে ফেলার আগে প্রথমে নতুন ফাংশন তৈরি করতে নিম্নলিখিত কমান্ডগুলি চালান:

# Create new function objectArchived
firebase deploy --only functions:objectArchived

# Wait until deployment is done; now both objectDeleted and objectArchived are running

# Delete objectDeleted
firebase functions:delete objectDeleted

রানটাইম বিকল্প সেট করুন

Cloud Functions for Firebase আপনাকে রানটাইম বিকল্পগুলি নির্বাচন করতে দেয় যেমন Node.js রানটাইম সংস্করণ এবং প্রতি-ফাংশন টাইমআউট, মেমরি বরাদ্দকরণ এবং সর্বনিম্ন/সর্বোচ্চ ফাংশন দৃষ্টান্ত।

একটি সর্বোত্তম অনুশীলন হিসাবে, এই বিকল্পগুলি (Node.js সংস্করণ ব্যতীত) ফাংশন কোডের ভিতরে একটি কনফিগারেশন অবজেক্টে সেট করা উচিত। এই RuntimeOptions অবজেক্ট হল আপনার ফাংশনের রানটাইম বিকল্পগুলির জন্য সত্যের উৎস, এবং অন্য কোনো পদ্ধতির মাধ্যমে সেট করা বিকল্পগুলিকে ওভাররাইড করবে (যেমন Google ক্লাউড কনসোল বা gcloud CLI এর মাধ্যমে)।

যদি আপনার ডেভেলপমেন্ট ওয়ার্কফ্লোতে Google ক্লাউড কনসোল বা gcloud CLI-এর মাধ্যমে রানটাইম বিকল্পগুলি ম্যানুয়ালি সেট করা জড়িত থাকে এবং আপনি প্রতিটি স্থাপনায় এই মানগুলিকে ওভাররাইড করতে না চান, তাহলে preserveExternalChanges বিকল্পটিকে true সেট করুন। এই বিকল্পটি true সেট করার সাথে, Firebase আপনার কোডে সেট করা রানটাইম বিকল্পগুলিকে নিম্নলিখিত অগ্রাধিকারের সাথে আপনার ফাংশনের বর্তমানে-নিয়োজিত সংস্করণের সেটিংসের সাথে মার্জ করে:

  1. বিকল্প ফাংশন কোডে সেট করা আছে: বহিরাগত পরিবর্তন ওভাররাইড করুন।
  2. ফাংশন কোডে বিকল্পটি RESET_VALUE এ সেট করা হয়েছে: ডিফল্ট মান সহ বহিরাগত পরিবর্তনগুলি ওভাররাইড করুন৷
  3. বিকল্প ফাংশন কোডে সেট করা নেই, কিন্তু বর্তমানে স্থাপন করা ফাংশনে সেট করা হয়েছে: স্থাপন করা ফাংশনে নির্দিষ্ট করা বিকল্পটি ব্যবহার করুন।

preserveExternalChanges: true বিকল্পের প্রস্তাব দেওয়া হয় না কারণ আপনার কোডটি আপনার ফাংশনগুলির জন্য রানটাইম বিকল্পগুলির জন্য আর সত্যের সম্পূর্ণ উত্স হবে না। আপনি যদি এটি ব্যবহার করেন তবে গুগল ক্লাউড কনসোলটি পরীক্ষা করুন বা কোনও ফাংশনের সম্পূর্ণ কনফিগারেশন দেখতে GCloud সিএলআই ব্যবহার করুন।

Node.js সংস্করণ সেট করুন

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

  • নোড.জেএস 22 (পূর্বরূপ)
  • Node.js 20
  • Node.js 18

নোড.জেএস সংস্করণ 14 এবং 16 অবমূল্যায়ন করা হয়েছে এবং 2025 এর প্রথম দিকে এটি বাতিল করা হবে। এই অবমূল্যায়িত সংস্করণগুলির সাথে স্থাপনা অক্ষম করা হয়েছে।

নোড.জেএস সংস্করণ সেট করতে:

আপনি শুরু করার সময় আপনার functions/ ডিরেক্টরিতে তৈরি করা package.json ফাইলটিতে engines ক্ষেত্রে সংস্করণটি সেট করতে পারেন। উদাহরণস্বরূপ, কেবলমাত্র সংস্করণ 18 ব্যবহার করতে, package.json এ এই লাইনটি সম্পাদনা করুন:

  "engines": {"node": "20"}

আপনি যদি ইয়ার্ন প্যাকেজ ম্যানেজার ব্যবহার করছেন বা engines ক্ষেত্রের জন্য অন্যান্য নির্দিষ্ট প্রয়োজনীয়তা ব্যবহার করছেন তবে আপনি firebase.json -এ Cloud Functions জন্য Firebase এসডিকে জন্য রানটাইম সেট করতে পারেন: পরিবর্তে:

  {
    "functions": {
      "runtime": "nodejs18" // or nodejs20
    }
  }

সিএলআই আপনি package.json আলাদাভাবে সেট করা যে কোনও মান বা ব্যাপ্তির চেয়ে firebase.json -এ মান সেটটি ব্যবহার করেন।

আপনার নোড.জেএস রানটাইম আপগ্রেড করুন

আপনার নোড.জেএস রানটাইম আপগ্রেড করতে:

  1. আপনার প্রকল্পটি ব্লেজ প্রাইসিং পরিকল্পনায় রয়েছে তা নিশ্চিত করুন।
  2. নিশ্চিত হয়ে নিন যে আপনি Firebase সিএলআই ভি 11.18.0 বা তার পরে ব্যবহার করছেন।
  3. আরম্ভের সময় আপনার functions/ ডিরেক্টরিতে তৈরি করা package.json ফাইলটিতে engines মান পরিবর্তন করুন। উদাহরণস্বরূপ, আপনি যদি সংস্করণ 18 থেকে সংস্করণ 20 এ আপগ্রেড করছেন তবে এন্ট্রিটি দেখতে হবে: "engines": {"node": "20"}
  4. Ally চ্ছিকভাবে, Firebase Local Emulator Suite ব্যবহার করে আপনার পরিবর্তনগুলি পরীক্ষা করুন।
  5. সমস্ত ফাংশন পুনরায় নিয়োগ করুন।

পাইথন সংস্করণ সেট করুন

Cloud Functions সংস্করণগুলির জন্য Firebase এসডিকে 12.0.0 এবং উচ্চতর পাইথন রানটাইম নির্বাচনের অনুমতি দেয়। firebase.json এ রানটাইম সংস্করণটি সেট করুন:

  {
    "functions": {
      "runtime": "python310" // or python311
    }
  }

স্কেলিং আচরণ নিয়ন্ত্রণ করুন

ডিফল্টরূপে, Cloud Functions for Firebase আগত অনুরোধের সংখ্যার ভিত্তিতে চলমান দৃষ্টান্তের সংখ্যা স্কেল করে, হ্রাস ট্র্যাফিকের সময়ে সম্ভাব্যভাবে শূন্য দৃষ্টান্তগুলিতে স্কেলিং করে। তবে, যদি আপনার অ্যাপ্লিকেশনটির হ্রাস হ্রাসের প্রয়োজন হয় এবং আপনি ঠান্ডা শুরুগুলির সংখ্যা সীমাবদ্ধ করতে চান তবে আপনি ন্যূনতম সংখ্যক ধারক উদাহরণগুলি উষ্ণ রাখতে এবং অনুরোধগুলি পরিবেশন করার জন্য প্রস্তুত করে নির্দিষ্ট করে এই ডিফল্ট আচরণটি পরিবর্তন করতে পারেন।

একইভাবে, আপনি আগত অনুরোধগুলির প্রতিক্রিয়া হিসাবে দৃষ্টান্তগুলির স্কেলিং সীমাবদ্ধ করতে সর্বাধিক সংখ্যা সেট করতে পারেন। আপনার ব্যয়গুলি নিয়ন্ত্রণ করতে বা কোনও ডাটাবেসে যেমন কোনও ব্যাকিং পরিষেবাতে সংযোগের সংখ্যা সীমাবদ্ধ করার উপায় হিসাবে এই সেটিংটি ব্যবহার করুন।

এই সেটিংসটি প্রতি-অনুপ্রেরণা সম্মতি সেটিংসের সাথে একসাথে ব্যবহার করে (২ য় জেনে নতুন), আপনি আপনার ক্রিয়াকলাপগুলির জন্য স্কেলিং আচরণটি নিয়ন্ত্রণ করতে এবং টিউন করতে পারেন। আপনার অ্যাপ্লিকেশন এবং ফাংশনের প্রকৃতি নির্ধারণ করবে যে কোন সেটিংস সবচেয়ে ব্যয়বহুল কার্যকর এবং এর ফলে সর্বোত্তম পারফরম্যান্স হবে।

কম ট্র্যাফিক সহ কিছু অ্যাপ্লিকেশনগুলির জন্য, মাল্টি-কনকারেন্সি ছাড়াই একটি কম সিপিইউ বিকল্পটি সর্বোত্তম। অন্যদের জন্য যেখানে ঠান্ডা শুরু একটি সমালোচনামূলক সমস্যা, উচ্চ সম্মতি এবং ন্যূনতম উদাহরণ স্থাপনের অর্থ হ'ল ট্র্যাফিকের বড় স্পাইকগুলি পরিচালনা করার জন্য দৃষ্টান্তগুলির একটি সেট সর্বদা উষ্ণ রাখা হয়।

খুব কম ট্র্যাফিক প্রাপ্ত ছোট-স্কেল অ্যাপ্লিকেশনগুলির জন্য, উচ্চ সম্মতি সহ কম সর্বাধিক উদাহরণ স্থাপনের অর্থ হ'ল অ্যাপটি অতিরিক্ত ব্যয় ছাড়াই ট্র্যাফিকের বিস্ফোরণগুলি পরিচালনা করতে পারে। তবে, মনে রাখবেন যে যখন সর্বাধিক দৃষ্টান্তগুলি খুব কম সেট করা থাকে তখন সিলিংটি পৌঁছে গেলে অনুরোধগুলি বাদ দেওয়া যেতে পারে।

একযোগে অনুরোধের অনুমতি দিন

Cloud Functions for Firebase , প্রতিটি উদাহরণ একবারে একটি অনুরোধ পরিচালনা করতে পারে, সুতরাং স্কেলিং আচরণটি কেবল ন্যূনতম এবং সর্বাধিক দৃষ্টান্ত সেটিংসের সাথে সেট করা হয়েছিল। উদাহরণগুলির সংখ্যা নিয়ন্ত্রণ করার পাশাপাশি, Cloud Functions for Firebase আপনি প্রতিটি উদাহরণ একই সাথে concurrency বিকল্পের সাথে পরিবেশন করতে পারে এমন অনুরোধের সংখ্যা নিয়ন্ত্রণ করতে পারেন। সম্মতির জন্য ডিফল্ট মান 80, তবে আপনি এটি 1 এবং 1000 এর মধ্যে যে কোনও পূর্ণসংখ্যায় সেট করতে পারেন।

উচ্চতর সম্মতি সেটিংস সহ ফাংশনগুলি ঠান্ডা শুরু ছাড়াই ট্র্যাফিকের স্পাইকগুলি শোষণ করতে পারে কারণ প্রতিটি উদাহরণে সম্ভবত কিছু হেডরুম রয়েছে। যদি কোনও উদাহরণ 50 টি সমবর্তী অনুরোধগুলি পরিচালনা করার জন্য কনফিগার করা থাকে তবে বর্তমানে এটি কেবল 25 টি পরিচালনা করছে, এটি শীতল সূচনার জন্য কোনও নতুন উদাহরণের প্রয়োজন ছাড়াই 25 অতিরিক্ত অনুরোধের স্পাইক পরিচালনা করতে পারে। বিপরীতে, মাত্র 1 এর একটি সম্মতি সেটিং সহ, অনুরোধগুলিতে স্পাইকটি 25 টি শীতল শুরু হতে পারে।

এই সরলিকৃত দৃশ্যটি সম্মতির সম্ভাব্য দক্ষতা অর্জনকে প্রদর্শন করে। বাস্তবে, দক্ষতার অনুকূলকরণের জন্য স্কেলিং আচরণ এবং সম্মতির সাথে ঠান্ডা শুরু হ্রাস আরও জটিল। Cloud Functions for Firebase সম্মতি Cloud Run দ্বারা চালিত হয় এবং Cloud Run কনটেইনার উদাহরণ অটোস্কেলিংয়ের নিয়ম অনুসরণ করে।

Cloud Functions for Firebase উচ্চতর সম্মতি সেটিংসের সাথে পরীক্ষা করার সময়, নিম্নলিখিতগুলি মনে রাখবেন:

  • উচ্চতর সম্মতি সেটিংসে ব্যবহারিক সীমাতে পৌঁছানো পর্যন্ত সর্বোত্তম পারফরম্যান্সের জন্য উচ্চতর সিপিইউ এবং র‌্যামের প্রয়োজন হতে পারে। একটি ফাংশন যা ভারী চিত্র বা ভিডিও প্রসেসিং করে, উদাহরণস্বরূপ, এর সিপিইউ এবং র‌্যাম সেটিংস সর্বাধিক করা হলেও 1000 সমবর্তী অনুরোধগুলি পরিচালনা করার জন্য সংস্থানগুলির অভাব হতে পারে।
  • যেহেতু Cloud Functions for Firebase Cloud Run দ্বারা চালিত, তাই আপনি সম্মতি অনুকূলকরণের জন্য Google Cloud গাইডেন্সেও উল্লেখ করতে পারেন।
  • উত্পাদনে মাল্টিকনকারেন্সিতে স্যুইচ করার আগে পরীক্ষার পরিবেশে মাল্টিকনকারেন্সি পুরোপুরি পরীক্ষা করার বিষয়টি নিশ্চিত করুন।

ন্যূনতম সংখ্যক উদাহরণ উষ্ণ রাখুন

আপনি উত্স কোডে কোনও ফাংশনের জন্য ন্যূনতম সংখ্যা নির্ধারণ করতে পারেন। উদাহরণস্বরূপ, এই ফাংশনটি উষ্ণ রাখার জন্য সর্বনিম্ন 5 টি উদাহরণ সেট করে:

Node.js পাইথন
const { onCall } = require("firebase-functions/v2/https");

exports.getAutocompleteResponse = onCall(
  {
    // Keep 5 instances warm for this latency-critical function
    minInstances: 5,
  },
  (event) => {
    // Autocomplete user’s search term
  }
);
@https_fn.on_call(min_instances=5)
def get_autocomplete_response(event: https_fn.CallableRequest) -> https_fn.Response:

ন্যূনতম উদাহরণগুলির মান নির্ধারণের সময় এখানে কিছু বিষয় বিবেচনা করা উচিত:

  • যদি Cloud Functions for Firebase আপনার অ্যাপ্লিকেশনটিকে আপনার সেটিংয়ের উপরে স্কেল করে তবে আপনি সেই প্রান্তিকের উপরে প্রতিটি উদাহরণের জন্য একটি শীতল সূচনা অনুভব করবেন।
  • ঠান্ডা শুরুগুলি চটকদার ট্র্যাফিক সহ অ্যাপ্লিকেশনগুলিতে সবচেয়ে মারাত্মক প্রভাব ফেলে। যদি আপনার অ্যাপ্লিকেশনটিতে চটকদার ট্র্যাফিক থাকে এবং আপনি প্রতিটি ট্র্যাফিক বৃদ্ধিতে শীত শুরু হওয়া যথেষ্ট পরিমাণে একটি মান নির্ধারণ করেন, আপনি দেখতে পাবেন উল্লেখযোগ্যভাবে হ্রাসিত বিলম্ব। ধ্রুবক ট্র্যাফিক সহ অ্যাপ্লিকেশনগুলির জন্য, ঠান্ডা শুরুগুলি পারফরম্যান্সকে মারাত্মকভাবে প্রভাবিত করতে পারে না।
  • ন্যূনতম উদাহরণ স্থাপন করা উত্পাদন পরিবেশের জন্য অর্থবোধ করতে পারে তবে সাধারণত পরীক্ষার পরিবেশে এড়ানো উচিত। আপনার পরীক্ষা প্রকল্পে শূন্যে স্কেল করতে তবে এখনও আপনার উত্পাদন প্রকল্পে শীতল শুরুগুলি হ্রাস করতে, আপনি আপনার প্যারামিটারাইজড কনফিগারেশনে ন্যূনতম উদাহরণগুলির মান সেট করতে পারেন:

    Node.js পাইথন
    const functions = require('firebase-functions/v1');
    const { defineInt, defineString } = require('firebase-functions/params');
    
    // Define some parameters
    const minInstancesConfig = defineInt('HELLO_WORLD_MININSTANCES');
    const welcomeMessage = defineString('WELCOME_MESSAGE');
    
    // To use configured parameters inside the config for a function, provide them 
    // directly. To use them at runtime, call .value() on them.
    export const helloWorld = functions.runWith({ minInstances: minInstancesConfig}).https.onRequest(
      (req, res) => {
        res.send(`${welcomeMessage.value()}! I am a function.`);
      }
    );
    
    MIN_INSTANCES = params.IntParam("HELLO_WORLD_MININSTANCES")
    WELCOME_MESSAGE = params.StringParam("WELCOME_MESSAGE")
    
    @https_fn.on_request(min_instances=MIN_INSTANCES.value())
    def get_autocomplete_response(event: https_fn.Request) -> https_fn.Response:
        return https_fn.Response(f"{WELCOME_MESSAGE.value()} I'm a function.")
    

একটি ফাংশনের জন্য সর্বাধিক সংখ্যার উদাহরণ সীমাবদ্ধ করুন

আপনি ফাংশন উত্স কোডে সর্বাধিক দৃষ্টান্তের জন্য একটি মান সেট করতে পারেন। উদাহরণস্বরূপ, এই ফাংশনটি অনুমানমূলক লিগ্যাসি ডাটাবেসকে ছাপিয়ে না দেওয়ার জন্য 100 টি দৃষ্টান্তের একটি সীমা নির্ধারণ করে:

Node.js পাইথন
const { onMessagePublished } = require("firebase-functions/v2/pubsub");

exports.mirrorevents = onMessagePublished(
  { topic: "topic-name", maxInstances: 100 },
  (event) => {
    // Connect to legacy database
  }
);
@pubsub_fn.on_message_published(topic="topic-name", max_instances=100)
def mirrorevents(event: pubsub_fn.CloudEvent):
#  Connect to legacy database

যদি কোনও এইচটিটিপি ফাংশনটি সর্বোচ্চ দৃষ্টান্তের সীমা পর্যন্ত স্কেল করা হয় তবে নতুন অনুরোধগুলি 30 সেকেন্ডের জন্য সারিবদ্ধ হয় এবং তারপরে 429 Too Many Requests এর প্রতিক্রিয়া কোড দিয়ে প্রত্যাখ্যান করা হয় যদি ততক্ষণে কোনও উদাহরণ পাওয়া যায় না।

সর্বাধিক দৃষ্টান্ত সেটিংস ব্যবহারের জন্য সেরা অনুশীলনগুলি সম্পর্কে আরও জানতে, সর্বাধিক উদাহরণ নির্ধারণের জন্য এই সেরা অনুশীলনগুলি দেখুন।

সময়সীমা এবং মেমরি বরাদ্দ সেট করুন

কিছু ক্ষেত্রে, আপনার ফাংশনগুলির দীর্ঘ সময়সীমার মান বা মেমরির বৃহত বরাদ্দের জন্য বিশেষ প্রয়োজনীয়তা থাকতে পারে। আপনি এই মানগুলি Google Cloud কনসোলে বা ফাংশন উত্স কোডে (কেবলমাত্র ফায়ারবেস) সেট করতে পারেন।

ফাংশন উত্স কোডে মেমরি বরাদ্দ এবং সময়সীমা সেট করতে, আপনার ফাংশনগুলি চলমান ভার্চুয়াল মেশিনটি কাস্টমাইজ করতে মেমরি এবং টাইমআউট সেকেন্ডের জন্য বিশ্বব্যাপী বিকল্পগুলি ব্যবহার করুন। উদাহরণস্বরূপ, এই Cloud Storage ফাংশনটি 1 জিআইবি মেমরি ব্যবহার করে এবং 300 সেকেন্ডের পরে সময়গুলি ব্যবহার করে:

Node.js পাইথন
exports.convertLargeFile = onObjectFinalized({
  timeoutSeconds: 300,
  memory: "1GiB",
}, (event) => {
  // Do some complicated things that take a lot of memory and time
});
@storage_fn.on_object_finalized(timeout_sec=300, memory=options.MemoryOption.GB_1)
def convert_large_file(event: storage_fn.CloudEvent):
# Do some complicated things that take a lot of memory and time.

সময়সীমা সেকেন্ডের জন্য সর্বাধিক মান 540 বা 9 মিনিট।

Google Cloud কনসোলে মেমরি বরাদ্দ এবং সময়সীমা সেট করতে:

  1. Google Cloud কনসোলে বাম মেনু থেকে Cloud Functions for Firebase নির্বাচন করুন।
  2. ফাংশন তালিকায় এর নাম ক্লিক করে একটি ফাংশন নির্বাচন করুন।
  3. শীর্ষ মেনুতে সম্পাদনা আইকনটি ক্লিক করুন।
  4. বরাদ্দকৃত মেমরি লেবেলযুক্ত ড্রপ-ডাউন মেনু থেকে একটি মেমরি বরাদ্দ নির্বাচন করুন।
  5. উন্নত বিকল্পগুলি প্রদর্শন করতে আরও ক্লিক করুন এবং টাইমআউট পাঠ্য বাক্সে বেশ কয়েকটি সেকেন্ড প্রবেশ করুন।
  6. ফাংশন আপডেট করতে সংরক্ষণ করুন ক্লিক করুন।

ওভাররাইড সিপিইউ ডিফল্ট

2 গিগাবাইট পর্যন্ত মেমরি বরাদ্দ করা হয়েছে, Cloud Functions for Firebase প্রতিটি ফাংশন একটি সিপিইউতে ডিফল্ট হয় এবং তারপরে 4 এবং 8 জিবির জন্য 2 সিপিইউতে বৃদ্ধি পায়। নোট করুন যে এটি 1 ম জেনারেল ডিফল্ট আচরণের থেকে উল্লেখযোগ্যভাবে পৃথক যেগুলি নিম্নলিখিত সারণীতে প্রকাশিত হিসাবে স্বল্প-মেমরি ফাংশনগুলির জন্য কিছুটা বেশি ব্যয় হতে পারে:

র‌্যাম বরাদ্দ সংস্করণ 1 ডিফল্ট সিপিইউ (ভগ্নাংশ) সংস্করণ 2 ডিফল্ট সিপিইউ প্রতি এমএস প্রতি মূল্য বৃদ্ধি
128MB 1/12 1 10.5x
256MB 1/6 1 5.3x
512MB 1/3 1 2.7x
1 জিবি 7/12 1 1.6x
2 জিবি 1 1 1x
4GB 2 2 1x
8GB 2 2 1x
16 জিবি n/a 4 n/a

আপনি যদি আপনার ২ য় জেন ফাংশনগুলির জন্য 1 ম জেনার আচরণ পছন্দ করেন তবে বিশ্বব্যাপী বিকল্প হিসাবে 1 ম জেন ডিফল্ট সেট করুন:

Node.js পাইথন
// Turn off Firebase defaults
setGlobalOptions({ cpu: 'gcf_gen1' });
# Use 1st gen behavior
set_global_options(cpu="gcf_gen1")

সিপিইউ-নিবিড় ফাংশনগুলির জন্য, 2 য় জেন অতিরিক্ত সিপিইউ কনফিগার করার জন্য নমনীয়তা সরবরাহ করে। দেখানো হিসাবে আপনি প্রতি ফাংশন ভিত্তিতে সিপিইউ বাড়িয়ে তুলতে পারেন:

Node.js পাইথন
// Boost CPU in a function:
export const analyzeImage = onObjectFinalized({ cpu: 2 }, (event) => {
  // computer vision goes here
});
# Boost CPU in a function:
@storage_fn.on_object_finalized(cpu=2)
def analyze_image(event: storage_fn.CloudEvent):
# computer vision goes here
,


আপনি Firebase সিএলআই কমান্ডগুলি ব্যবহার করে বা আপনার ফাংশন উত্স কোডে রানটাইম বিকল্পগুলি সেট করে ফাংশনগুলি মোতায়েন, মুছতে এবং সংশোধন করতে পারেন।

ফাংশন স্থাপন

ফাংশন মোতায়েন করতে, এই Firebase সিএলআই কমান্ডটি চালান:

firebase deploy --only functions

ডিফল্টরূপে, Firebase সিএলআই একই সাথে আপনার উত্সের অভ্যন্তরে সমস্ত ফাংশন স্থাপন করে। যদি আপনার প্রকল্পে 5 টিরও বেশি ফাংশন থাকে তবে আমরা আপনাকে সুপারিশ করি যে আপনি সম্পাদিত কেবলমাত্র ফাংশনগুলি স্থাপনের জন্য নির্দিষ্ট ফাংশন নাম সহ --only পতাকা ব্যবহার করুন। এইভাবে নির্দিষ্ট ফাংশন স্থাপন করা মোতায়েনের প্রক্রিয়াটিকে গতি বাড়িয়ে তোলে এবং আপনাকে স্থাপনার কোটায় চলতে সহায়তা করে। যেমন:

firebase deploy --only functions:addMessage,functions:makeUppercase

বিপুল সংখ্যক ফাংশন মোতায়েন করার সময়, আপনি স্ট্যান্ডার্ড কোটা ছাড়িয়ে যেতে পারেন এবং এইচটিটিপি 429 বা 500 ত্রুটি বার্তা পেতে পারেন। এটি সমাধান করার জন্য, 10 বা তার চেয়ে কম গ্রুপে ফাংশনগুলি স্থাপন করুন।

উপলব্ধ কমান্ডগুলির সম্পূর্ণ তালিকার জন্য Firebase সিএলআই রেফারেন্সটি দেখুন।

ডিফল্টরূপে, Firebase সিএলআই উত্স কোডের জন্য functions/ ফোল্ডারে দেখায়। আপনি যদি পছন্দ করেন তবে আপনি কোডবেস বা একাধিক সেট ফাইলগুলিতে ফাংশনগুলি সংগঠিত করতে পারেন।

ফাংশন মুছুন

আপনি এই উপায়ে পূর্বে মোতায়েন করা ফাংশনগুলি মুছতে পারেন:

  • ফাংশন সহ Firebase সিএলআইতে স্পষ্টভাবে functions:delete
  • স্পষ্টভাবে Google Cloud কনসোলে
  • মোতায়েনের আগে উত্স থেকে ফাংশনটি সরিয়ে দিয়ে স্পষ্টভাবে

সমস্ত মুছে ফেলা অপারেশন আপনাকে উত্পাদন থেকে ফাংশন অপসারণের আগে নিশ্চিত করতে অনুরোধ করে।

Firebase সিএলআইতে সুস্পষ্ট ফাংশন মুছে ফেলা একাধিক আর্গুমেন্টের পাশাপাশি ফাংশন গ্রুপগুলিকে সমর্থন করে এবং আপনাকে একটি নির্দিষ্ট অঞ্চলে চলমান একটি ফাংশন নির্দিষ্ট করতে দেয়। এছাড়াও, আপনি নিশ্চিতকরণ প্রম্পটটি ওভাররাইড করতে পারেন।

# Delete all functions that match the specified name in all regions.
firebase functions:delete myFunction
# Delete a specified function running in a specific region.
firebase functions:delete myFunction --region us-east-1
# Delete more than one function
firebase functions:delete myFunction myOtherFunction
# Delete a specified functions group.
firebase functions:delete groupA
# Bypass the confirmation prompt.
firebase functions:delete myFunction --force

অন্তর্নিহিত ফাংশন মুছে ফেলার সাথে, firebase deploy আপনার উত্সকে পার্স করে এবং ফাইল থেকে সরানো যে কোনও ফাংশন উত্পাদন থেকে সরিয়ে দেয়।

একটি ফাংশনের নাম, অঞ্চল বা ট্রিগার পরিবর্তন করুন

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

একটি ফাংশন নাম পরিবর্তন

কোনও ফাংশনটির নাম পরিবর্তন করতে, আপনার উত্সটিতে ফাংশনের একটি নতুন নামকরণ সংস্করণ তৈরি করুন এবং তারপরে দুটি পৃথক স্থাপনা কমান্ড চালান। প্রথম কমান্ডটি সদ্য নামযুক্ত ফাংশন স্থাপন করে এবং দ্বিতীয় কমান্ডটি পূর্বে মোতায়েন করা সংস্করণটি সরিয়ে দেয়। উদাহরণস্বরূপ, আপনার যদি এইচটিটিপি-ট্রিগারযুক্ত ওয়েবহুক থাকে তবে আপনি নাম পরিবর্তন করতে চান, কোডটি নিম্নরূপ সংশোধন করুন:

Node.js পাইথন
// before
const {onRequest}  = require('firebase-functions/v2/https');

exports.webhook = onRequest((req, res) => {
    res.send("Hello");
});

// after
const {onRequest}  = require('firebase-functions/v2/https');

exports.webhookNew = onRequest((req, res) => {
    res.send("Hello");
});
# before
from firebase_functions import https_fn

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

# after
from firebase_functions import https_fn

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

তারপরে নতুন ফাংশন মোতায়েন করতে নিম্নলিখিত কমান্ডগুলি চালান:

# Deploy new function
firebase deploy --only functions:webhookNew

# Wait until deployment is done; now both functions are running

# Delete webhook
firebase functions:delete webhook

একটি ফাংশনের অঞ্চল বা অঞ্চল পরিবর্তন করুন

আপনি যদি উত্পাদন ট্র্যাফিক পরিচালনা করে এমন কোনও ফাংশনের জন্য নির্দিষ্ট অঞ্চলগুলি পরিবর্তন করে থাকেন তবে আপনি এই পদক্ষেপগুলি যথাযথভাবে সম্পাদন করে ইভেন্ট ক্ষতি রোধ করতে পারেন:

  1. ফাংশনটির নাম পরিবর্তন করুন এবং এর অঞ্চল বা অঞ্চলগুলিকে পছন্দসই হিসাবে পরিবর্তন করুন।
  2. নামকরণ করা ফাংশনটি মোতায়েন করুন, যার ফলস্বরূপ উভয় অঞ্চলের সেটগুলিতে অস্থায়ীভাবে একই কোডটি চালানো হয়।
  3. পূর্ববর্তী ফাংশন মুছুন।

উদাহরণস্বরূপ, যদি আপনার কাছে Cloud Firestore -ট্রিগারড ফাংশন থাকে যা বর্তমানে us-central1 এর ডিফল্ট ফাংশন অঞ্চলে রয়েছে এবং আপনি এটি asia-northeast1 এ স্থানান্তর করতে চান, তবে আপনাকে প্রথমে ফাংশনটির নামকরণ এবং অঞ্চলটি সংশোধন করার জন্য আপনার উত্স কোডটি সংশোধন করতে হবে।

Node.js পাইথন
// before
exports.firestoreTrigger = onDocumentCreated(
  "my-collection/{docId}",
  (event) => {},
);

// after
exports.firestoreTriggerAsia = onDocumentCreated(
  {
    document: "my-collection/{docId}",
    region: "asia-northeast1",
  },
  (event) => {},
);

আপডেট হওয়া কোডটি অঞ্চল সহ সঠিক ইভেন্ট ফিল্টার (এই ক্ষেত্রে document ) নির্দিষ্ট করা উচিত। আরও তথ্যের জন্য ক্লাউড ফাংশনগুলির অবস্থানগুলি দেখুন।

# Before
@firestore_fn.on_document_created("my-collection/{docId}")
def firestore_trigger(event):
    pass

# After
@firestore_fn.on_document_created("my-collection/{docId}",
                                  region="asia-northeast1")
def firestore_trigger_asia(event):
    pass

তারপরে দৌড় দিয়ে মোতায়েন:

firebase deploy --only functions:firestoreTriggerAsia

এখন দুটি অভিন্ন ফাংশন চলছে: firestoreTrigger us-central1 এ চলছে এবং asia-northeast1firestoreTriggerAsia চলছে।

তারপরে, firestoreTrigger মুছুন:

firebase functions:delete firestoreTrigger

এখন কেবলমাত্র একটি ফাংশন রয়েছে - firestoreTriggerAsia , যা asia-northeast1 এ চলছে।

একটি ফাংশনের ট্রিগার টাইপ পরিবর্তন করুন

আপনি সময়ের সাথে সাথে Cloud Functions for Firebase বিকাশ করার সাথে সাথে আপনাকে বিভিন্ন কারণে কোনও ফাংশনের ট্রিগার টাইপ পরিবর্তন করতে হবে। উদাহরণস্বরূপ, আপনি এক ধরণের Firebase Realtime Database বা Cloud Firestore ইভেন্ট থেকে অন্য ধরণের পরিবর্তন করতে চাইতে পারেন।

কেবল উত্স কোড পরিবর্তন করে এবং firebase deploy চালিয়ে কোনও ফাংশনের ইভেন্টের ধরণটি পরিবর্তন করা সম্ভব নয়। ত্রুটিগুলি এড়াতে, এই পদ্ধতি দ্বারা কোনও ফাংশনের ট্রিগার প্রকার পরিবর্তন করুন:

  1. কাঙ্ক্ষিত ট্রিগার প্রকারের সাথে একটি নতুন ফাংশন অন্তর্ভুক্ত করতে উত্স কোডটি সংশোধন করুন।
  2. ফাংশনটি মোতায়েন করুন, যার ফলে অস্থায়ীভাবে পুরানো এবং নতুন উভয় ফাংশন চলমান হয়।
  3. Firebase সিএলআই ব্যবহার করে উত্পাদন থেকে পুরানো ফাংশনটি স্পষ্টভাবে মুছুন।

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

Node.js পাইথন
// before
const {onObjectDeleted} = require("firebase-functions/v2/storage");

exports.objectDeleted = onObjectDeleted((event) => {
    // ...
});

// after
const {onObjectArchived} = require("firebase-functions/v2/storage");

exports.objectArchived = onObjectArchived((event) => {
    // ...
});
# before
from firebase_functions import storage_fn

@storage_fn.on_object_deleted()
def object_deleted(event):
  # ...

# after 
from firebase_functions import storage_fn

@storage_fn.on_object_archived()
def object_archived(event):
  # ...

তারপরে পুরানো ফাংশনটি মুছে ফেলার আগে প্রথমে নতুন ফাংশনটি তৈরি করতে নিম্নলিখিত কমান্ডগুলি চালান:

# Create new function objectArchived
firebase deploy --only functions:objectArchived

# Wait until deployment is done; now both objectDeleted and objectArchived are running

# Delete objectDeleted
firebase functions:delete objectDeleted

রানটাইম বিকল্পগুলি সেট করুন

Cloud Functions for Firebase আপনাকে নোড.জেএস রানটাইম সংস্করণ এবং প্রতি-ফাংশন সময়সীমা, মেমরি বরাদ্দ এবং ন্যূনতম/সর্বাধিক ফাংশন দৃষ্টান্তের মতো রানটাইম বিকল্পগুলি নির্বাচন করতে দেয়।

সেরা অনুশীলন হিসাবে, এই বিকল্পগুলি (নোড.জেএস সংস্করণ ব্যতীত) ফাংশন কোডের অভ্যন্তরে একটি কনফিগারেশন অবজেক্টে সেট করা উচিত। এই RuntimeOptions অবজেক্টটি আপনার ফাংশনের রানটাইম বিকল্পগুলির জন্য সত্যের উত্স এবং এটি অন্য কোনও পদ্ধতির মাধ্যমে সেট করা বিকল্পগুলি (যেমন গুগল ক্লাউড কনসোল বা জিসিএলউড সিএলআই) এর মাধ্যমে সেট করা হবে।

যদি আপনার বিকাশের ওয়ার্কফ্লোতে গুগল ক্লাউড কনসোল বা GCloud CLI এর মাধ্যমে ম্যানুয়ালি রানটাইম বিকল্পগুলি সেট করা জড়িত থাকে এবং আপনি চান না যে এই মানগুলি প্রতিটি মোতায়েনের উপর ওভাররাইড করা হোক, তবে preserveExternalChanges বিকল্পগুলি true সেট করুন। এই বিকল্পটি true সেট করে, ফায়ারবেস আপনার কোডে সেট করা রানটাইম বিকল্পগুলি আপনার ফাংশনের বর্তমানে-মীমাংসিত সংস্করণের সেটিংসের সাথে নিম্নলিখিত অগ্রাধিকারের সাথে একীভূত করে:

  1. বিকল্প ফাংশন কোডে সেট করা আছে: বাহ্যিক পরিবর্তনগুলি ওভাররাইড করুন।
  2. ফাংশন কোডগুলিতে বিকল্পটি RESET_VALUE করতে সেট করা হয়েছে: ডিফল্ট মান সহ বাহ্যিক পরিবর্তনগুলি ওভাররাইড করুন।
  3. বিকল্প ফাংশন কোডে সেট করা নেই, তবে বর্তমানে মোতায়েন করা ফাংশনে সেট করা আছে: স্থাপন করা ফাংশনে নির্দিষ্ট করা বিকল্পটি ব্যবহার করুন।

preserveExternalChanges: true বিকল্পের প্রস্তাব দেওয়া হয় না কারণ আপনার কোডটি আপনার ফাংশনগুলির জন্য রানটাইম বিকল্পগুলির জন্য আর সত্যের সম্পূর্ণ উত্স হবে না। আপনি যদি এটি ব্যবহার করেন তবে গুগল ক্লাউড কনসোলটি পরীক্ষা করুন বা কোনও ফাংশনের সম্পূর্ণ কনফিগারেশন দেখতে GCloud সিএলআই ব্যবহার করুন।

Node.js সংস্করণ সেট করুন

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

  • নোড.জেএস 22 (পূর্বরূপ)
  • Node.js 20
  • Node.js 18

নোড.জেএস সংস্করণ 14 এবং 16 অবমূল্যায়ন করা হয়েছে এবং 2025 এর প্রথম দিকে এটি বাতিল করা হবে। এই অবমূল্যায়িত সংস্করণগুলির সাথে স্থাপনা অক্ষম করা হয়েছে।

নোড.জেএস সংস্করণ সেট করতে:

আপনি শুরু করার সময় আপনার functions/ ডিরেক্টরিতে তৈরি করা package.json ফাইলটিতে engines ক্ষেত্রে সংস্করণটি সেট করতে পারেন। উদাহরণস্বরূপ, কেবলমাত্র সংস্করণ 18 ব্যবহার করতে, package.json এ এই লাইনটি সম্পাদনা করুন:

  "engines": {"node": "20"}

আপনি যদি ইয়ার্ন প্যাকেজ ম্যানেজার ব্যবহার করছেন বা engines ক্ষেত্রের জন্য অন্যান্য নির্দিষ্ট প্রয়োজনীয়তা ব্যবহার করছেন তবে আপনি firebase.json -এ Cloud Functions জন্য Firebase এসডিকে জন্য রানটাইম সেট করতে পারেন: পরিবর্তে:

  {
    "functions": {
      "runtime": "nodejs18" // or nodejs20
    }
  }

সিএলআই আপনি package.json আলাদাভাবে সেট করা যে কোনও মান বা ব্যাপ্তির চেয়ে firebase.json -এ মান সেটটি ব্যবহার করেন।

আপনার নোড.জেএস রানটাইম আপগ্রেড করুন

আপনার নোড.জেএস রানটাইম আপগ্রেড করতে:

  1. আপনার প্রকল্পটি ব্লেজ প্রাইসিং পরিকল্পনায় রয়েছে তা নিশ্চিত করুন।
  2. নিশ্চিত হয়ে নিন যে আপনি Firebase সিএলআই ভি 11.18.0 বা তার পরে ব্যবহার করছেন।
  3. আরম্ভের সময় আপনার functions/ ডিরেক্টরিতে তৈরি করা package.json ফাইলটিতে engines মান পরিবর্তন করুন। উদাহরণস্বরূপ, আপনি যদি সংস্করণ 18 থেকে সংস্করণ 20 এ আপগ্রেড করছেন তবে এন্ট্রিটি দেখতে হবে: "engines": {"node": "20"}
  4. Ally চ্ছিকভাবে, Firebase Local Emulator Suite ব্যবহার করে আপনার পরিবর্তনগুলি পরীক্ষা করুন।
  5. সমস্ত ফাংশন পুনরায় নিয়োগ করুন।

পাইথন সংস্করণ সেট করুন

Cloud Functions সংস্করণগুলির জন্য Firebase এসডিকে 12.0.0 এবং উচ্চতর পাইথন রানটাইম নির্বাচনের অনুমতি দেয়। firebase.json এ রানটাইম সংস্করণটি সেট করুন:

  {
    "functions": {
      "runtime": "python310" // or python311
    }
  }

স্কেলিং আচরণ নিয়ন্ত্রণ করুন

ডিফল্টরূপে, Cloud Functions for Firebase আগত অনুরোধের সংখ্যার ভিত্তিতে চলমান দৃষ্টান্তের সংখ্যা স্কেল করে, হ্রাস ট্র্যাফিকের সময়ে সম্ভাব্যভাবে শূন্য দৃষ্টান্তগুলিতে স্কেলিং করে। তবে, যদি আপনার অ্যাপ্লিকেশনটির হ্রাস হ্রাসের প্রয়োজন হয় এবং আপনি ঠান্ডা শুরুগুলির সংখ্যা সীমাবদ্ধ করতে চান তবে আপনি ন্যূনতম সংখ্যক ধারক উদাহরণগুলি উষ্ণ রাখতে এবং অনুরোধগুলি পরিবেশন করার জন্য প্রস্তুত করে নির্দিষ্ট করে এই ডিফল্ট আচরণটি পরিবর্তন করতে পারেন।

একইভাবে, আপনি আগত অনুরোধগুলির প্রতিক্রিয়া হিসাবে দৃষ্টান্তগুলির স্কেলিং সীমাবদ্ধ করতে সর্বাধিক সংখ্যা সেট করতে পারেন। আপনার ব্যয়গুলি নিয়ন্ত্রণ করতে বা কোনও ডাটাবেসে যেমন কোনও ব্যাকিং পরিষেবাতে সংযোগের সংখ্যা সীমাবদ্ধ করার উপায় হিসাবে এই সেটিংটি ব্যবহার করুন।

এই সেটিংসটি প্রতি-অনুপ্রেরণা সম্মতি সেটিংসের সাথে একসাথে ব্যবহার করে (২ য় জেনে নতুন), আপনি আপনার ক্রিয়াকলাপগুলির জন্য স্কেলিং আচরণটি নিয়ন্ত্রণ করতে এবং টিউন করতে পারেন। আপনার অ্যাপ্লিকেশন এবং ফাংশনের প্রকৃতি নির্ধারণ করবে যে কোন সেটিংস সবচেয়ে ব্যয়বহুল কার্যকর এবং এর ফলে সর্বোত্তম পারফরম্যান্স হবে।

কম ট্র্যাফিক সহ কিছু অ্যাপ্লিকেশনগুলির জন্য, মাল্টি-কনকারেন্সি ছাড়াই একটি কম সিপিইউ বিকল্পটি সর্বোত্তম। অন্যদের জন্য যেখানে ঠান্ডা শুরু একটি সমালোচনামূলক সমস্যা, উচ্চ সম্মতি এবং ন্যূনতম উদাহরণ স্থাপনের অর্থ হ'ল ট্র্যাফিকের বড় স্পাইকগুলি পরিচালনা করার জন্য দৃষ্টান্তগুলির একটি সেট সর্বদা উষ্ণ রাখা হয়।

খুব কম ট্র্যাফিক প্রাপ্ত ছোট-স্কেল অ্যাপ্লিকেশনগুলির জন্য, উচ্চ সম্মতি সহ কম সর্বাধিক উদাহরণ স্থাপনের অর্থ হ'ল অ্যাপটি অতিরিক্ত ব্যয় ছাড়াই ট্র্যাফিকের বিস্ফোরণগুলি পরিচালনা করতে পারে। তবে, মনে রাখবেন যে যখন সর্বাধিক দৃষ্টান্তগুলি খুব কম সেট করা থাকে তখন সিলিংটি পৌঁছে গেলে অনুরোধগুলি বাদ দেওয়া যেতে পারে।

একযোগে অনুরোধের অনুমতি দিন

Cloud Functions for Firebase , প্রতিটি উদাহরণ একবারে একটি অনুরোধ পরিচালনা করতে পারে, সুতরাং স্কেলিং আচরণটি কেবল ন্যূনতম এবং সর্বাধিক দৃষ্টান্ত সেটিংসের সাথে সেট করা হয়েছিল। উদাহরণগুলির সংখ্যা নিয়ন্ত্রণ করার পাশাপাশি, Cloud Functions for Firebase আপনি প্রতিটি উদাহরণ একই সাথে concurrency বিকল্পের সাথে পরিবেশন করতে পারে এমন অনুরোধের সংখ্যা নিয়ন্ত্রণ করতে পারেন। সম্মতির জন্য ডিফল্ট মান 80, তবে আপনি এটি 1 এবং 1000 এর মধ্যে যে কোনও পূর্ণসংখ্যায় সেট করতে পারেন।

উচ্চতর সম্মতি সেটিংস সহ ফাংশনগুলি ঠান্ডা শুরু ছাড়াই ট্র্যাফিকের স্পাইকগুলি শোষণ করতে পারে কারণ প্রতিটি উদাহরণে সম্ভবত কিছু হেডরুম রয়েছে। যদি কোনও উদাহরণ 50 টি সমবর্তী অনুরোধগুলি পরিচালনা করার জন্য কনফিগার করা থাকে তবে বর্তমানে এটি কেবল 25 টি পরিচালনা করছে, এটি শীতল সূচনার জন্য কোনও নতুন উদাহরণের প্রয়োজন ছাড়াই 25 অতিরিক্ত অনুরোধের স্পাইক পরিচালনা করতে পারে। বিপরীতে, মাত্র 1 এর একটি সম্মতি সেটিং সহ, অনুরোধগুলিতে স্পাইকটি 25 টি শীতল শুরু হতে পারে।

এই সরলিকৃত দৃশ্যটি সম্মতির সম্ভাব্য দক্ষতা অর্জনকে প্রদর্শন করে। বাস্তবে, দক্ষতার অনুকূলকরণের জন্য স্কেলিং আচরণ এবং সম্মতির সাথে ঠান্ডা শুরু হ্রাস আরও জটিল। Cloud Functions for Firebase সম্মতি Cloud Run দ্বারা চালিত হয় এবং Cloud Run কনটেইনার উদাহরণ অটোস্কেলিংয়ের নিয়ম অনুসরণ করে।

Cloud Functions for Firebase উচ্চতর সম্মতি সেটিংসের সাথে পরীক্ষা করার সময়, নিম্নলিখিতগুলি মনে রাখবেন:

  • উচ্চতর সম্মতি সেটিংসে ব্যবহারিক সীমাতে পৌঁছানো পর্যন্ত সর্বোত্তম পারফরম্যান্সের জন্য উচ্চতর সিপিইউ এবং র‌্যামের প্রয়োজন হতে পারে। একটি ফাংশন যা ভারী চিত্র বা ভিডিও প্রসেসিং করে, উদাহরণস্বরূপ, এর সিপিইউ এবং র‌্যাম সেটিংস সর্বাধিক করা হলেও 1000 সমবর্তী অনুরোধগুলি পরিচালনা করার জন্য সংস্থানগুলির অভাব হতে পারে।
  • যেহেতু Cloud Functions for Firebase Cloud Run দ্বারা চালিত, তাই আপনি সম্মতি অনুকূলকরণের জন্য Google Cloud গাইডেন্সেও উল্লেখ করতে পারেন।
  • উত্পাদনে মাল্টিকনকারেন্সিতে স্যুইচ করার আগে পরীক্ষার পরিবেশে মাল্টিকনকারেন্সি পুরোপুরি পরীক্ষা করার বিষয়টি নিশ্চিত করুন।

ন্যূনতম সংখ্যক উদাহরণ উষ্ণ রাখুন

আপনি উত্স কোডে কোনও ফাংশনের জন্য ন্যূনতম সংখ্যা নির্ধারণ করতে পারেন। উদাহরণস্বরূপ, এই ফাংশনটি উষ্ণ রাখার জন্য সর্বনিম্ন 5 টি উদাহরণ সেট করে:

Node.js পাইথন
const { onCall } = require("firebase-functions/v2/https");

exports.getAutocompleteResponse = onCall(
  {
    // Keep 5 instances warm for this latency-critical function
    minInstances: 5,
  },
  (event) => {
    // Autocomplete user’s search term
  }
);
@https_fn.on_call(min_instances=5)
def get_autocomplete_response(event: https_fn.CallableRequest) -> https_fn.Response:

Here are some things to consider when setting a minimum instances value:

  • If Cloud Functions for Firebase scales your app above your setting, you'll experience a cold start for each instance above that threshold.
  • Cold starts have the most severe effect on apps with spiky traffic. If your app has spiky traffic and you set a value high enough that cold starts are reduced on each traffic increase, you'll see significantly reduced latency. For apps with constant traffic, cold starts are not likely to severely affect performance.
  • Setting minimum instances can make sense for production environments, but should usually be avoided in testing environments. To scale to zero in your test project but still reduce cold starts in your production project, you can set a minimum instances value in your parameterized configuration:

    Node.js পাইথন
    const functions = require('firebase-functions/v1');
    const { defineInt, defineString } = require('firebase-functions/params');
    
    // Define some parameters
    const minInstancesConfig = defineInt('HELLO_WORLD_MININSTANCES');
    const welcomeMessage = defineString('WELCOME_MESSAGE');
    
    // To use configured parameters inside the config for a function, provide them 
    // directly. To use them at runtime, call .value() on them.
    export const helloWorld = functions.runWith({ minInstances: minInstancesConfig}).https.onRequest(
      (req, res) => {
        res.send(`${welcomeMessage.value()}! I am a function.`);
      }
    );
    
    MIN_INSTANCES = params.IntParam("HELLO_WORLD_MININSTANCES")
    WELCOME_MESSAGE = params.StringParam("WELCOME_MESSAGE")
    
    @https_fn.on_request(min_instances=MIN_INSTANCES.value())
    def get_autocomplete_response(event: https_fn.Request) -> https_fn.Response:
        return https_fn.Response(f"{WELCOME_MESSAGE.value()} I'm a function.")
    

Limit the maximum number of instances for a function

You can set a value for maximum instances in function source code. For example, this function sets a limit of 100 instances in order to not overwhelm a hypothetical legacy database:

Node.js পাইথন
const { onMessagePublished } = require("firebase-functions/v2/pubsub");

exports.mirrorevents = onMessagePublished(
  { topic: "topic-name", maxInstances: 100 },
  (event) => {
    // Connect to legacy database
  }
);
@pubsub_fn.on_message_published(topic="topic-name", max_instances=100)
def mirrorevents(event: pubsub_fn.CloudEvent):
#  Connect to legacy database

If an HTTP function is scaled up to the maximum instances limit, new requests are queued for 30 seconds and then rejected with a response code of 429 Too Many Requests if no instance is available by then.

To learn more about best practices for using maximum instances settings, check out these best practices for setting maximum instances .

Set timeout and memory allocation

In some cases, your functions may have special requirements for a long timeout value or a large allocation of memory. You can set these values either in the Google Cloud console or in the function source code (Firebase only).

To set memory allocation and timeout in functions source code, use the global options for memory and timeout seconds to customize the virtual machine running your functions. For example, this Cloud Storage function uses 1GiB of memory and times out after 300 seconds:

Node.js পাইথন
exports.convertLargeFile = onObjectFinalized({
  timeoutSeconds: 300,
  memory: "1GiB",
}, (event) => {
  // Do some complicated things that take a lot of memory and time
});
@storage_fn.on_object_finalized(timeout_sec=300, memory=options.MemoryOption.GB_1)
def convert_large_file(event: storage_fn.CloudEvent):
# Do some complicated things that take a lot of memory and time.

The maximum value for timeout seconds is 540 , or 9 minutes.

To set memory allocation and timeout in the Google Cloud console:

  1. In the Google Cloud console select Cloud Functions for Firebase from the left menu.
  2. Select a function by clicking on its name in the functions list.
  3. Click the Edit icon in the top menu.
  4. Select a memory allocation from the drop-down menu labeled Memory allocated .
  5. Click More to display the advanced options, and enter a number of seconds in the Timeout text box.
  6. Click Save to update the function.

Override CPU defaults

Up to 2GB of memory allocated, each function in Cloud Functions for Firebase (2nd gen) defaults to one CPU, and then increases to 2 CPU for 4 and 8GB. Note that this is significantly different from 1st gen default behavior in ways that could lead to slightly higher costs for low-memory functions as expressed in the following table:

RAM allocated Version 1 default CPU (fractional) Version 2 default CPU Price increase per ms
128MB 1/12 1 10.5x
256MB 1/6 1 5.3x
512MB 1/3 1 2.7x
1 জিবি 7/12 1 1.6x
2 জিবি 1 1 1x
4GB 2 2 1x
8GB 2 2 1x
16 জিবি n/a 4 n/a

If you prefer 1st gen behavior for your 2nd gen functions, set 1st gen defaults as a global option:

Node.js পাইথন
// Turn off Firebase defaults
setGlobalOptions({ cpu: 'gcf_gen1' });
# Use 1st gen behavior
set_global_options(cpu="gcf_gen1")

For CPU-intensive functions, 2nd gen provides the flexibility to configure additional CPU. You can boost CPU on a per-function basis as shown:

Node.js পাইথন
// Boost CPU in a function:
export const analyzeImage = onObjectFinalized({ cpu: 2 }, (event) => {
  // computer vision goes here
});
# Boost CPU in a function:
@storage_fn.on_object_finalized(cpu=2)
def analyze_image(event: storage_fn.CloudEvent):
# computer vision goes here