Ortamınızı yapılandırma


Çoğu zaman, işlevleriniz için üçüncü taraf API anahtarları veya ayarlanabilir ayarlar gibi ek yapılandırmaya ihtiyacınız olur. Cloud Functions için Firebase SDK'sı, projenizde bu tür verileri depolamayı ve almayı kolaylaştıran yerleşik ortam yapılandırması sunar.

Üç seçenekten birini belirleyebilirsiniz:

  • Parametre haline getirilmiş yapılandırma (çoğu senaryo için önerilir). Bu, dağıtım sırasında doğrulanan parametrelerle güçlü bir şekilde yazılmış ortam yapılandırması sağlar. Bu sayede hataları önler ve hata ayıklamayı basitleştirir.
  • Ortam değişkenlerinin dosya tabanlı yapılandırması. Bu yaklaşımla, ortam değişkenlerini yüklemek için manuel olarak bir dotenv dosyası oluşturursunuz.
  • Firebase CLI ve functions.config (yalnızca Cloud Functions (1. nesil)) ile çalışma zamanı ortam yapılandırması.

Ç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.

Parametreli yapılandırma

Cloud Functions for Firebase, kod tabanınızda yapılandırma parametrelerini bildirimli olarak tanımlamak için bir arayüz sunar. Bu parametrelerin değeri hem işlev dağıtımı sırasında, hem de dağıtım ve çalışma zamanı seçeneklerini ayarlarken ve yürütme sırasında kullanılabilir. Bu, tüm parametreler geçerli bir değere sahip olmadığı sürece KSA'nın, dağıtımı engelleyeceği anlamına gelir.

Kodunuzda parametreleri tanımlamak için şu modeli izleyin:

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

Parametreleştirilmiş yapılandırma değişkenleriyle bir işlev dağıtırken Firebase CLI, önce yerel .env dosyalarından bunların değerlerini yüklemeye çalışır. Bu dosyalarda yoksa ve default ayarlanmamışsa CLI, dağıtım sırasında değerleri ister ve ardından değerlerini otomatik olarak functions/ dizininizdeki .env.<project_ID> adlı bir .env dosyasına kaydeder:

$ 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, parametreleriniz gerçek değerlere ulaşmadan önce işlev kodunuz yüklenir ve incelenir. Bu, global kapsam sırasında parametre değerlerinin getirilmesinin dağıtım hatasına yol açacağı anlamına gelir. Genel bir değeri başlatmak için parametre kullanmak istediğiniz durumlarda ilk kullanıma hazırlama geri çağırmasını onInit() kullanın. Bu geri çağırma, üretimde çalıştırılan işlevlerden önce çalışır ancak dağıtım sırasında çağrılmaz. Bu nedenle, parametrenin değerine erişmek için güvenli bir yerdir.

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

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

Parametreler, KSA'nın değerleri nasıl isteyeceğini kontrol eden bir Options nesnesiyle yapılandırılabilir. Aşağıdaki örnekte telefon numarasının biçimini doğrulama, basit bir seçim seçeneği sunma ve Firebase projesinden bir seçim seçeneğini otomatik olarak doldurma seçenekleri gösterilmektedir:

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"})

Parametre türleri

Parametreli yapılandırma, parametre değerlerinin güçlü bir şekilde yazılmasını sağlar ve Cloud Secret Manager'daki gizli anahtarları destekler. Desteklenen türler şunlardır:

  • Gizli Anahtar
  • Dize
  • Boole
  • Tam sayı
  • Kayan

Parametre değerleri ve ifadeleri

