ফাংশন ম্যানেজ করা (১ম জেনারেশন)

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

ফাংশন ডিপ্লয় করুন

ফাংশন ডিপ্লয় করতে, এই Firebase CLI কমান্ড রান করুন:

firebase deploy --only functions

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

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

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

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

ডিফল্ট হিসেবে, Firebase CLI, সোর্স কোডের জন্য functions/ ফোল্ডারে খোঁজে। আপনি চাইলে, কোডবেস বা ফাইলের একাধিক সেটে ফাংশন সাজাতে পারেন।

ফাংশন মুছুন

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

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

প্রোডাকশন থেকে ফাংশন সরানোর আগে সব মুছে ফেলার অপারেশন আপনাকে কনফার্ম করতে বলে।

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

  • সব অঞ্চলে নির্দিষ্ট নামের সাথে মেলে এমন সব ফাংশন মুছে দেয়:

    firebase functions:delete FUNCTION-1_NAME

  • ডিফল্ট নয় এমন অঞ্চলে চলা নির্দিষ্ট ফাংশন মুছে দেয়:

    firebase functions:delete FUNCTION-1_NAME --region REGION_NAME

  • একাধিক ফাংশন মুছে দেয়:

    firebase functions:delete FUNCTION-1_NAME FUNCTION-2_NAME

  • নির্দিষ্ট ফাংশন গ্রুপ মুছে দেয়:

    firebase functions:delete GROUP_NAME

  • কনফার্মেশন প্রম্পট বাইপাস করে:

    firebase functions:delete FUNCTION-1_NAME --force

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

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

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

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

কোনও ফাংশনের নাম পরিবর্তন করতে, আপনার সোর্সে ফাংশনের নাম পরিবর্তন করা নতুন ভার্সন তৈরি করুন এবং তারপর দুটি আলাদা ডিপ্লয়মেন্ট কমান্ড রান করুন। প্রথম কমান্ডটি নতুন নামযুক্ত ফাংশনটি ডিপ্লয় করে এবং দ্বিতীয় কমান্ডটি আগে ডিপ্লয় করা ভার্সনটি সরিয়ে দেয়। যেমন, আপনার যদি webhook নামের Node.js ফাংশন থাকে যেটি আপনি webhookNew-এ পরিবর্তন করতে চান, তাহলে কোডটি এইভাবে সংশোধন করুন:

// before
const functions = require('firebase-functions/v1');

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

// after
const functions = require('firebase-functions/v1');

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

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

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

# Wait until deployment is done; now both webhookNew and webhook are running

# Delete webhook
firebase functions:delete webhook

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

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

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

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

// before
const functions = require('firebase-functions/v1');

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

// after
const functions = require('firebase-functions/v1');

exports.webhookAsia = functions
    .region('asia-northeast1')
    .https.onRequest((req, res) => {
            res.send("Hello");
    });

তারপর এটি রান করে ডিপ্লয় করুন:

firebase deploy --only functions:webhookAsia

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

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

firebase functions:delete webhook

এখন শুধু একটি ফাংশন আছে - webhookAsia, যা asia-northeast1-এ চলছে।

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

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

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

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

যেমন, আপনার যদি objectChanged নামের Node.js ফাংশন থাকে যাতে লিগ্যাসি onChange ইভেন্টের ধরন আছে এবং আপনি এটি onFinalize-এ পরিবর্তন করতে চান, তাহলে প্রথমে ফাংশনের নাম পরিবর্তন করুন এবং onFinalize ইভেন্টের ধরন পেতে এটি এডিট করুন।

// before
const functions = require('firebase-functions/v1');

exports.objectChanged = functions.storage.object().onChange((object) => {
    return console.log('File name is: ', object.name);
});

// after
const functions = require('firebase-functions/v1');

exports.objectFinalized = functions.storage.object().onFinalize((object) => {
    return console.log('File name is: ', object.name);
});

তারপর পুরনো ফাংশন মুছে দেওয়ার আগে নতুন ফাংশন তৈরি করতে এই কমান্ড রান করুন:

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

# Wait until deployment is done; now both objectChanged and objectFinalized are running

# Delete objectChanged
firebase functions:delete objectChanged

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

Cloud Functions for Firebase আপনাকে Node.js রানটাইম ভার্সন এবং প্রতি-ফাংশন টাইমআউট, মেমরি অ্যালোকেশন এবং সর্বনিম্ন/সর্বাধিক ফাংশন ইনস্ট্যান্সের মতো রানটাইম বিকল্প বেছে নিতে দেয়।

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

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

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

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

Node.js ভার্সন সেট করুন

