Ortamınızı yapılandırma


Fonksiyonlarınız için genellikle üçüncü taraf API anahtarları veya ayarlanabilir ayarlar. Cloud Functions için Firebase SDK'sının sunduğu avantajlar bu verileri kolayca depolayıp alabilmenizi sağlayan yerleşik ortam yapılandırması veri türünü ifade eder.

Üç seçenekten birini belirleyebilirsiniz:

  • Parametre haline getirilmiş yapılandırma (çoğu senaryo için önerilir). Bu, güçlü bir şekilde yazılmış bir ortam sağlar sırasında doğrulanan parametrelerle yapılandırmanın hataları önler ve hata ayıklamayı basitleştirir.
  • Ortam değişkenlerinin dosya tabanlı yapılandırması. Bu yaklaşımda, manuel olarak bir Yükleme için dotenv dosyası değişkenlerine odaklanmalıdır.
  • Firebase CLI ile çalışma zamanı ortam yapılandırması ve functions.config (yalnızca Cloud Functions (1. nesil)) için geçerlidir.

Çoğu kullanım durumu için parametre haline getirilmiş yapılandırma önerilir. Bu yaklaşım yapılandırma değerlerini hem çalışma zamanında hem de dağıtım zamanında kullanılabilir hale getirir ve tüm parametreler geçerli bir değere sahip olmadığı sürece dağıtım engellenir. Buna karşılık, ortam değişkenleriyle yapılandırma dağıtım sırasında kullanılamaz gerekir.

Parametreli yapılandırma

Cloud Functions for Firebase, yapılandırmayı tanımlamak için kullanılan bir arayüz sunar parametrelerini kod tabanınıza bildirimsel olarak eklemeniz gerekir. Bu parametrelerin değeri işlev dağıtımı sırasında hem dağıtımı hem de çalışma zamanını ayarlarken kullanılabilir ne kadar iyi karşıladığını görebileceksiniz. Bu durumda CLI, dağıtımı engeller değer yoksa tüm parametreler geçerli bir değere sahip değilse.

Node.js

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

Python

from firebase_functions import https_fn
from firebase_functions.params import IntParam, StringParam

MIN_INSTANCES = IntParam("HELLO_WORLD_MIN_INSTANCES")
WELCOME_MESSAGE = StringParam("WELCOME_MESSAGE")

# To use configured parameters inside the config for a function, provide them
# directly. To use them at runtime, call .value() on them.
@https_fn.on_request(min_instances=MIN_INSTANCES)
def hello_world(req):
    return https_fn.Response(f'{WELCOME_MESSAGE.value()}! I am a function!')

Parametreleştirilmiş yapılandırma değişkenleriyle bir işlev dağıtırken Firebase CLI, önce yerel .env dosyalarından değerlerini yüklemeye çalışır. Şu durumda: bu dosyalarda mevcut değilse ve default ayarlanmamışsa CLI, ve sonra bunların değerlerini otomatik olarak bir functions/ dizininizde .env.<project_ID> adlı .env dosyası:

$ 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

Geliştirme iş akışınıza bağlı olarak, oluşturulan .env.<project_ID> dosyasını sürüm denetimine eklemek yararlı olabilir.

Global kapsamda parametreleri kullanma

Dağıtım sırasında işlev kodunuz, parametreleri gerçek değerler içeriyor. Diğer bir deyişle, uygulanması dağıtım hatasına yol açar. Bir parametresini kullanıyorsanız, ilk kullanıma hazırlama geri çağırmasını kullanın. onInit() Bu geri çağırma, üretimde herhangi bir işlev çalıştırılmadan önce çalışır ancak sırasında çağrılmadığından emin olun. Bu sayede, parametrelerin değer.

Node.js

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

const apiKey = defineSecret('GOOGLE_API_KEY');

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

Python

from firebase_functions.core import init
from firebase_functions.params import StringParam, PROJECT_ID
import firebase_admin
import vertexai

