আপনার পরিবেশ কনফিগার করুন


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

আপনি এই বিকল্পগুলির মধ্যে চয়ন করতে পারেন:

  • প্যারামিটারাইজড কনফিগারেশন (বেশিরভাগ পরিস্থিতির জন্য প্রস্তাবিত)। এটি পরামিতিগুলির সাথে দৃঢ়ভাবে টাইপ করা পরিবেশ কনফিগারেশন প্রদান করে যা স্থাপনের সময় যাচাই করা হয়, যা ত্রুটি প্রতিরোধ করে এবং ডিবাগিংকে সহজ করে।
  • পরিবেশ ভেরিয়েবলের ফাইল-ভিত্তিক কনফিগারেশন। এই পদ্ধতির সাহায্যে, আপনি ম্যানুয়ালি পরিবেশ ভেরিয়েবল লোড করার জন্য একটি dotenv ফাইল তৈরি করেন।

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

প্যারামিটারাইজড কনফিগারেশন

Cloud Functions for Firebase আপনার কোডবেসের ভিতরে ঘোষণামূলকভাবে কনফিগারেশন প্যারামিটারগুলি সংজ্ঞায়িত করার জন্য একটি ইন্টারফেস প্রদান করে। এই পরামিতিগুলির মান ফাংশন স্থাপনের সময়, স্থাপনা এবং রানটাইম বিকল্পগুলি সেট করার সময় এবং কার্যকর করার সময় উভয়ই উপলব্ধ। এর মানে হল যে সমস্ত প্যারামিটারের একটি বৈধ মান না থাকলে CLI স্থাপনা ব্লক করবে।

