Catch up on highlights from Firebase at Google I/O 2023. Learn more

अपने परिवेश को कॉन्फ़िगर करें


अक्सर आपको अपने कार्यों के लिए अतिरिक्त कॉन्फ़िगरेशन की आवश्यकता होगी, जैसे कि तृतीय-पक्ष API कुंजियाँ या ट्यून करने योग्य सेटिंग्स। क्लाउड फ़ंक्शंस के लिए फायरबेस एसडीके आपके प्रोजेक्ट के लिए इस प्रकार के डेटा को स्टोर करना और पुनः प्राप्त करना आसान बनाने के लिए अंतर्निहित पर्यावरण कॉन्फ़िगरेशन प्रदान करता है।

आप तीन विकल्पों में से चुन सकते हैं:

  • पैरामीटरयुक्त कॉन्फ़िगरेशन (अधिकांश परिदृश्यों के लिए अनुशंसित)। यह उन मापदंडों के साथ दृढ़ता से टाइप किए गए पर्यावरण कॉन्फ़िगरेशन प्रदान करता है जो तैनाती के समय मान्य होते हैं, जो त्रुटियों को रोकता है और डिबगिंग को सरल करता है।
  • पर्यावरण चर का फ़ाइल-आधारित कॉन्फ़िगरेशन। इस दृष्टिकोण के साथ, आप पर्यावरण चर लोड करने के लिए मैन्युअल रूप से dotenv फ़ाइल बनाते हैं।
  • फायरबेस सीएलआई और functions.config (केवल क्लाउड फ़ंक्शंस (पहली पीढ़ी)) के साथ रनटाइम पर्यावरण कॉन्फ़िगरेशन

अधिकांश उपयोग मामलों के लिए, पैरामिट्रीकृत कॉन्फ़िगरेशन की सिफारिश की जाती है। यह दृष्टिकोण कॉन्फ़िगरेशन मान को रनटाइम और परिनियोजन समय दोनों पर उपलब्ध कराता है, और परिनियोजन तब तक अवरुद्ध रहता है जब तक कि सभी पैरामीटर का मान मान्य न हो. इसके विपरीत, परिनियोजन के समय परिवेश चर के साथ कॉन्फ़िगरेशन उपलब्ध नहीं होता है।

पैरामीटरयुक्त विन्यास

फायरबेस के लिए क्लाउड फ़ंक्शंस आपके कोडबेस के अंदर घोषणात्मक रूप से कॉन्फ़िगरेशन पैरामीटर को परिभाषित करने के लिए एक इंटरफ़ेस प्रदान करता है। इन पैरामीटर का मान फ़ंक्शन परिनियोजन के दौरान, परिनियोजन और रनटाइम विकल्प सेट करते समय और निष्पादन के दौरान दोनों उपलब्ध होता है। इसका मतलब यह है कि सीएलआई तैनाती को तब तक रोक देगा जब तक कि सभी मापदंडों का वैध मान न हो।

अपने कोड में पैरामीटर परिभाषित करने के लिए, इस मॉडल का पालन करें:

const functions = require('firebase-functions');
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.`);
  }
);

पैरामीटरयुक्त कॉन्फ़िगरेशन चर के साथ फ़ंक्शन को तैनात करते समय, फायरबेस सीएलआई पहले उनके मानों को स्थानीय .env फ़ाइलों से लोड करने का प्रयास करता है। यदि वे उन फाइलों में मौजूद नहीं हैं और कोई default सेट नहीं है, तो सीएलआई परिनियोजन के दौरान मूल्यों के लिए संकेत देगा, और फिर स्वचालित रूप से उनके मूल्यों को .env नामक एक .env फ़ाइल में सहेज लेगा .env.<project_ID> आपके functions/ निर्देशिका में:

$ 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> फ़ाइल को संस्करण नियंत्रण में जोड़ना उपयोगी हो सकता है।

सीएलआई व्यवहार कॉन्फ़िगर करें

पैरामीटर्स को एक Options ऑब्जेक्ट के साथ कॉन्फ़िगर किया जा सकता है जो यह नियंत्रित करता है कि सीएलआई मूल्यों के लिए कैसे संकेत देगा। निम्न उदाहरण एक फोन नंबर के प्रारूप को मान्य करने के लिए विकल्प सेट करता है, एक सरल चयन विकल्प प्रदान करने के लिए, और फायरबेस प्रोजेक्ट से स्वचालित रूप से एक चयन विकल्प को पॉप्युलेट करने के लिए:

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');
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');
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');
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 - फ़ंक्शन से जुड़े रीयलटाइम डेटाबेस इंस्टेंस का यूआरएल (अगर फायरबेस प्रोजेक्ट पर सक्षम है)।
  • storageBucket - फ़ंक्शन से जुड़ा क्लाउड स्टोरेज बकेट (यदि फायरबेस प्रोजेक्ट पर सक्षम है)।

ये फ़ंक्शन उपयोगकर्ता द्वारा परिभाषित स्ट्रिंग पैरामीटर की तरह सभी तरह से काम करते हैं, सिवाय इसके कि, चूंकि उनके मान हमेशा फायरबेस सीएलआई के लिए जाने जाते हैं, उनके मूल्यों को कभी भी परिनियोजन के लिए संकेत नहीं दिया जाएगा और न ही .env फ़ाइलों में सहेजा जाएगा।

गुप्त पैरामीटर

defineSecret() का उपयोग करके परिभाषित Secret प्रकार के पैरामीटर, स्ट्रिंग पैरामीटर का प्रतिनिधित्व करते हैं, जिनका मान क्लाउड सीक्रेट मैनेजर में संग्रहीत होता है। एक स्थानीय .env फ़ाइल के विरुद्ध जाँच करने और गुम होने पर फ़ाइल में एक नया मान लिखने के बजाय, गुप्त पैरामीटर क्लाउड सीक्रेट मैनेजर में अस्तित्व के विरुद्ध जाँच करते हैं, और परिनियोजन के दौरान एक नए रहस्य के मूल्य के लिए अंतःक्रियात्मक रूप से संकेत देते हैं।

इस तरह से परिभाषित गुप्त मापदंडों को अलग-अलग कार्यों के लिए बाध्य होना चाहिए जिनकी उन तक पहुंच होनी चाहिए:

const functions = require('firebase-functions');
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();
    //…

क्योंकि फ़ंक्शन के निष्पादन तक रहस्य के मान छिपे हुए हैं, आप अपने फ़ंक्शन को कॉन्फ़िगर करते समय उनका उपयोग नहीं कर सकते।

पर्यावरण चर

फायरबेस के लिए क्लाउड फ़ंक्शंस आपके एप्लिकेशन रनटाइम में .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
ग्रह = पृथ्वी

दर्शक = मनुष्य

दर्शक = देव मनुष्य दर्शक=प्रोड मानव

उन अलग-अलग फाइलों में मूल्यों को देखते हुए, आपके कार्यों के साथ तैनात पर्यावरण चर का सेट आपके लक्षित प्रोजेक्ट के आधार पर अलग-अलग होगा:

$ 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
  • प्रवेश बिंदु
  • 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_संशोधन
  • पत्तन
  • K_CONFIGURATION

संवेदनशील कॉन्फ़िगरेशन जानकारी को स्टोर और एक्सेस करें

.env फ़ाइलों में संग्रहीत पर्यावरण चर का उपयोग फ़ंक्शन कॉन्फ़िगरेशन के लिए किया जा सकता है, लेकिन आपको संवेदनशील जानकारी जैसे डेटाबेस क्रेडेंशियल्स या एपीआई कुंजियों को संग्रहीत करने का एक सुरक्षित तरीका नहीं मानना ​​​​चाहिए। यह विशेष रूप से महत्वपूर्ण है यदि आप अपनी .env फ़ाइलों को स्रोत नियंत्रण में जाँचते हैं।

संवेदनशील कॉन्फ़िगरेशन जानकारी संग्रहीत करने में आपकी सहायता करने के लिए, Firebase के लिए Cloud Functions Google क्लाउड सीक्रेट मैनेजर के साथ एकीकृत होता है। यह एन्क्रिप्टेड सेवा कॉन्फ़िगरेशन मानों को सुरक्षित रूप से संग्रहीत करती है, जबकि आवश्यकता पड़ने पर भी आपके कार्यों से आसान पहुंच की अनुमति देती है।

एक रहस्य बनाएँ और उपयोग करें

एक रहस्य बनाने के लिए, फायरबेस सीएलआई का उपयोग करें।

एक रहस्य बनाने और उपयोग करने के लिए:

  1. अपनी स्थानीय प्रोजेक्ट निर्देशिका के रूट से निम्न आदेश चलाएँ:

    firebase functions:secrets:set SECRET_NAME

  2. SECRET_NAME के ​​लिए एक मान दर्ज करें।

    सीएलआई एक सफलता संदेश देता है और चेतावनी देता है कि परिवर्तन को प्रभावी करने के लिए आपको कार्यों को तैनात करना होगा।

  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. क्लाउड फ़ंक्शंस परिनियोजित करें:

    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 का उपयोग करें। इस तरह रहस्यों को प्रबंधित करते समय, ध्यान रखें कि कुछ सीएलआई परिवर्तनों के लिए आपको संबंधित कार्यों को संशोधित करने और/या फिर से नियोजित करने की आवश्यकता होती है। विशेष रूप से:

  • जब भी आप किसी रहस्य के लिए एक नया मान सेट करते हैं, तो आपको उन सभी कार्यों को फिर से नियोजित करना चाहिए जो उस रहस्य को नवीनतम मान लेने के लिए संदर्भित करते हैं।
  • यदि आप किसी रहस्य को हटाते हैं, तो सुनिश्चित करें कि आपका कोई भी नियोजित कार्य उस रहस्य का संदर्भ नहीं देता है। हटाए गए गुप्त मान का उपयोग करने वाले फ़ंक्शन चुपचाप विफल हो जाएंगे।

यहां गुप्त प्रबंधन के लिए फायरबेस सीएलआई कमांड का सारांश दिया गया है:

# 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]

इन परिचालनों के बारे में अधिक जानकारी के लिए, सीएलआई सहायता देखने के आदेश के साथ -h पास करें।

रहस्य कैसे बिल किए जाते हैं

गुप्त प्रबंधक 6 सक्रिय गुप्त संस्करणों को बिना किसी लागत के अनुमति देता है। इसका मतलब है कि आपके पास Firebase प्रोजेक्ट में हर महीने 6 सीक्रेट बिना किसी लागत के हो सकते हैं।

डिफ़ॉल्ट रूप से, फायरबेस सीएलआई अप्रयुक्त गुप्त संस्करणों को स्वचालित रूप से नष्ट करने का प्रयास करता है, जहां उपयुक्त हो, जैसे कि जब आप रहस्य के नए संस्करण के साथ फ़ंक्शन तैनात करते हैं। साथ ही, आप functions:secrets:destroy और functions:secrets:prune उपयोग करके अप्रयुक्त रहस्यों को सक्रिय रूप से साफ कर सकते हैं।

गुप्त प्रबंधक एक गुप्त पर 10,000 बिल न किए गए मासिक एक्सेस संचालन की अनुमति देता है। फंक्शन इंस्टेंस केवल उनके runWith पैरामीटर में निर्दिष्ट रहस्यों को पढ़ते हैं, जब भी वे कोल्ड स्टार्ट करते हैं। यदि आपके पास बहुत सारे फ़ंक्शन इंस्टेंस बहुत सारे रहस्य पढ़ रहे हैं, तो आपकी परियोजना इस भत्ते को पार कर सकती है, जिस बिंदु पर आपसे $0.03 प्रति 10,000 एक्सेस ऑपरेशन का शुल्क लिया जाएगा।

अधिक जानकारी के लिए, सीक्रेट मैनेजर प्राइसिंग देखें।

एमुलेटर समर्थन

dotenv के साथ पर्यावरण कॉन्फ़िगरेशन को एक स्थानीय क्लाउड फ़ंक्शंस एमुलेटर के साथ इंटरऑपरेट करने के लिए डिज़ाइन किया गया है।

स्थानीय क्लाउड फ़ंक्शंस एमुलेटर का उपयोग करते समय, आप एक .env.local फ़ाइल सेट करके अपने प्रोजेक्ट के लिए पर्यावरण चर को ओवरराइड कर सकते हैं। .env.local की सामग्री को .env और प्रोजेक्ट-विशिष्ट .env फ़ाइल पर वरीयता दी जाती है।

उदाहरण के लिए, एक परियोजना में इन तीन फाइलों को शामिल किया जा सकता है जिनमें विकास और स्थानीय परीक्षण के लिए थोड़ा भिन्न मान शामिल हैं:

.env .env.dev .env.local
ग्रह = पृथ्वी

दर्शक = मनुष्य

दर्शक = देव मनुष्य दर्शक = स्थानीय मनुष्य

स्थानीय संदर्भ में शुरू होने पर, एम्यूलेटर दिखाए गए अनुसार पर्यावरण चर लोड करता है:

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

क्लाउड फ़ंक्शंस एमुलेटर में रहस्य और साख

क्लाउड फ़ंक्शंस एमुलेटर संवेदनशील कॉन्फ़िगरेशन जानकारी को संग्रहीत करने और एक्सेस करने के लिए रहस्यों के उपयोग का समर्थन करता है। डिफ़ॉल्ट रूप से, एमुलेटर एप्लिकेशन डिफ़ॉल्ट क्रेडेंशियल्स का उपयोग करके आपके उत्पादन रहस्यों तक पहुंचने का प्रयास करेगा। CI वातावरण जैसी कुछ स्थितियों में, अनुमति प्रतिबंधों के कारण एमुलेटर गुप्त मूल्यों तक पहुँचने में विफल हो सकता है।

पर्यावरण चर के लिए क्लाउड फ़ंक्शंस एमुलेटर समर्थन के समान, आप एक .secret.local फ़ाइल सेट करके गुप्त मानों को ओवरराइड कर सकते हैं। इससे आपके लिए स्थानीय स्तर पर अपने कार्यों का परीक्षण करना आसान हो जाता है, खासकर यदि आपके पास गुप्त मूल्य तक पहुंच नहीं है।

पर्यावरण विन्यास से माइग्रेट करना

यदि आप functions.config के साथ पर्यावरण कॉन्फ़िगरेशन का उपयोग कर रहे हैं, तो आप अपने मौजूदा कॉन्फ़िगरेशन को पर्यावरण चर ( dotenv प्रारूप में) के रूप में माइग्रेट कर सकते हैं। फायरबेस सीएलआई एक निर्यात आदेश प्रदान करता है जो आपकी निर्देशिका की .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 फ़ाइलों से हटा दें और उन्हें गुप्त प्रबंधक में सुरक्षित रूप से संग्रहीत करें।

आपको अपने फ़ंक्शन कोड को भी अपडेट करना होगा। कोई भी फ़ंक्शन जो functions.config का उपयोग करता है, उसे अब इसके बजाय process.env उपयोग करने की आवश्यकता होगी, जैसा कि 2nd gen में अपग्रेड में दिखाया गया है।

पर्यावरण विन्यास

firebase-functions v3.18.0 में पर्यावरण चर समर्थन जारी करने से पहले, functions.config() का उपयोग करके पर्यावरण विन्यास के लिए अनुशंसित दृष्टिकोण था। यह दृष्टिकोण अभी भी समर्थित है, लेकिन हम अनुशंसा करते हैं कि सभी नई परियोजनाएं इसके बजाय पर्यावरण चर का उपयोग करें, क्योंकि वे आपके कोड की पोर्टेबिलिटी का उपयोग करने और सुधारने में आसान हैं।

सीएलआई के साथ पर्यावरण विन्यास सेट करें

परिवेश डेटा संग्रहीत करने के लिए, आप Firebase CLI में firebase functions:config:set कमांड का उपयोग कर सकते हैं। संबंधित कॉन्फ़िगरेशन को एक साथ समूहित करने के लिए पीरियड्स का उपयोग करके प्रत्येक कुंजी को नामित किया जा सकता है। ध्यान रखें कि कुंजियों में केवल छोटे अक्षरों को ही स्वीकार किया जाता है ; अपरकेस वर्णों की अनुमति नहीं है।

उदाहरण के लिए, "कुछ सेवा" के लिए क्लाइंट आईडी और एपीआई कुंजी को स्टोर करने के लिए, आप चला सकते हैं:

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 क्लाउड रनटाइम कॉन्फ़िगरेशन API पर आधारित है।

किसी फ़ंक्शन में परिवेश कॉन्फ़िगरेशन तक पहुँचने के लिए functions.config उपयोग करें

आरक्षित firebase नामस्थान के तहत कुछ कॉन्फ़िगरेशन स्वचालित रूप से प्रदान किया जाता है। पर्यावरण विन्यास को आपके चल रहे फ़ंक्शन के अंदर functions.config() के माध्यम से उपलब्ध कराया जाता है। उपरोक्त कॉन्फ़िगरेशन का उपयोग करने के लिए, आपका कोड ऐसा दिखाई दे सकता है:

const functions = require('firebase-functions');
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}
  });
});

मॉड्यूल को प्रारंभ करने के लिए पर्यावरण कॉन्फ़िगरेशन का उपयोग करें

कुछ नोड मॉड्यूल बिना किसी कॉन्फ़िगरेशन के तैयार हैं। अन्य मॉड्यूल को सही ढंग से आरंभ करने के लिए अतिरिक्त कॉन्फ़िगरेशन की आवश्यकता होती है। हम अनुशंसा करते हैं कि आप इस कॉन्फ़िगरेशन को हार्ड-कोडिंग के बजाय पर्यावरण कॉन्फ़िगरेशन चर में संग्रहीत करें। यह आपको अपने कोड को और अधिक पोर्टेबल रखने में मदद करता है, जिससे आप अपने एप्लिकेशन को ओपन सोर्स कर सकते हैं या प्रोडक्शन और स्टेजिंग वर्जन के बीच आसानी से स्विच कर सकते हैं।

उदाहरण के लिए, स्लैक नोड एसडीके मॉड्यूल का उपयोग करने के लिए, आप इसे लिख सकते हैं:

const functions = require('firebase-functions');
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 क्लाउड द्वारा पॉप्युलेट किए गए , साथ ही फायरबेस-विशिष्ट पर्यावरण चर शामिल हैं:

process.env.FIREBASE_CONFIG : निम्न Firebase प्रोजेक्ट कॉन्फ़िगरेशन जानकारी प्रदान करता है:

{
  databaseURL: 'https://databaseName.firebaseio.com',
  storageBucket: 'projectId.appspot.com',
  projectId: 'projectId'
}

जब आप बिना किसी तर्क के Firebase Admin SDK को इनिशियलाइज़ करते हैं तो यह कॉन्फ़िगरेशन अपने आप लागू हो जाता है। यदि आप जावास्क्रिप्ट में फ़ंक्शन लिख रहे हैं, तो इस तरह आरंभ करें:

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

यदि आप टाइपस्क्रिप्ट में फ़ंक्शन लिख रहे हैं, तो इस तरह आरंभ करें:

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

यदि आपको सेवा खाता क्रेडेंशियल्स का उपयोग करके डिफ़ॉल्ट प्रोजेक्ट कॉन्फ़िगरेशन के साथ एडमिन एसडीके को इनिशियलाइज़ करने की आवश्यकता है, तो आप फ़ाइल से क्रेडेंशियल्स लोड कर सकते हैं और उन्हें इस तरह FIREBASE_CONFIG में जोड़ सकते हैं:

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

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