location = StringParam("LOCATION")

x = "hello"

@init
def initialize():
  # Note: to write back to a global, you'll need to use the "global" keyword
  # to avoid creating a new local with the same name.
  global x
  x = "world"
  firebase_admin.initialize_app()
  vertexai.init(PROJECT_ID.value, location.value)

Secret türünde parametreler kullanırsanız bunların yalnızca kullanılabilir olduğunu unutmayın gizli anahtarı sınırlayan fonksiyonların işlemindedir. Gizli anahtar bağlıysa bazı işlevlerde bulunuyorsa, kullanmadan önce secret.value() öğesinin yanlış olup olmadığını kontrol edin.

KSA davranışını yapılandırın

Parametreler, KSA'nın nasıl çalıştığını kontrol eden bir Options nesnesiyle yapılandırılabilir. değerler istemi oluşturur. Aşağıdaki örnekte, bir telefon numarası biçimi, basit bir seçim seçeneği sunmak ve bir seçim seçeneğini Firebase projesinden otomatik olarak doldurun:

Node.js

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: params.select(["odd", "even"])});

const memory = defineInt("MEMORY", {
  description: "How much memory do you need?",
  input: params.select({ "micro": 256, "chonky": 2048 }),
});

const extensions = defineList("EXTENSIONS", {
  description: "Which file types should be processed?",
  input: params.multiSelect(["jpg", "tiff", "png", "webp"]),
});

const storageBucket = defineString('BUCKET', {
  description: "This will automatically
populate the selector field with the deploying Cloud Project’s
storage buckets",
  input: params.PICK_STORAGE_BUCKET,
});

Python

from firebase_functions.params import (
    StringParam,
    ListParam,
    TextInput,
    SelectInput,
    SelectOptions,
    ResourceInput,
    ResourceType,
)

MIN_INSTANCES = IntParam("HELLO_WORLD_MIN_INSTANCES")

WELCOME_MESSAGE = StringParam(
    "WELCOME_MESSAGE",
    default="Hello World",
    description="The greeting that is returned to the caller of this function",
)

ONLY_PHONE_NUMBERS = StringParam(
    "PHONE_NUMBER",
    input=TextInput(
        validation_regex="\d{3}-\d{3}-\d{4}",
        validation_error_message="Please enter a phone number in the format XXX-YYY-XXX",
    ),
)

SELECT_OPTION = StringParam(
    "PARITY",
    input=SelectInput([SelectOptions(value="odd"), SelectOptions(value="even")]),
)

STORAGE_BUCKET = StringParam(
    "BUCKET",
    input=ResourceInput(type=ResourceType.STORAGE_BUCKET),
    description="This will automatically populate the selector field with the deploying Cloud Project's storage buckets",
)

Parametre türleri

Parametreli yapılandırma, parametre değerleri için güçlü yazma imkanı sağlar ve Cloud Secret Manager'ın gizli anahtarları da desteklenir. Desteklenen türler şunlardır:

  • Gizli Anahtar
  • Dize
  • Boole
  • Tamsayı
  • Kayan
  • Liste (Node.js)

Parametre değerleri ve ifadeleri

Firebase, parametrelerinizi hem dağıtım sırasında hem de işleviniz sırasında değerlendirir yürütülüyor. Bu ikili ortamlar nedeniyle, ve bunları kullanarak uygulamanızın çalışma zamanı seçeneklerini işlevlerine dahildir.

İşlevinize çalışma zamanı seçeneği olarak bir parametre iletmek için parametreyi doğrudan iletin:

Node.js

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

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

Python

from firebase_functions import https_fn
from firebase_functions.params import IntParam

MIN_INSTANCES = IntParam("HELLO_WORLD_MIN_INSTANCES")

@https_fn.on_request(min_instances=MIN_INSTANCES)
def hello_world(req):
    ...