Firebase SDK for Cloud Functions-এর মাধ্যমে Node.js রানটাইম বেছে নেওয়া যায়। আপনি কোনও প্রোজেক্টের সব ফাংশন রানটাইম এনভায়রনমেন্টে চালানোর জন্য বেছে নিতে পারেন, যা এই সমর্থিত Node.js ভার্সনের মধ্যে একটির সাথে সম্পর্কিত:

  • Node.js 22
  • Node.js 20
  • Node.js 18 (বন্ধ করা হয়েছে)

Node.js-এর এইসব ভার্সনের জন্য চলমান সহায়তা সংক্রান্ত গুরুত্বপূর্ণ তথ্যের জন্য সহায়তার শিডিউল দেখুন।

Node.js ভার্সন সেট করতে:

আপনি package.json ফাইলের engines ফিল্ডে ভার্সন সেট করতে পারবেন, যা আপনার functions/ ডিরেক্টরিতে ইনিশিয়ালাইজেশনের সময় তৈরি করা হয়েছে। যেমন, শুধু ২০ ভার্সন ব্যবহার করতে, package.json-এ এই লাইনটি এডিট করুন:

  "engines": {"node": "22"}

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

  {
    "functions": {
      "runtime": "nodejs22"
    }
  }

CLI, firebase.json-এ সেট করা ভ্যালু ব্যবহার করে, package.json-এ আপনার আলাদাভাবে সেট করা কোনও ভ্যালু বা রেঞ্জের তুলনায়।

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

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

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

Node.js মডিউল সিস্টেম বেছে নিন

Node.js-এ ডিফল্ট মডিউল সিস্টেম হল CommonJS (CJS), তবে বর্তমান Node.js ভার্সনে ECMAScript Modules (ESM)-ও কাজ করে। Cloud Functions-এ দুটিই কাজ করে।

ডিফল্ট হিসেবে, আপনার ফাংশন CommonJS ব্যবহার করে। এর অর্থ হল, ইমপোর্ট ও এক্সপোর্ট এইরকম দেখায়:

const functions = require("firebase-functions/v1");

exports.helloWorld = functions.https.onRequest(async (req, res) => res.send("Hello from Firebase!"));

পরিবর্তে ESM ব্যবহার করতে, আপনার package.json ফাইলে "type": "module" ফিল্ড সেট করুন :

  {
   ...
   "type": "module",
   ...
  }

আপনি এটি সেট করার পরে, ESM import এবং export সিনট্যাক্স ব্যবহার করুন:

import functions from "firebase-functions/v1";

export const helloWorld = functions.https.onRequest(async (req, res) => res.send("Hello from Firebase!"));

দুটি মডিউল সিস্টেমই সম্পূর্ণভাবে কাজ করে। আপনার প্রোজেক্টের জন্য যেটি সবচেয়ে উপযুক্ত সেটি বেছে নিতে পারেন। Node.js-এর মডিউল সংক্রান্ত ডকুমেন্টেশন থেকে আরও জানুন।

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

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

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

কোল্ড স্টার্টের সংখ্যা কমানো

সোর্স কোডে কোনও ফাংশনের জন্য ন্যূনতম ইনস্ট্যান্সের সংখ্যা সেট করতে, runWith পদ্ধতি ব্যবহার করুন। এই পদ্ধতিটি JSON অবজেক্ট গ্রহণ করে যা RuntimeOptions ইন্টারফেসের সাথে সামঞ্জস্যপূর্ণ, যা minInstances-এর মান নির্ধারণ করে। যেমন, এই ফাংশনটি ওয়ার্ম রাখার জন্য ন্যূনতম ৫টি ইনস্ট্যান্স সেট করে:

exports.getAutocompleteResponse = functions
    .runWith({
      // Keep 5 instances warm for this latency-critical function
      minInstances: 5,
    })
    .https.onCall((data, context) => {
      // Autocomplete a user's search term
    });

minInstances-এর জন্য ভ্যালু সেট করার সময় এইসব বিষয় বিবেচনা করতে হবে:

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

    // Get Firebase project id from `FIREBASE_CONFIG` environment variable
    const envProjectId = JSON.parse(process.env.FIREBASE_CONFIG).projectId;
    
    exports.renderProfilePage = functions
        .runWith({
          // Keep 5 instances warm for this latency-critical function
          // in production only. Default to 0 for test projects.
          minInstances: envProjectId === "my-production-project" ? 5 : 0,
        })
        .https.onRequest((req, res) => {
          // render some html
        });
    

কোনও ফাংশনের জন্য ইনস্ট্যান্সের সর্বাধিক সংখ্যা সীমিত করুন

