Catch up on everything announced at Firebase Summit, and learn how Firebase can help you accelerate app development and run your app with confidence. 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.`);
  }
);

पैरामीटरयुक्त कॉन्फ़िगरेशन चर के साथ फ़ंक्शन को परिनियोजित करते समय, Firebase CLI पहले स्थानीय .env फ़ाइलों से उनके मान लोड करने का प्रयास करता है। यदि वे उन फाइलों में मौजूद नहीं हैं और कोई default सेट नहीं है, तो सीएलआई परिनियोजन के दौरान मूल्यों के लिए संकेत देगा, और फिर स्वचालित रूप से उनके मानों को .env.<project_ID> नाम की एक .env फ़ाइल में आपके 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 ऑब्जेक्ट के साथ कॉन्फ़िगर किया जा सकता है जो नियंत्रित करता है कि सीएलआई मूल्यों के लिए कैसे संकेत देगा। निम्न उदाहरण फ़ोन नंबर के प्रारूप को मान्य करने के लिए, एक सरल चयन विकल्प प्रदान करने के लिए, और स्वचालित रूप से 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"})

पैरामीटर प्रकार

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

  • गुप्त
  • डोरी
  • बूलियन
  • पूर्णांक
  • पानी पर तैरना

पैरामीटर मान और भाव

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

रनटाइम विकल्प के रूप में अपने फ़ंक्शन में पैरामीटर पास करने के लिए, इसे सीधे पास करें:

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

अंतर्निहित पैरामीटर

क्लाउड फ़ंक्शंस एसडीके तीन पूर्व-निर्धारित पैरामीटर प्रदान करता है, जो firebase-functions/params सबपैकेज से उपलब्ध हैं:

  • projectId - क्लाउड प्रोजेक्ट जिसमें फ़ंक्शन चल रहा है।
  • databaseUrl यूआरएल - फ़ंक्शन से जुड़े रीयलटाइम डेटाबेस इंस्टेंस का यूआरएल (अगर फायरबेस प्रोजेक्ट पर सक्षम है)।
  • storageBucket — फंक्शन से जुड़ी क्लाउड स्टोरेज बकेट (अगर फायरबेस प्रोजेक्ट पर सक्षम है)।

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

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

Secret प्रकार के पैरामीटर, defineSecret() का उपयोग करके परिभाषित किए गए, स्ट्रिंग पैरामीटर का प्रतिनिधित्व करते हैं, जिनका मान क्लाउड सीक्रेट मैनेजर में संग्रहीत होता है। स्थानीय .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();
    //…

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

पर्यावरण चर

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
ग्रह = पृथ्वी

श्रोता = मनुष्य

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

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

$ 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
  • प्रवेश बिंदु
  • जीसीपी_प्रोजेक्ट
  • 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_REVISION
  • बंदरगाह
  • K_CONFIGURATION

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

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

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

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

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

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

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

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

यहां गुप्त प्रबंधन के लिए 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 सक्रिय गुप्त संस्करणों की अनुमति देता है। इसका मतलब है कि आप बिना किसी लागत के फायरबेस प्रोजेक्ट में प्रति माह 6 रहस्य रख सकते हैं।

डिफ़ॉल्ट रूप से, फायरबेस सीएलआई जहां उपयुक्त हो, अप्रयुक्त गुप्त संस्करणों को स्वचालित रूप से नष्ट करने का प्रयास करता है, जैसे कि जब आप गुप्त के नए संस्करण के साथ कार्यों को तैनात करते हैं। साथ ही, आप functions:secrets:destroy and 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

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

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

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

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

यदि आप functions.config के साथ पर्यावरण कॉन्फ़िगरेशन का उपयोग कर रहे हैं, तो आप अपने मौजूदा कॉन्फ़िगरेशन को पर्यावरण चर ( dotenv प्रारूप में) के रूप में माइग्रेट कर सकते हैं। dev सीएलआई एक निर्यात कमांड प्रदान करता है जो आपकी निर्देशिका की .firebaserc फ़ाइल में सूचीबद्ध प्रत्येक उपनाम या प्रोजेक्ट के कॉन्फ़िगरेशन को local फ़ाइलों के रूप में .env करता prod

माइग्रेट करने के लिए, अपने मौजूदा परिवेश कॉन्फ़िगरेशन को 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 का उपयोग करने की आवश्यकता होगी, जैसा कि पर्यावरण चर में दिखाया गया है।

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

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

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

पर्यावरण डेटा स्टोर करने के लिए, आप फायरबेस सीएलआई में 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 में पर्यावरण कॉन्फ़िगरेशन तक पहुंचने के लिए 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 की 1 की 2 कॉन्फिग से निर्दिष्ट कीज़ को हटाता है
  • firebase functions:config:clone --from <fromProject> किसी अन्य प्रोजेक्ट के वातावरण को वर्तमान में सक्रिय प्रोजेक्ट में क्लोन करता है।

स्वचालित रूप से आबादी वाले पर्यावरण चर

ऐसे पर्यावरण चर हैं जो स्वचालित रूप से फ़ंक्शन रनटाइम और स्थानीय रूप से एमुलेटेड फ़ंक्शंस में पॉप्युलेट होते हैं। इनमें वे शामिल हैं जिन्हें Google क्लाउड द्वारा पॉप्युलेट किया गया है , साथ ही एक Firebase-विशिष्ट परिवेश चर भी शामिल है:

process.env.FIREBASE_CONFIG : निम्नलिखित फायरबेस प्रोजेक्ट कॉन्फिग जानकारी प्रदान करता है:

{
  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();

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

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

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