Ayrıca, dönüşüm izleme özelliğinin ne anlama geldiğini öğrenmek için bir parametreyle yerine yerleşik karşılaştırıcıları kullanmanız gerekir. değeri kontrol edin:

Node.js

const { onRequest } = require('firebase-functions/v2/https');
const environment = params.defineString(‘ENVIRONMENT’, {default: 'dev'});

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

Python

from firebase_functions import https_fn
from firebase_functions.params import IntParam, StringParam

ENVIRONMENT = StringParam("ENVIRONMENT", default="dev")
MIN_INSTANCES = ENVIRONMENT.equals("PRODUCTION").then(10, 0)

@https_fn.on_request(min_instances=MIN_INSTANCES)
def hello_world(req):
    ...

Yalnızca çalışma zamanında kullanılan parametreler value işleviyle erişildi:

Node.js

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

Python

from firebase_functions import https_fn
from firebase_functions.params import StringParam

WELCOME_MESSAGE = StringParam("WELCOME_MESSAGE")

@https_fn.on_request()
def hello_world(req):
    return https_fn.Response(f'{WELCOME_MESSAGE.value()}! I am a function!')

Yerleşik parametreler

Cloud Functions SDK'sı şu önceden tanımlanmış üç parametre sunar: firebase-functions/params alt paketi:

Node.js

  • projectID — işlevin çalıştırıldığı Cloud projesi.
  • databaseURL: ilişkilendirilmiş Realtime Database örneğinin URL'si işleviyle birlikte (Firebase projesinde etkinleştirilmişse).
  • storageBucket: İşlevle ilişkili Cloud Storage paketi (Firebase projesinde etkinleştirilmişse).

Python

  • PROJECT_ID — işlevin çalıştırıldığı Cloud projesi.
  • DATABASE_URL: ilişkilendirilmiş Realtime Database örneğinin URL'si işleviyle birlikte (Firebase projesinde etkinleştirilmişse).
  • STORAGE_BUCKET: İşlevle ilişkili Cloud Storage paketi (Firebase projesinde etkinleştirilmişse).

Bunlar, kullanıcı tanımlı dize dışında tüm açılardan ölçebilir. Bunun nedeni, bu parametrelerin değerleri her zaman Firebase CLI'ı kullanıyorsanız bunların değerleri dağıtımda .env dosyaya kaydedildi.

Gizli anahtar parametreleri

defineSecret() kullanılarak tanımlanan Secret türündeki parametreler, dizeyi temsil eder parametreleridir. Şunun yerine: yerel bir .env dosyasıyla karşılaştırarak kontrol eder ve eksik, gizli parametreler ise Cloud Secret Manager'daki mevcut olup olmadığını kontrol eder. dağıtım sırasında yeni bir gizli anahtarın değerini etkileşimli olarak isteme.

Bu şekilde tanımlanan gizli anahtar parametreleri, gereken diğer kişiler:

Node.js

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

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

Python

from firebase_functions import https_fn
from firebase_functions.params import SecretParam

DISCORD_API_KEY = SecretParam('DISCORD_API_KEY')

@https_fn.on_request(secrets=[DISCORD_API_KEY])
def post_to_discord(req):
    api_key = DISCORD_API_KEY.value

Gizli anahtar değerleri, işlev yürütülünceye kadar gizli tutulur. Bu nedenle, bunları, işlevinizi yapılandırırken kullanamazsınız.

Ortam değişkenleri

Cloud Functions for Firebase, Dotenv .env dosyasında belirtilen ortam değişkenlerini iki katı olabilir. Ortam değişkenleri dağıtıldıktan sonra process.env arayüzü (Node.js tabanlı projelerde) veya os.environ ( Python tabanlı projeler).

