ফাংশন স্থাপনা এবং রানটাইম বিকল্পগুলি পরিচালনা করুন

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

ফাংশন স্থাপন করুন

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

$ firebase deploy --only functions

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

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

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

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

ডিফল্টরূপে, Firebase CLI দেখায় functions/ উত্স কোডের জন্য ফোল্ডার। আপনি নিম্নলিখিত পংক্তিগুলি যোগ করে অন্য ফোল্ডারে নির্দিষ্ট করতে পারেন firebase.json :

"functions": {
  "source": "another-folder"
}

ফাংশন মুছুন

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

  • স্পষ্টভাবে সঙ্গে Firebase CLI মধ্যে functions:delete
  • স্পষ্টভাবে মধ্যে প্রসঙ্গ মেনু ব্যবহার করে ফাংশন তালিকা Firebase কনসোলে
  • implictly থেকে ফাংশন সরিয়ে index.js স্থাপনার পূর্বে।

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

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 parses index.js উৎপাদন থেকে এবং অপসারণ কোনও ফাংশন যে ফাইল থেকে সরিয়ে দেওয়া হয়েছে।

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

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

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

একটি ফাংশন নামান্তর করতে, ফাংশন একটি নতুন নতুন নামকরণ সংস্করণ তৈরি index.js এবং দুটি পৃথক স্থাপনার কমান্ড তারপর চালানো। প্রথম কমান্ডটি নতুন নামযুক্ত ফাংশন স্থাপন করে এবং দ্বিতীয় কমান্ডটি পূর্বে স্থাপন করা সংস্করণটিকে সরিয়ে দেয়। উদাহরণস্বরূপ, যদি আপনি একটি ফাংশন বলা আছে যদি webhook আছে যাতে আপনি পরিবর্তন করতে চান webhookNew , কোড সংশোধন নিম্নরূপ:

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

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

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

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');

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

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

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

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

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

  • উত্তরাধিকার সংগ্রহস্থল থেকে পরিবর্তন onChange ইভেন্ট onFinalize , onDelete , onArchive এবং onMetadataUpdate । (এই সম্পর্কে আরো জানুন v1 এ বা v2 আপগ্রেড গাইডে বিটা )।
  • যেমন জেনেরিক যেমন অন্য এক, এর Firebase রিয়েলটাইম ডাটাবেস বা ক্লাউড Firestore ঘটনার এক ধরনের থেকে পরিবর্তন onWrite ঝুরা ইভেন্ট onCreate ইভেন্ট।

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

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

উদাহরণস্বরূপ, যদি আপনি ছিল একটি ফাংশন objectChanged যে লিগ্যাসি হয়েছে onChange ঘটনা ধরন, এবং তোমাদের তা পরিবর্তন করতে চান onFinalize , প্রথম ফাংশন এবং সম্পাদন করা এটা আছে নামান্তর onFinalize ঘটনা প্রকার।

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

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

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

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

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

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

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

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

  • Node.js 16 (বিটা)
  • Node.js 14
  • Node.js 12
  • Node.js 10
  • Node.js 8 15 ডিসেম্বর node.js ফাংশন 8 রানটাইম Firebase CLI অক্ষম ছিল ডিপ্লোয়মেন্ট (8 জুন, 2020 উপর থামানো হয়েছে), ইতিমধ্যে-মোতায়েন ফাংশন 2020. এক্সেকিউশন ভবিষ্যতে কিছু পয়েন্ট থামবে; যদি আপনি Node.js 8 রানটাইম ফাংশন মোতায়েন করেছেন, আমরা সুপারিশ করছি যে আপনি Node.js 14 রানটাইম আপগ্রেড

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

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

  "engines": {"node": "14"}

engines ক্ষেত্র প্রয়োজন বোধ করা হয়; স্থাপন ও রান ফাংশন এটা আপনার জন্য অর্ডার সমর্থিত Node.js সংস্করণ এক নির্দিষ্ট করতে হবে। বর্তমানে firebase init functions সেট এই ক্ষেত্র 14

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

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

  1. নিশ্চিত করুন আপনার প্রকল্পের উপর আলোকচ্ছটা মূল্যের পরিকল্পনা
  2. নিশ্চিত করুন যে আপনি Firebase CLI v8.6.0 বা তার পরবর্তী ব্যবহার করছেন।
  3. পরিবর্তন engines মান package.json আপনার সালে নির্মিত হয়েছিল ফাইল functions/ ডিরেক্টরির আরম্ভের সময়। : উদাহরণস্বরূপ, যদি আপনি সংস্করণ 10 থেকে সংস্করণ 14 আপগ্রেড করতে ইচ্ছুক হয়ে প্রবেশের মত হওয়া উচিত "engines": {"node": "14"}
  4. বৈকল্পিকভাবে, ব্যবহার করে আপনার পরিবর্তনগুলি পরীক্ষা Firebase স্থানীয় এমুলেটর সুইট
  5. Firebase CLI v8.1.0 বা তার পরবর্তী ব্যবহার করে ফাংশন পুনরায় স্থাপন করুন।

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

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

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