আপনার কোডে পরামিতি সংজ্ঞায়িত করতে, এই মডেলটি অনুসরণ করুন:

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.`);
  }
);

প্যারামিটারাইজড কনফিগারেশন ভেরিয়েবল সহ একটি ফাংশন স্থাপন করার সময়, Firebase CLI প্রথমে স্থানীয় .env ফাইল থেকে তাদের মান লোড করার চেষ্টা করে। যদি সেগুলি সেই ফাইলগুলিতে উপস্থিত না থাকে এবং কোনও default সেট না থাকে, তাহলে CLI ডিপ্লোয়মেন্টের সময় মানগুলির জন্য অনুরোধ করবে এবং তারপর স্বয়ংক্রিয়ভাবে তাদের মানগুলি আপনার functions/ ডিরেক্টরিতে .env.<project_ID> নামে একটি .env ফাইলে সংরক্ষণ করবে:

$ firebase deploy
i  functions: preparing codebase default for deployment
? Enter a string value for ENVIRONMENT: prod
i  functions: Writing new parameter values to disk: .env.projectId
…
$ firebase deploy
i  functions: Loaded environment variables from .env.projectId

আপনার ডেভেলপমেন্ট ওয়ার্কফ্লো উপর নির্ভর করে, এটি তৈরি করা .env.<project_ID> ফাইলটিকে সংস্করণ নিয়ন্ত্রণে যোগ করা উপযোগী হতে পারে।

বৈশ্বিক সুযোগে পরামিতি ব্যবহার করা

স্থাপনার সময়, আপনার ফাংশন কোড লোড করা হয় এবং আপনার পরামিতিগুলির প্রকৃত মান থাকার আগে পরিদর্শন করা হয়। এর মানে হল যে গ্লোবাল স্কোপের সময় প্যারামিটার মান আনয়নের ফলে স্থাপনা ব্যর্থ হয়। এমন ক্ষেত্রে যেখানে আপনি একটি বৈশ্বিক মান আরম্ভ করার জন্য একটি প্যারামিটার ব্যবহার করতে চান, প্রারম্ভিক কলব্যাক onInit() ব্যবহার করুন। এই কলব্যাকটি প্রোডাকশনে যেকোন ফাংশন চালানোর আগে চলে কিন্তু ডিপ্লয় করার সময় কল করা হয় না, তাই এটি একটি প্যারামিটারের মান অ্যাক্সেস করার জন্য একটি নিরাপদ জায়গা।

  const { GoogleGenerativeAI } = require('@google/generative-ai');
  const { defineSecret } = require('firebase-functions/params');
  const { onInit } = require('firebase-functions/v1');

  const apiKey = defineSecret('GOOGLE_API_KEY');

  let genAI;
  onInit(() => {
    genAI = new GoogleGenerativeAI(apiKey.value());
  })

CLI আচরণ কনফিগার করুন

পরামিতিগুলিকে একটি Options বস্তুর সাথে কনফিগার করা যেতে পারে যা নিয়ন্ত্রণ করে কিভাবে CLI মানগুলির জন্য প্রম্পট করবে। নিম্নলিখিত উদাহরণটি একটি ফোন নম্বরের বিন্যাস যাচাই করার বিকল্পগুলি সেট করে, একটি সাধারণ নির্বাচনের বিকল্প প্রদান করতে এবং Firebase প্রকল্প থেকে স্বয়ংক্রিয়ভাবে একটি নির্বাচনের বিকল্প তৈরি করে:

const { defineString } = require('firebase-functions/params');

const welcomeMessage = defineString('WELCOME_MESSAGE', {default: 'Hello World',
description: 'The greeting that is returned to the caller of this function'});

const onlyPhoneNumbers = defineString('PHONE_NUMBER', {input: {text:
{validationRegex: /\d{3}-\d{3}-\d{4}/, validationErrorMessage: "Please enter
a phone number in the format XXX-YYY-ZZZZ"}}});

const selectedOption = defineString('PARITY', {input: {select: {options:
[{value: "odd"}, {value: "even"}]}}})

const storageBucket = defineString('BUCKET', {input: {resource: {type:
"storage.googleapis.com/Bucket"}}, description: "This will automatically
populate the selector field with the deploying Cloud Project’s
storage buckets"})

পরামিতি প্রকার

প্যারামিটারাইজড কনফিগারেশন প্যারামিটার মানগুলির জন্য শক্তিশালী টাইপিং প্রদান করে এবং ক্লাউড সিক্রেট ম্যানেজারের গোপনীয়তা সমর্থন করে। সমর্থিত প্রকারগুলি হল:

  • গোপন
  • স্ট্রিং
  • বুলিয়ান
  • পূর্ণসংখ্যা
  • ভাসা

পরামিতি মান এবং অভিব্যক্তি

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

রানটাইম বিকল্প হিসাবে আপনার ফাংশনে একটি প্যারামিটার পাস করতে, এটি সরাসরি পাস করুন:

const functions = require('firebase-functions/v1');
const { defineInt} = require('firebase-functions/params');
const minInstancesConfig = defineInt('HELLO\_WORLD\_MININSTANCES');

export const helloWorld = functions.runWith({ minInstances: minInstancesConfig}).https.onRequest(
  (req, res) => {
    //…

অতিরিক্তভাবে, কোন বিকল্পটি বেছে নেবেন তা জানার জন্য আপনাকে যদি একটি প্যারামিটারের সাথে তুলনা করতে হয়, তাহলে মান পরীক্ষা করার পরিবর্তে আপনাকে অন্তর্নির্মিত তুলনাকারী ব্যবহার করতে হবে:

const functions = require('firebase-functions/v1');
const { defineBool } = require('firebase-functions/params');
const environment = params.defineString(ENVIRONMENT, {default: dev});

// use built-in comparators
const minInstancesConfig =environment.equals('PRODUCTION').thenElse(10, 1);
export const helloWorld = functions.runWith({ minInstances: minInstancesConfig}).https.onRequest(
  (req, res) => {
    //…

প্যারামিটার এবং প্যারামিটার এক্সপ্রেশন যা শুধুমাত্র রানটাইমে ব্যবহৃত হয় তাদের value ফাংশন দিয়ে অ্যাক্সেস করা যেতে পারে:

const functions = require('firebase-functions/v1');
const { defineString } = require('firebase-functions/params');
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.https.onRequest(
 (req, res) => {
    res.send(`${welcomeMessage.value()}! I am a function.`);
  }
);

অন্তর্নির্মিত পরামিতি

ক্লাউড ফাংশন SDK তিনটি পূর্ব-নির্ধারিত প্যারামিটার অফার করে, firebase-functions/params সাবপ্যাকেজ থেকে পাওয়া যায়:

  • projectID — ক্লাউড প্রকল্প যেখানে ফাংশন চলছে।
  • databaseURL — ফাংশনের সাথে যুক্ত রিয়েলটাইম ডেটাবেস ইনস্ট্যান্সের URL (যদি ফায়ারবেস প্রকল্পে সক্ষম করা থাকে)।
  • storageBucket — ফাংশনের সাথে যুক্ত ক্লাউড স্টোরেজ বালতি (যদি ফায়ারবেস প্রকল্পে সক্ষম করা থাকে)।

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

গোপন পরামিতি

defineSecret() ব্যবহার করে সংজ্ঞায়িত Secret টাইপের প্যারামিটার, স্ট্রিং প্যারামিটার উপস্থাপন করে যার একটি মান ক্লাউড সিক্রেট ম্যানেজারে সংরক্ষিত থাকে। একটি স্থানীয় .env ফাইলের বিরুদ্ধে চেক করার পরিবর্তে এবং অনুপস্থিত থাকলে ফাইলটিতে একটি নতুন মান লেখার পরিবর্তে, গোপন পরামিতিগুলি ক্লাউড সিক্রেট ম্যানেজারের অস্তিত্বের বিরুদ্ধে পরীক্ষা করে এবং স্থাপনার সময় একটি নতুন গোপনের মূল্যের জন্য ইন্টারেক্টিভভাবে প্রম্পট করে৷

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

const functions = require('firebase-functions/v1');
const { defineSecret } = require('firebase-functions/params');
const discordApiKey = defineSecret('DISCORD_API_KEY');

export const postToDiscord = functions.runWith({ secrets: [discordApiKey] }).https.onRequest(
  (req, res) => {
    const apiKey = discordApiKey.value();
    //…

যেহেতু ফাংশনটি কার্যকর না হওয়া পর্যন্ত গোপনীয়তার মানগুলি লুকানো থাকে, আপনি আপনার ফাংশনটি কনফিগার করার সময় সেগুলি ব্যবহার করতে পারবেন না।

পরিবেশ পরিবর্তনশীল

Cloud Functions for Firebase আপনার অ্যাপ্লিকেশন রানটাইমে একটি .env ফাইলে নির্দিষ্ট করা পরিবেশ ভেরিয়েবল লোড করার জন্য dotenv ফাইল ফর্ম্যাট সমর্থন করে। একবার স্থাপন করা হলে, পরিবেশ ভেরিয়েবলগুলি process.env ইন্টারফেসের মাধ্যমে পড়া যাবে।

আপনার পরিবেশকে এইভাবে কনফিগার করতে, আপনার প্রকল্পে একটি .env ফাইল তৈরি করুন, পছন্দসই ভেরিয়েবল যোগ করুন এবং স্থাপন করুন:

  1. আপনার functions/ ডিরেক্টরিতে একটি .env ফাইল তৈরি করুন:

    # Directory layout:
    #   my-project/
    #     firebase.json
    #     functions/
    #       .env
    #       package.json
    #       index.js
    
  2. সম্পাদনার জন্য .env ফাইলটি খুলুন এবং পছন্দসই কীগুলি যুক্ত করুন৷ যেমন:

    PLANET=Earth
    AUDIENCE=Humans
    
  3. ফাংশন স্থাপন করুন এবং যাচাই করুন যে পরিবেশ ভেরিয়েবল লোড হয়েছে:

    firebase deploy --only functions
    # ...
    # i functions: Loaded environment variables from .env.
    # ...
    

একবার আপনার কাস্টম এনভায়রনমেন্ট ভেরিয়েবল স্থাপন করা হলে, আপনার ফাংশন কোড process.env সিনট্যাক্সের মাধ্যমে সেগুলি অ্যাক্সেস করতে পারে:

// Responds with "Hello Earth and Humans"
exports.hello = functions.https.onRequest((request, response) => {
  response.send(`Hello ${process.env.PLANET} and ${process.env.AUDIENCE}`);
});

পরিবেশ ভেরিয়েবলের একাধিক সেট স্থাপন করা হচ্ছে

যদি আপনার ফায়ারবেস প্রকল্পগুলির জন্য পরিবেশের ভেরিয়েবলের একটি বিকল্প সেটের প্রয়োজন হয় (যেমন স্টেজিং বনাম উত্পাদন), একটি .env. <project or alias > ফাইল করুন এবং সেখানে আপনার প্রকল্প-নির্দিষ্ট পরিবেশের ভেরিয়েবল লিখুন। .env এবং প্রজেক্ট-নির্দিষ্ট .env ফাইলের পরিবেশ ভেরিয়েবল (যদি তারা বিদ্যমান থাকে) সমস্ত স্থাপন করা ফাংশনে অন্তর্ভুক্ত করা হবে।

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

.env .env.dev .env.prod
গ্রহ=পৃথিবী

AUDIENCE=মানুষ

AUDIENCE=দেব মানুষ AUDIENCE=প্রোড হিউম্যানস

সেই পৃথক ফাইলগুলির মানগুলি দেওয়া, আপনার ফাংশনগুলির সাথে স্থাপন করা পরিবেশের ভেরিয়েবলের সেটগুলি আপনার লক্ষ্য প্রকল্পের উপর নির্ভর করে পরিবর্তিত হবে:

$ firebase use dev
$ firebase deploy --only functions
i functions: Loaded environment variables from .env, .env.dev.
# Deploys functions with following user-defined environment variables:
#   PLANET=Earth
#   AUDIENCE=Dev Humans

$ firebase use prod
$ firebase deploy --only functions
i functions: Loaded environment variables from .env, .env.prod.
# Deploys functions with following user-defined environment variables:
#   PLANET=Earth
#   AUDIENCE=Prod Humans

সংরক্ষিত পরিবেশ পরিবর্তনশীল

কিছু পরিবেশ পরিবর্তনশীল কী অভ্যন্তরীণ ব্যবহারের জন্য সংরক্ষিত। আপনার .env ফাইলগুলিতে এই কীগুলির কোনওটি ব্যবহার করবেন না:

  • X_GOOGLE_ দিয়ে শুরু হওয়া সমস্ত কী
  • সমস্ত কী শুরু হচ্ছে EXT_
  • FIREBASE_ দিয়ে শুরু হওয়া সমস্ত কী
  • নিম্নলিখিত তালিকা থেকে যেকোনো কী:
  • CLOUD_RUNTIME_CONFIG
  • ENTRY_POINT
  • GCP_PROJECT
  • GCLOUD_PROJECT
  • GOOGLE_CLOUD_PROJECT
  • FUNCTION_TRIGGER_TYPE
  • FUNCTION_NAME
  • FUNCTION_MEMORY_MB
  • FUNCTION_TIMEOUT_SEC
  • FUNCTION_IDENTITY
  • FUNCTION_REGION
  • FUNCTION_TARGET
  • FUNCTION_SIGNATURE_TYPE
  • K_SERVICE
  • K_REVISION
  • পোর্ট
  • K_CONFIGURATION

সংবেদনশীল কনফিগারেশন তথ্য সংরক্ষণ করুন এবং অ্যাক্সেস করুন

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

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

একটি গোপন তৈরি করুন এবং ব্যবহার করুন

একটি গোপনীয়তা তৈরি করতে, Firebase CLI ব্যবহার করুন৷

একটি গোপন তৈরি এবং ব্যবহার করতে:

  1. আপনার স্থানীয় প্রকল্প ডিরেক্টরির রুট থেকে, নিম্নলিখিত কমান্ডটি চালান:

    firebase functions:secrets:set SECRET_NAME

  2. SECRET_NAME এর জন্য একটি মান লিখুন।

    CLI একটি সফল বার্তা প্রতিধ্বনিত করে এবং সতর্ক করে যে পরিবর্তন কার্যকর করার জন্য আপনাকে অবশ্যই ফাংশন স্থাপন করতে হবে।

  3. স্থাপন করার আগে, নিশ্চিত করুন যে আপনার ফাংশন কোড ফাংশনটিকে runWith প্যারামিটার ব্যবহার করে গোপন অ্যাক্সেস করতে দেয়:

    exports.processPayment = functions
      // Make the secret available to this function
      .runWith({ secrets: ["SECRET_NAME"] })
      .onCall((data, context) => {
        const myBillingService = initializeBillingService(
          // reference the secret value
          process.env.SECRET_NAME
        );
        // Process the payment
      });
  4. Cloud Functions স্থাপন করুন:

    firebase deploy --only functions

এখন আপনি অন্যান্য পরিবেশ পরিবর্তনশীল মত এটি অ্যাক্সেস করতে সক্ষম হবেন. বিপরীতভাবে, যদি অন্য একটি ফাংশন যা runWith -এ গোপনীয়তা নির্দিষ্ট করে না সে গোপনটি অ্যাক্সেস করার চেষ্টা করে, এটি একটি অনির্ধারিত মান পায়:

  exports.anotherEndpoint = functions.https.onRequest((request, response) => {
    response.send(`The secret API key is ${process.env.SECRET_NAME}`);
    // responds with "The secret API key is undefined" because the `runWith` parameter is missing
  });

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

গোপনীয়তা পরিচালনা

আপনার গোপনীয়তা পরিচালনা করতে Firebase CLI ব্যবহার করুন। এইভাবে গোপনীয়তাগুলি পরিচালনা করার সময়, মনে রাখবেন যে কিছু CLI পরিবর্তনের জন্য আপনাকে সংশ্লিষ্ট ফাংশনগুলিকে সংশোধন এবং/অথবা পুনরায় স্থাপন করতে হবে। বিশেষভাবে:

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

এখানে গোপন ব্যবস্থাপনার জন্য Firebase CLI কমান্ডগুলির একটি সারাংশ রয়েছে:

# Change the value of an existing secret
firebase functions:secrets:set SECRET_NAME

# View the value of a secret
functions:secrets:access SECRET_NAME

# Destroy a secret
functions:secrets:destroy SECRET_NAME

# View all secret versions and their state
functions:secrets:get SECRET_NAME

# Automatically clean up all secrets that aren't referenced by any of your functions
functions:secrets:prune

access এবং destroy কমান্ডের জন্য, আপনি একটি নির্দিষ্ট সংস্করণ পরিচালনা করতে ঐচ্ছিক সংস্করণ প্যারামিটার প্রদান করতে পারেন। যেমন:

functions:secrets:access SECRET_NAME[@VERSION]

এই ক্রিয়াকলাপগুলি সম্পর্কে আরও তথ্যের জন্য, CLI সাহায্য দেখতে কমান্ড সহ পাস -h করুন।

কিভাবে গোপন বিল করা হয়

Secret Manager কোনো খরচ ছাড়াই 6টি সক্রিয় গোপন সংস্করণের অনুমতি দেয়। এর মানে হল যে আপনি একটি ফায়ারবেস প্রকল্পে প্রতি মাসে 6টি গোপনীয়তা রাখতে পারেন।

ডিফল্টরূপে, Firebase CLI স্বয়ংক্রিয়ভাবে অব্যবহৃত গোপন সংস্করণগুলিকে যথাযথভাবে ধ্বংস করার চেষ্টা করে, যেমন আপনি যখন গোপনের একটি নতুন সংস্করণের সাথে ফাংশন স্থাপন করেন। এছাড়াও, আপনি functions:secrets:destroy এবং functions:secrets:prune ব্যবহার করে সক্রিয়ভাবে অব্যবহৃত গোপনীয়তা পরিষ্কার করতে পারেন।

Secret Manager একটি গোপনে 10,000টি বিলবিহীন মাসিক অ্যাক্সেস অপারেশনের অনুমতি দেয়। ফাংশন দৃষ্টান্তগুলি প্রতিবার ঠান্ডা শুরু হওয়ার সময় তাদের runWith প্যারামিটারে নির্দিষ্ট গোপনীয়তাগুলি পড়ে। যদি আপনার কাছে অনেকগুলি ফাংশন ইনস্ট্যান্স থাকে যা প্রচুর গোপনীয়তা পড়ে, আপনার প্রকল্প এই ভাতা ছাড়িয়ে যেতে পারে, এই সময়ে আপনাকে প্রতি 10,000 অ্যাক্সেস অপারেশনের জন্য $0.03 চার্জ করা হবে।

আরও তথ্যের জন্য, Secret Manager প্রাইসিং দেখুন।

এমুলেটর সমর্থন

dotenv-এর সাথে পরিবেশগত কনফিগারেশন একটি স্থানীয় Cloud Functions এমুলেটরের সাথে ইন্টারঅপারেট করার জন্য ডিজাইন করা হয়েছে।

একটি স্থানীয় Cloud Functions এমুলেটর ব্যবহার করার সময়, আপনি একটি .env.local ফাইল সেট আপ করে আপনার প্রকল্পের জন্য পরিবেশ ভেরিয়েবল ওভাররাইড করতে পারেন৷ .env.local এর বিষয়বস্তু .env এবং প্রজেক্ট-নির্দিষ্ট .env ফাইলের চেয়ে অগ্রাধিকার পায়।

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

.env .env.dev .env.local
গ্রহ=পৃথিবী

AUDIENCE=মানুষ

AUDIENCE=দেব মানুষ AUDIENCE=স্থানীয় মানুষ

স্থানীয় প্রেক্ষাপটে শুরু হলে, এমুলেটর পরিবেশের ভেরিয়েবল লোড করে যেমন দেখানো হয়েছে:

  $ firebase emulators:start
  i  emulators: Starting emulators: functions
  # Starts emulator with following environment variables:
  #  PLANET=Earth
  #  AUDIENCE=Local Humans

Cloud Functions এমুলেটরে গোপনীয়তা এবং প্রমাণপত্রাদি

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

এনভায়রনমেন্ট ভেরিয়েবলের জন্য Cloud Functions এমুলেটর সমর্থনের মতো, আপনি একটি .secret.local ফাইল সেট আপ করে গোপন মানগুলিকে ওভাররাইড করতে পারেন। এটি আপনার জন্য স্থানীয়ভাবে আপনার ফাংশনগুলি পরীক্ষা করা সহজ করে তোলে, বিশেষ করে যদি আপনার গোপন মানটিতে অ্যাক্সেস না থাকে।

পরিবেশ কনফিগারেশন থেকে স্থানান্তর করা হচ্ছে

আপনি যদি functions.config এর সাথে এনভায়রনমেন্ট কনফিগারেশন ব্যবহার করে থাকেন, তাহলে আপনি আপনার বিদ্যমান কনফিগারেশনটিকে এনভায়রনমেন্ট ভেরিয়েবল ( dotenv ফরম্যাটে) হিসেবে স্থানান্তর করতে পারেন। Firebase CLI একটি এক্সপোর্ট কমান্ড প্রদান করে যা আপনার ডিরেক্টরির .firebaserc ফাইলে (নীচের উদাহরণে, local , dev , এবং prod ) তালিকাভুক্ত প্রতিটি উপনাম বা প্রকল্পের কনফিগারেশন .env ফাইল হিসাবে আউটপুট করে।

মাইগ্রেট করতে, firebase functions:config:export কমান্ড:

firebase functions:config:export
i  Importing configs from projects: [project-0, project-1]
⚠  The following configs keys could not be exported as environment variables:

⚠  project-0 (dev):
    1foo.a => 1FOO\_A (Key 1FOO\_A must start with an uppercase ASCII letter or underscore, and then consist of uppercase ASCII letters, digits, and underscores.)

Enter a PREFIX to rename invalid environment variable keys: CONFIG\_
✔  Wrote functions/.env.prod
✔  Wrote functions/.env.dev
✔  Wrote functions/.env.local
✔  Wrote functions/.env

মনে রাখবেন, কিছু ক্ষেত্রে, আপনাকে এক্সপোর্ট করা এনভায়রনমেন্ট ভেরিয়েবল কীগুলির নাম পরিবর্তন করার জন্য একটি প্রিফিক্স লিখতে বলা হবে। এর কারণ হল সমস্ত কনফিগারেশন স্বয়ংক্রিয়ভাবে রূপান্তরিত হতে পারে না কারণ সেগুলি অবৈধ হতে পারে বা একটি সংরক্ষিত পরিবেশ পরিবর্তনশীল কী হতে পারে।

আমরা সুপারিশ করি যে আপনি আপনার ফাংশন স্থাপন করার আগে বা উত্স নিয়ন্ত্রণে .env ফাইলগুলি পরীক্ষা করার আগে আপনি জেনারেট করা .env ফাইলগুলির বিষয়বস্তু সাবধানে পর্যালোচনা করুন৷ যদি কোন মান সংবেদনশীল হয় এবং ফাঁস করা উচিত নয়, সেগুলিকে আপনার .env ফাইলগুলি থেকে সরান এবং পরিবর্তে Secret Manager নিরাপদে সংরক্ষণ করুন৷

এছাড়াও আপনাকে আপনার ফাংশন কোড আপডেট করতে হবে। যেকোনো ফাংশন যা functions.config ব্যবহার করে এখন তার পরিবর্তে process.env ব্যবহার করতে হবে, যেমনটি 2nd gen-এ Upgrade- এ দেখানো হয়েছে।

পরিবেশ কনফিগারেশন

CLI এর সাথে পরিবেশ কনফিগারেশন সেট করুন

এনভায়রনমেন্ট ডেটা সঞ্চয় করতে, আপনি Firebase CLI- তে firebase functions:config:set কমান্ড ব্যবহার করতে পারেন। প্রতিটি কীকে পিরিয়ড ব্যবহার করে গ্রুপ সম্পর্কিত কনফিগারেশন একসাথে রাখা যেতে পারে। মনে রাখবেন যে শুধুমাত্র ছোট হাতের অক্ষর কীগুলিতে গৃহীত হয় ; বড় হাতের অক্ষর অনুমোদিত নয়।

উদাহরণস্বরূপ, "কিছু পরিষেবা" এর জন্য ক্লায়েন্ট আইডি এবং API কী সংরক্ষণ করতে, আপনি চালাতে পারেন:

firebase functions:config:set someservice.key="THE API KEY" someservice.id="THE CLIENT ID"

বর্তমান পরিবেশ কনফিগারেশন পুনরুদ্ধার করুন

আপনার প্রকল্পের জন্য পরিবেশ কনফিগারেশনে বর্তমানে কী সংরক্ষিত আছে তা পরিদর্শন করতে, আপনি firebase functions:config:get ব্যবহার করতে পারেন। এটি JSON এর মত কিছু আউটপুট করবে:

{
  "someservice": {
    "key":"THE API KEY",
    "id":"THE CLIENT ID"
  }
}

এই কার্যকারিতা Google Cloud রানটাইম কনফিগারেশন API-এর উপর ভিত্তি করে।

একটি ফাংশনে পরিবেশ কনফিগারেশন অ্যাক্সেস করতে functions.config ব্যবহার করুন

কিছু কনফিগারেশন স্বয়ংক্রিয়ভাবে সংরক্ষিত firebase নামস্থানের অধীনে প্রদান করা হয়। এনভায়রনমেন্ট কনফিগারেশন functions.config() এর মাধ্যমে আপনার চলমান ফাংশনের ভিতরে উপলব্ধ করা হয়েছে। উপরের কনফিগারেশনটি ব্যবহার করতে, আপনার কোডটি এইরকম দেখতে পারে:

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

exports.userCreated = functions.database.ref('/users/{id}').onWrite(event => {
  let email = event.data.child('email').val();

  return request({
    url: 'https://someservice.com/api/some/call',
    headers: {
      'X-Client-ID': functions.config().someservice.id,
      'Authorization': `Bearer ${functions.config().someservice.key}`
    },
    body: {email: email}
  });
});

একটি মডিউল শুরু করতে পরিবেশ কনফিগারেশন ব্যবহার করুন

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

উদাহরণস্বরূপ, স্ল্যাক নোড SDK মডিউল ব্যবহার করতে, আপনি এটি লিখতে পারেন:

const functions = require('firebase-functions/v1');
const IncomingWebhook = require('@slack/client').IncomingWebhook;
const webhook = new IncomingWebhook(functions.config().slack.url);

স্থাপন করার আগে, slack.url পরিবেশ কনফিগার পরিবর্তনশীল সেট করুন:

firebase functions:config:set slack.url=https://hooks.slack.com/services/XXX

অতিরিক্ত পরিবেশ কমান্ড

  • firebase functions:config:unset key1 key2 কনফিগার থেকে নির্দিষ্ট কীগুলি সরিয়ে দেয়
  • firebase functions:config:clone --from <fromProject> বর্তমানে সক্রিয় প্রকল্পে অন্য প্রকল্পের পরিবেশ ক্লোন করে।

স্বয়ংক্রিয়ভাবে জনবহুল পরিবেশ ভেরিয়েবল

এনভায়রনমেন্ট ভেরিয়েবল আছে যেগুলি ফাংশন রানটাইম এবং স্থানীয়ভাবে অনুকরণ করা ফাংশনে স্বয়ংক্রিয়ভাবে পপুলেট হয়। এর মধ্যে রয়েছে Google Cloud , সেইসাথে একটি Firebase-নির্দিষ্ট পরিবেশ পরিবর্তনশীল দ্বারা জনবহুল :

process.env.FIREBASE_CONFIG : নিম্নলিখিত ফায়ারবেস প্রকল্প কনফিগার তথ্য প্রদান করে:

{
  databaseURL: 'https://DATABASE_NAME.firebaseio.com',
  storageBucket: 'PROJECT_ID.firebasestorage.app',
  projectId: 'PROJECT_ID'
}

মনে রাখবেন যে আপনার প্রকৃত ফায়ারবেস কনফিগারেশনের মানগুলি আপনার প্রকল্পে আপনি যে সংস্থানগুলি প্রদান করেছেন তার উপর নির্ভর করে পরিবর্তিত হতে পারে৷

এই কনফিগারেশনটি স্বয়ংক্রিয়ভাবে প্রয়োগ করা হয় যখন আপনি কোনো আর্গুমেন্ট ছাড়াই Firebase অ্যাডমিন SDK শুরু করেন। আপনি যদি জাভাস্ক্রিপ্টে ফাংশন লিখছেন, এইভাবে শুরু করুন:

const admin = require('firebase-admin');
admin.initializeApp();

আপনি যদি টাইপস্ক্রিপ্টে ফাংশন লিখছেন, তাহলে এইভাবে শুরু করুন:

import * as functions from 'firebase-functions/v1';
import * as admin from 'firebase-admin';
import 'firebase-functions/v1';
admin.initializeApp();

পরিষেবা অ্যাকাউন্ট শংসাপত্রগুলি ব্যবহার করে ডিফল্ট প্রকল্প কনফিগারেশনের সাথে অ্যাডমিন SDK শুরু করতে হলে, আপনি একটি ফাইল থেকে শংসাপত্রগুলি লোড করতে পারেন এবং সেগুলিকে এইভাবে FIREBASE_CONFIG এ যুক্ত করতে পারেন:

serviceAccount = require('./serviceAccount.json');

const adminConfig = JSON.parse(process.env.FIREBASE_CONFIG);
adminConfig.credential = admin.credential.cert(serviceAccount);
admin.initializeApp(adminConfig);