Ortamınızı bu şekilde yapılandırmak için projenizde bir .env dosyası oluşturun. istediğiniz değişkenleri ekleyip dağıtın:

  1. functions/ dizininizde bir .env dosyası oluşturun:

    # Directory layout:
    #   my-project/
    #     firebase.json
    #     functions/
    #       .env
    #       package.json
    #       index.js
    
  2. Düzenlemek için .env dosyasını açın ve istediğiniz anahtarları ekleyin. Örneğin:

    PLANET=Earth
    AUDIENCE=Humans
    
  3. İşlevleri dağıtın ve ortam değişkenlerinin yüklendiğini doğrulayın:

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

Özel ortam değişkenleriniz dağıtıldıktan sonra işlev kodunuz bunlara erişebilir:

Node.js

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

Python

import os

@https_fn.on_request()
def hello(req):
    return https_fn.Response(
        f"Hello {os.environ.get('PLANET')} and {os.environ.get('AUDIENCE')}"
    )

Birden fazla ortam değişkeni grubunu dağıtma

Firebase'iniz için alternatif bir ortam değişkenleri grubuna ihtiyacınız varsa hazırlık ve üretim gibi), belirli görevleri .env.<project or alias> dosyanızı ve ortam değişkenlerini de dahil etmelisiniz. Ortam değişkenlerinin .env ve projeye özel .env dosyaları (varsa) , dağıtılan tüm işlevlere dahil edilir.

Örneğin bir projede, üzerinde Geliştirme ve üretim için farklı değerler:

.env .env.dev .env.prod
PLANET=Dünya

KİTLE=İnsanlar

KİTLE=Dev İnsanlar KİTLE=Üretken İnsanlar

Bu ayrı dosyalardaki değerler göz önünde bulundurulduğunda, ortam değişkenleri kümesi işlevlerinizin dağıtılması hedef projenize bağlı olarak değişecektir:

$ 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

Ayrılmış ortam değişkenleri

Bazı ortam değişkeni anahtarları dahili kullanım için ayrılmıştır. Şunlardan hiçbirini kullanmayın: .env dosyalarınızda şu anahtarları kullanın:

  • X_GOOGLE_ ile başlayan tüm anahtarlar
  • EXT_ tarihinden itibaren tüm anahtarlar
  • FIREBASE_ ile başlayan tüm anahtarlar
  • Şu listedeki herhangi bir tuş:
  • CLOUD_RUNTIME_CONFIG
  • ENTRY_POINT (GİRİŞ_POINT)
  • GSİO_PROJESİ
  • GCLOUD_PROJESİ
  • GOOGLE_CLOUD_PROJECT
  • FUNCTION_TRIGGER_TYPE
  • İŞLEV_ADI
  • FUNCTION_MEMORY_MB
  • FUNCTION_TIMEOUT_SEC
  • İŞLEV_KİMLİĞİ
  • FUNCTION_REGION
  • İŞLEV_HEDEFİ
  • FUNCTION_SIGNATURE_TYPE
  • K_SERVICE
  • K_REVISION
  • BAĞLANTI NOKTASI
  • K_YAPILANDIRMA

Hassas yapılandırma bilgilerini depolama ve bunlara erişme

.env dosyalarında depolanan ortam değişkenleri işlev için kullanılabilir yapılandırma vardır, ancak bunları, hassas verileri depolamak için güvenli bir yol olarak bilgi edinmek için kullanabilirsiniz. Bu, özellikle .env dosyalarınızı kaynak kontrolüne kontrol ederseniz önemlidir.

Cloud Functions for Firebase, hassas yapılandırma bilgilerini saklamanıza yardımcı olur. Google Cloud ile entegre olur Secret Manager (Gizli Anahtar Yöneticisi). Bu şifrelenmiş hizmet, yapılandırma değerlerini güvenli bir şekilde saklar. gerektiğinde işlevlerinize kolayca erişebilmenizi sağlar.

Gizli anahtar oluşturma ve kullanma

Gizli anahtar oluşturmak için Firebase CLI'ı kullanın.