Firebase, parametrelerinizi hem dağıtım sırasında hem de işleviniz çalışırken değerlendirir. Bu ikili ortam nedeniyle, parametre değerlerini karşılaştırırken ve işlevleriniz için çalışma zamanı seçeneklerini ayarlarken bu değerleri kullanırken biraz daha dikkatli olmanız gerekir.

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

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) => {
    //…

Ayrıca, hangi seçeneği seçeceğinizi öğrenmek için bir parametreyle karşılaştırma yapmanız gerekiyorsa değeri kontrol etmek yerine yerleşik karşılaştırıcılar kullanmanız gerekir:

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) => {
    //…

Yalnızca çalışma zamanında kullanılan parametrelere ve parametre ifadelerine, value işlevleriyle erişilebilir:

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

Yerleşik parametreler

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

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

Bunlar, tüm açılardan kullanıcı tanımlı dize parametreleri gibi çalışır. Ancak, değerleri her zaman Firebase CLI tarafından bilindiği için değerleri hiçbir zaman dağıtımda istenmez veya .env dosyalarına kaydedilmez.

Gizli anahtar parametreleri

defineSecret() kullanılarak tanımlanan Secret türündeki parametreler, Cloud Secret Manager'da depolanan bir değere sahip dize parametrelerini temsil eder. Gizli anahtar parametreleri, yerel bir .env dosyasıyla karşılaştırıp eksikse dosyaya yeni bir değer yazmak yerine, Cloud Secret Manager'daki mevcut olup olmadığını kontrol eder ve dağıtım sırasında yeni bir gizli anahtarın değerini etkileşimli olarak ister.

Bu şekilde tanımlanan gizli anahtar parametreleri, bunlara erişmesi gereken bağımsız işlevlere bağlı olmalıdır:

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();
    //…

Gizli anahtarların değerleri işlev yürütülünceye kadar gizlendiğinden, işlevinizi yapılandırırken bunları kullanamazsınız.

Ortam değişkenleri

Cloud Functions for Firebase, .env dosyasında belirtilen ortam değişkenlerini uygulamanızın çalışma zamanına yüklemek için dotenv dosya biçimini destekler. Ortam değişkenleri dağıtıldıktan sonra process.env arayüzü üzerinden okunabilir.

Ortamınızı bu şekilde yapılandırmak için projenizde bir .env dosyası oluşturun, istediğiniz değişkenleri ekleyin ve 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. Örnek:

    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 process.env söz dizimiyle erişebilir:

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

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

Firebase projeleriniz için alternatif bir ortam değişkenleri grubuna (ör. hazırlık ve üretim) ihtiyacınız varsa bir .env.<project or alias> dosyası oluşturun ve projeye özgü ortam değişkenlerinizi buraya yazın. .env dosyalarındaki ortam değişkenleri ve projeye özgü .env dosyaları (varsa), dağıtılan tüm işlevlere dahil edilir.

Örneğin, bir proje, geliştirme ve üretim için biraz farklı değerler içeren şu üç dosyayı içerebilir:

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

KİTLE=İnsanlar

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

Bu ayrı dosyalardaki değerlere göre, işlevlerinizle dağıtılan ortam değişkenleri grubu hedef projenize bağlı olarak değişiklik gösterir:

$ 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. .env dosyalarınızda şu anahtarların hiçbirini kullanmayı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 yapılandırması için kullanılabilir ancak bunları, veritabanı kimlik bilgileri veya API anahtarları gibi hassas bilgileri depolamak için güvenli bir yol olarak düşünmemelisiniz. Bu, özellikle .env dosyalarınızı kaynak kontrolünde kontrol ediyorsanız önemlidir.

Cloud Functions for Firebase, hassas yapılandırma bilgilerini saklamanıza yardımcı olmak amacıyla Google Cloud Secret Manager ile entegre olur. Bu şifrelenmiş hizmet, yapılandırma değerlerini güvenli bir şekilde depolar ve yine de gerektiğinde işlevlerinizden kolayca erişime olanak tanır.

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, bir başarı mesajını tekrarlar ve değişikliğin geçerli olması için işlevleri dağıtmanız gerektiği konusunda uyarır.

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

    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'ı dağıtın:

    firebase deploy --only functions

Artık bu değişkene diğer herhangi bir ortam değişkeni gibi erişebileceksiniz. Buna karşılık, runWith içinde gizli anahtarı belirtmeyen başka bir işlev gizli anahtara erişmeye çalışırsa tanımlanmamış bir değer alır:

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

İş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, ortam değişkeni olarak söz konusu gizli anahtara erişebilir. Bu, gizli anahtar değerlerinin yalnızca gerekli yerlerde kullanılabildiğinden emin olmanıza yardımcı olarak gizli anahtarları yanlışlıkla sızdırma riskini azaltır.

Gizli anahtarları yönetme

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

  • Bir gizli anahtar için yeni bir değer belirlediğinizde, en son değeri seçmeleri için bu gizli anahtara referans veren tüm işlevleri yeniden dağıtmanız gerekir.
  • Bir gizli anahtarı silerseniz dağıtılan işlevlerinizden hiçbirinin bu gizli anahtara referans vermediğinden emin olun. Silinmiş bir gizli anahtar değeri kullanan işlevler, sessizce 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ında belirli bir sürümü yönetmek için isteğe bağlı sürüm parametresini sağlayabilirsiniz. Örnek:

functions:secrets:access SECRET_NAME[@VERSION]

Bu işlemler hakkında daha fazla bilgi için CLI yardımını görüntülemek için komutuyla -h öğesini iletin.

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

Secret Manager, ücretsiz olarak 6 etkin gizli anahtar sürümüne olanak tanır. Bu, Firebase projesinde ücretsiz olarak ayda 6 gizli anahtara sahip olabileceğiniz anlamına gelir.

Firebase CLI, varsayılan olarak kullanılmayan gizli anahtar sürümlerini uygun durumlarda (ör. gizli anahtarın yeni sürümüyle işlevleri dağıttığınızda) otomatik olarak kaldırmayı dener. Ayrıca, functions:secrets:destroy ve functions:secrets:prune yardımıyla kullanılmayan gizli anahtarları etkin şekilde temizleyebilirsiniz.

Secret Manager,bir gizli anahtar üzerinde 10.000 faturalandırılmamış aylık erişim işlemine olanak tanır. İşlev örnekleri, her baştan başlatma işleminde runWith parametrelerinde belirtilen gizli anahtarları yalnızca okur. Çok sayıda gizli anahtar okuyan çok sayıda işlev örneğiniz varsa projeniz bu sınırı aşabilir ve bu durumda sizden 10.000 erişim işlemi başına 0,03 ABD doları ücret alınır.

Daha fazla bilgi için Secret Manager Fiyatlandırması bölümünü inceleyin.

Emülatör desteği

Dotenv içeren ortam yapılandırması, yerel bir Cloud Functions emülatörü ile birlikte çalışacak şekilde tasarlanmıştır.

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

Örneğin, bir proje, geliştirme ve yerel test için biraz farklı değerler içeren şu üç dosyayı içerebilir:

.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 değişkenlerini gösterildiği gibi yükler:

  $ 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ü, hassas yapılandırma bilgilerini depolamak ve bunlara erişmek için gizli anahtar kullanımını destekler. Varsayılan olarak emülatör, uygulama varsayılan kimlik bilgilerini kullanarak üretim gizli anahtarlarınıza erişmeye çalışır. CI ortamları gibi belirli durumlarda, emülatör izin kısıtlamaları nedeniyle gizli değerlere erişemeyebilir.

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

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

Ortam yapılandırmasını functions.config ile kullanıyorsanız mevcut yapılandırmanızı ortam değişkenleri olarak taşıyabilirsiniz (dotenv biçiminde). Firebase CLI, dizininizin .firebaserc dosyasında listelenen her takma ad veya projenin yapılandırmasını .env dosyası olarak veren bir dışa aktarma komutu sağlar (aşağıdaki örnekte local, dev ve prod).

Taşımak için mevcut ortam yapılandırmalarınızı firebase functions:config:export komutunu kullanarak dışa aktarın:

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, dışa aktarılan ortam değişken anahtarlarını yeniden adlandırmak için bir önek girmenizin isteneceğini unutmayın. Bunun nedeni, tüm yapılandırmaların geçersiz olabileceği veya ayrılmış ortam değişkeni anahtarı olabileceği için otomatik olarak dönüştürülememesidir.

İşlevlerinizi dağıtmadan veya .env dosyalarını kaynak kontrolüne kontrol etmeden önce, oluşturulan .env dosyalarının içeriğini dikkatlice incelemenizi öneririz. Değerleri hassas olan ve sızdırılmaması gerekiyorsa bunları .env dosyalarınızdan kaldırıp Secret Manager'da güvenli bir şekilde depolayın.

İşlevler kodunuzu da güncellemeniz gerekir. 2. nesle yükseltme bölümünde gösterildiği gibi, functions.config kullanan tüm işlevlerin artık bunun yerine process.env kullanması gerekiyor.

Ortam yapılandırması

firebase-functions v3.18.0 ürününde ortam değişkeni desteği sunulmadan önce, ortam yapılandırması için functions.config() kullanılması önerilir. Bu yaklaşım hâlâ desteklense de tüm yeni projelerde, kullanımı daha basit olduğu ve kodunuzun taşınabilirliğini artırdığı için bunun yerine ortam değişkenlerini kullanmanızı öneririz.

KSA ile ortam yapılandırmasını ayarlama

Ortam verilerini depolamak için Firebase CLI'daki firebase functions:config:set komutunu kullanabilirsiniz. Her anahtar, ilgili yapılandırmaları birlikte gruplandırmak için noktalar kullanılarak ad alanına eklenebilir. Anahtarlarda yalnızca küçük karakterlerin kabul edildiğini, büyük harfli karakterlere izin verilmediğini unutmayın.

Örneğin, "Bir Hizmet" için İstemci Kimliği ve API anahtarını depolamak amacıyla aşağıdaki komutu çalıştırabilirsiniz:

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

Mevcut ortam yapılandırmasını alma

Projenizin ortam yapılandırmasında şu anda nelerin depolandığını incelemek için firebase functions:config:get kullanabilirsiniz. JSON biçiminde bir çıktı verir:

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

Bu işlev Google Cloud Runtime Configuration API'ye dayanır.

Bir işlevde ortam yapılandırmasına erişmek için functions.config kullanma

Bazı yapılandırmalar, ayrılmış firebase ad alanı altında otomatik olarak sağlanır. Ortam yapılandırması, çalışan işlevinizin içinde functions.config() aracılığıyla sunulur. Yukarıdaki yapılandırmayı kullanmak için kodunuz aşağıdaki gibi görünebilir:

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

Bir modülü başlatmak için ortam yapılandırmasını kullanma

Bazı Düğüm modülleri herhangi bir yapılandırma olmadan hazır. Diğer modüllerin doğru şekilde başlatılması için ek yapılandırmaya ihtiyaç vardır. Bu yapılandırmayı sabit kodlamak yerine ortam yapılandırma değişkenlerinde depolamanızı öneririz. Bu sayede kodunuzu çok daha taşınabilir tutabilir, uygulamanızı açık kaynaklı hale getirebilir veya üretim ile hazırlık sürümleri arasında kolayca geçiş yapabilirsiniz.

Örneğin, Slack Node SDK modülünü kullanmak için şunu yazabilirsiniz:

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

Dağıtımdan önce slack.url ortamının yapılandırma değişkenini ayarlayın:

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

Ek Ortam Komutları

  • firebase functions:config:unset key1 key2, belirtilen anahtarları yapılandırmadan kaldırır
  • firebase functions:config:clone --from <fromProject>, başka bir projenin ortamını şu anda etkin olan projeye klonlar.

Otomatik olarak doldurulmuş ortam değişkenleri

İşlevlerin çalışma zamanında ve yerel olarak emüle edilen işlevlerde otomatik olarak doldurulan ortam değişkenleri vardır. Bunlar arasında Google Cloud tarafından doldurulanların yanı sıra Firebase'e özel bir ortam değişkeni yer alır:

process.env.FIREBASE_CONFIG: Aşağıdaki Firebase proje yapılandırma bilgilerini sağlar:

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

Bu yapılandırma, hiçbir bağımsız değişken olmadan Firebase Admin SDK'yı başlattığınızda otomatik olarak uygulanır. İşlevleri JavaScript ile yazıyorsanız şu şekilde başlatın:

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

İşlevleri TypeScript'te yazıyorsanız şu şekilde başlatın:

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

Yönetici SDK'sını, hizmet hesabı kimlik bilgilerini kullanarak varsayılan proje yapılandırmasıyla başlatmanız gerekiyorsa kimlik bilgilerini bir dosyadan yükleyip FIREBASE_CONFIG bölümüne şu şekilde ekleyebilirsiniz:

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

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