ঠান্ডা শুরুর সংখ্যা কমিয়ে দিন

সোর্স কোডে একটি ফাংশন জন্য দৃষ্টান্ত সেট সর্বনিম্ন সংখ্যা করতে, runWith প্যারামিটার। এই রানটাইম বিকল্প একটি JSON বস্তু অনুসারী গ্রহণ RuntimeOptions ইন্টারফেস, যার জন্য মান নির্ধারণ minInstances । উদাহরণস্বরূপ, এই ফাংশনটি উষ্ণ রাখার জন্য সর্বনিম্ন 5টি দৃষ্টান্ত সেট করে:

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 :

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

    // 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 প্যারামিটার। এই রানটাইম বিকল্প একটি JSON বস্তু অনুসারী গ্রহণ RuntimeOptions ইন্টারফেস, যার জন্য মান নির্ধারণ maxInstances । উদাহরণস্বরূপ, এই ফাংশনটি 100টি দৃষ্টান্তের একটি সীমা নির্ধারণ করে যাতে একটি অনুমানমূলক উত্তরাধিকার ডাটাবেসকে অভিভূত না করে:

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 সীমা, নতুন অনুরোধ 30 সেকেন্ডের জন্য সারিবদ্ধ করা হয় এবং তারপর একটি প্রতিক্রিয়া কোড সঙ্গে প্রত্যাখ্যাত 429 Too Many Requests যদি কোনো উদাহরণ হিসেবে বলা যায় তারপর পাওয়া যায়।

সর্বাধিক দৃষ্টান্ত সেটিংস ব্যবহার করার জন্য সর্বোত্তম কার্যাভ্যাস সম্পর্কে আরো জানতে, এই চেক আউট ব্যবহার করার জন্য সর্বোত্তম কার্যাভ্যাস maxInstances

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

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

সেট মেমরি অ্যালোকেশন এবং ফাংশন সোর্স কোডে সময়সীমার করতে, runWith প্যারামিটার ক্লাউড কার্যাবলী 2.0.0 জন্য Firebase SDK এর মধ্যে পরিচয় করিয়ে দেন। এই রানটাইম বিকল্প একটি JSON বস্তু অনুসারী গ্রহণ RuntimeOptions ইন্টারফেস, যার জন্য মান নির্ধারণ timeoutSeconds এবং memory । উদাহরণস্বরূপ, এই স্টোরেজ ফাংশনটি 1GB মেমরি ব্যবহার করে এবং 300 সেকেন্ডের পরে সময় শেষ হয়:

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 , বা 9 মিনিট। মেমরির পরিমাণ CPU- র হিসাবে জন্য বৈধ মান এই তালিকায় বিস্তারিত, ফাংশন জন্য বরাদ্দ করার জন্য একটি ফাংশন অনুরূপ মঞ্জুর memory :

  • 128MB - 200MHz
  • 256MB - 400MHz
  • 512MB - 800MHz
  • 1GB - 1.4 গিগাহার্জ
  • 2GB - 2.4 গিগাহার্জ
  • 4GB - 4.8 গিগাহার্জ
  • 8GB - 4.8 গিগাহার্জ

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

  1. গুগল ক্লাউড কনসোলে বাম মেনু থেকে মেঘ কার্যাবলী নির্বাচন করুন।
  2. ফাংশন তালিকায় তার নামের উপর ক্লিক করে একটি ফাংশন নির্বাচন করুন।
  3. শীর্ষ মেনু আইকন সম্পাদনা ক্লিক করুন।
  4. ড্রপ-ডাউন মেনু লেবেল মেমরি বরাদ্দ থেকে একটি মেমরি বরাদ্দ নির্বাচন করুন।
  5. উন্নত বিকল্প প্রদর্শন, এবং সময়সীমা সমাপ্ত টেক্সট বক্স-এ সেকেন্ডের একটি নম্বর লিখুন আরো ক্লিক করুন।
  6. ফাংশন আপডেট করার জন্য ক্লিক করুন।