Gizli anahtar oluşturmak ve kullanmak için:

  1. Yerel proje dizininizin kök dizininden aşağıdaki komutu çalıştırın:

    firebase functions:secrets:set SECRET_NAME
    .

  2. SECRET_NAME için bir değer girin.

    CLI, başarı mesajını tekrarlar ve işlevleri dağıtmanız gerektiği konusunda uyarır geçerlilik kazanması gerekir.

  3. Dağıtmadan önce, işlev kodunuzun runWith parametresini kullanarak işlevin gizli anahtara erişmesine izin verdiğinden emin olun:

    Node.js

    const { onRequest } = require('firebase-functions/v2/https');
    
    exports.processPayment = onRequest(
      { secrets: ["SECRET_NAME"] },
      (req, res) => {
        const myBillingService = initializeBillingService(
          // reference the secret value
          process.env.SECRET_NAME
        );
        // Process the payment
      }
    );

    Python

    import os
    from firebase_functions import https_fn
    
    @https_fn.on_request(secrets=["SECRET_NAME"])
    def process_payment(req):
        myBillingService = initialize_billing(key=os.environ.get('SECRET_NAME'))
        # Process the payment
        ...
    
  4. Cloud Functions'ı dağıtın:

    firebase deploy --only functions

    Artık bu değişkene diğer herhangi bir ortam değişkeni gibi erişebileceksiniz. Bunun aksine, runWith gizli anahtara erişmeye çalıştığında tanımlanmamış bir değer alıyor:

    Node.js

    exports.anotherEndpoint = 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
    });
    

    Python

    @https_fn.on_request()
    def another_endpoint(req):
        return https_fn.Response(f"The secret API key is {os.environ.get("SECRET_NAME")}")
        # Responds with "The secret API key is None" because the `secrets` parameter is missing.
    

İşleviniz dağıtıldıktan sonra gizli anahtar değerine erişebilir. Yalnızca özel olarak runWith parametresinde bir gizli anahtar içeren işlevler bu gizli anahtara ortam değişkeni olarak erişebilir. Böylece ekipteki herkesin yalnızca ihtiyaç duydukları yerde kullanılabilmesini sağlayarak yanlışlıkla bir sır sızdırabilirsiniz.

Gizli anahtarları yönetme

Gizli anahtarlarınızı yönetmek için Firebase CLI'ı kullanın. Sırları bu şekilde yönetirken bazı CLI değişikliklerinin bazı öğeleri değiştirmenizi ve/veya yeniden dağıtmanızı gerektirdiğini ilişkili işlevler. Özellikle:

  • Bir gizli anahtar için yeni bir değer belirlediğinizde, tüm gizli anahtarların referans işlevler en güncel değeri elde etmelerini sağlar.
  • Bir gizli anahtarı silerseniz dağıtılan işlevlerinizden hiçbirinin bu gizli anahtara referansta bulunur. Gizli anahtar değeri kullanan işlevler işlem yapılmadan başarısız olur.

Gizli anahtar yönetimi için Firebase CLI komutlarının özeti aşağıda verilmiştir:

# 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 ve destroy komutları için isteğe bağlı sürümü sağlayabilirsiniz parametresini kullanabilirsiniz. Örneğin:

functions:secrets:access SECRET_NAME[@VERSION]

Bu işlemler hakkında daha fazla bilgi için -h komutunu şu komutla geçirin: KSA yardımını görüntüleyin.

Gizli anahtarlar nasıl faturalandırılır?

Secret Manager 6 etkin gizli anahtara izin verir sürümler ücretsiz deneyin. Bu, Firebase'de ayda 6 gizli anahtarınızın olabileceği anlamına gelir. teşvik edebilirsiniz.

Firebase CLI, varsayılan olarak kullanılmayan gizli anahtarları otomatik olarak kaldırmayı dener uygun durumlarda (ör. yeni bir sürümle işlevleri dağıttığınızda) sunuyor. Ayrıca, kullanılmayan gizli anahtarları aktif şekilde temizlemek için functions:secrets:destroy ve functions:secrets:prune.