ফাংশন সোর্স কোডে সর্বাধিক ইনস্ট্যান্স সেট করতে, runWith পদ্ধতি ব্যবহার করুন। এই পদ্ধতিটি RuntimeOptions ইন্টারফেসের সাথে মানানসই একটি JSON অবজেক্ট গ্রহণ করে, যা maxInstances-এর জন্য মান নির্ধারণ করে। যেমন, এই ফাংশনটি ১০০টি ইনস্ট্যান্সের সীমা সেট করে যাতে একটি কাল্পনিক লিগ্যাসি ডেটাবেসকে ওভারহোয়েল না করা যায়:

exports.mirrorOrdersToLegacyDatabase = functions
    .runWith({
      // Legacy database only supports 100 simultaneous connections
      maxInstances: 100,
    })
    .firestore.document("orders/{orderId}")
    .onWrite((change, context) => {
      // Connect to legacy database
    });

HTTP ফাংশন maxInstances সীমায় স্কেল আপ করা হলে, নতুন অনুরোধ ৩০ সেকেন্ডের জন্য সারিতে রাখা হয় এবং তারপরেও কোনও ইনস্ট্যান্স উপলভ্য না হলে 429 Too Many Requests রেসপন্স কোড সহ বাতিল করা হয়।

সর্বাধিক ইনস্ট্যান্স সেটিংস ব্যবহার করার পেশাদার পদ্ধতি সম্পর্কে আরও জানতে, maxInstances ব্যবহার করার পেশাদার পদ্ধতি দেখুন।

পরিষেবা অ্যাকাউন্ট সেট করা

ফার্স্ট জেনারেশন ফাংশনের জন্য ডিফল্ট পরিষেবা অ্যাকাউন্ট, PROJECT_ID@appspot.gserviceaccount.com (নাম App Engine ডিফল্ট পরিষেবা অ্যাকাউন্ট), আপনাকে অন্যান্য Firebase এবং Google Cloud পরিষেবার সাথে ইন্টার‍্যাক্ট করার অনুমতি দেওয়ার জন্য এটির কাছে অনুমতির একটি বিস্তৃত সেট রয়েছে।

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

const functions = require("firebase-functions/v1");

exports.helloWorld = functions
    .runWith({
        // This function doesn't access other Firebase project resources, so it uses a limited service account.
        serviceAccount:
            "my-limited-access-sa@", // or prefer the full form: "my-limited-access-sa@my-project.iam.gserviceaccount.com"
    })
    .https.onRequest((request, response) => {
        response.send("Hello from Firebase!");
    });

টাইম-আউট ও মেমরি অ্যালোকেশন সেট করা

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

ফাংশন সোর্স কোডে মেমরি অ্যালোকেশন ও টাইমআউট সেট করতে, Cloud Functions 2.0.0-এর জন্য Firebase SDK-তে চালু করা runWith প্যারামিটার ব্যবহার করুন। এই রানটাইম বিকল্পটি RuntimeOptions ইন্টারফেসের সাথে মানানসই JSON অবজেক্ট গ্রহণ করে, যা timeoutSeconds এবং memory-এর জন্য ভ্যালু নির্ধারণ করে। যেমন, এই স্টোরেজ ফাংশন ১ জিবি মেমরি ব্যবহার করে এবং ৩০০ সেকেন্ড পরে টাইম-আউট হয়ে যায়:

exports.convertLargeFile = functions
    .runWith({
      // Ensure the function has enough memory and time
      // to process large files
      timeoutSeconds: 300,
      memory: "1GB",
    })
    .storage.object()
    .onFinalize((object) => {
      // Do some complicated things that take a lot of memory and time
    });

timeoutSeconds-এর জন্য সর্বাধিক ভ্যালু হল 540 বা ৯ মিনিট। কোনও ফাংশনের জন্য বরাদ্দ করা মেমরির পরিমাণ সেই ফাংশনের জন্য বরাদ্দ করা CPU-এর সাথে সম্পর্কিত, যেমন memory-এর জন্য সঠিক ভ্যালুর এই তালিকায় বিস্তারিতভাবে উল্লেখ করা হয়েছে:

  • 128MB — ২০০ মেগাহার্টজ
  • 256MB — ৪০০ মেগাহার্টজ
  • 512MB — ৮০০MHz
  • 1GB — ১.৪ GHz
  • 2GB — ২.৪ GHz
  • 4GB — ৪.৮ GHz
  • 8GB — ৪.৮ GHz

Google Cloud কনসোলে মেমরি অ্যালোকেশন ও টাইমআউট সেট করতে:

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