Secret Manager,tek bir aynı anda 10.000 faturalandırılmamış aylık erişim işlemine sır. İşlev örnekleri, yalnızca runWith özelliğinde belirtilen gizli anahtarları okur parametresini kullanabilirsiniz. Çok sayıda işlev örneğiniz varsa çok fazla sır okuyorsanız projeniz bu hakkı aşabilir ve böylelikle sizden 10.000 erişim işlemi başına 0,03 ABD doları ücret alınır.

Daha fazla bilgi için bkz. Secret Manager Fiyatlandırması.

Emülatör desteği

Dotenv ile ortam yapılandırması, yerel Cloud Functions emülatörü.

Yerel bir Cloud Functions emülatörü kullanırken ortamı geçersiz kılabilirsiniz. değişkenlerini kullanarak projeniz için .env.local dosya oluşturun. İçindekiler .env.local, .env dosyasına ve projeye özel .env dosyasına göre önceliklidir.

Örneğin bir projede, üzerinde geliştirme ve yerel test için farklı değerler:

.env .env.dev .env.local
PLANET=Dünya

KİTLE=İnsanlar

KİTLE=Dev İnsanlar KİTLE=Yerel İnsanlar

Emülatör, yerel bağlamda başlatıldığında ortamı yükler değişkenlerini aşağıda gösterilmiştir:

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

Cloud Functions emülatöründe gizli anahtarlar ve kimlik bilgileri

Cloud Functions emülatörü, gizli anahtarların şu amaçlarla kullanılmasını destekler: hassas yapılandırma bilgilerini depolama ve bunlara erişme. Varsayılan olarak emülatör, üretim gizli anahtarlarınıza uygulama varsayılan kimlik bilgileri ile erişemez. CI ortamları gibi belirli durumlarda emülatör, gizli anahtar değerlerinin kurtarılmasını sağlayın.

Ortam değişkenleri için Cloud Functions emülatör desteğine benzer şekilde, .secret.local dosyası oluşturarak gizli anahtar değerlerini geçersiz kılabilirsiniz. Bu da, özellikle de erişiminiz yoksa işlevlerinizi yerel olarak test etmenizi anahtar değerine ekleyin.

Ortam yapılandırmasından taşıma

functions.config üzerinde ortam yapılandırmasını kullanıyorsanız mevcut yapılandırmanızı ortam değişkenleri olarak taşıyabilir ( dotenv biçiminde olması gerekir). Firebase CLI, yapılandırma çıkışını üreten bir dışa aktarma komutu sağlar dizininizin .firebaserc dosyasında listelenen her takma ad veya proje için (aşağıdaki örnekte local, dev ve prod) .env dosyaları olarak tanımlanmaktadır.

Taşımak için mevcut ortam yapılandırmalarınızı firebase functions:config:export komutu:

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

Bazı durumlarda, alan adını değiştirmek için bir önek girmenizin isteneceğini unutmayın. dışa aktarılan ortam değişken anahtarlarını görebilirsiniz. Bunun nedeni, tüm yapılandırmaların dönüştürülebilir çünkü geçersiz olabilir veya olabilir ayrılmış ortam değişken anahtarına gidin.

Oluşturulan .env dosyalarının içeriğini dikkatlice incelemenizi öneririz. veya .env dosyalarını kaynak kontrolüne kontrol edin. Eğer tüm değerler hassastır ve sızdırılmaması gerekir. Bunları .env cihazınızdan kaldırın. dosyalarınızı güvenli bir şekilde burada Bunun yerine Secret Manager'ı kullanın.

İşlevler kodunuzu da güncellemeniz gerekir. Kullanılan tüm işlevler functions.config için artık aşağıda gösterildiği gibi bunun yerine process.env kullanılması gerekiyor Ortam değişkenleri.