Ortamınızı yapılandırma


İşlevleriniz için genellikle üçüncü taraf API anahtarları veya ayarlanabilir ayarlar gibi ek yapılandırmalara ihtiyacınız olacaktır. Cloud Functions için Firebase SDK, projeniz için bu tür verileri depolamayı ve almayı kolaylaştıran yerleşik ortam yapılandırması sunar.

Üç seçenek arasından seçim yapabilirsiniz:

  • Parametreli yapılandırma (çoğu senaryo için önerilir). Bu, dağıtım zamanında doğrulanan parametrelerle güçlü tipte ortam yapılandırması sağlar, bu da hataları önler ve hata ayıklamayı basitleştirir.
  • Ortam değişkenlerinin dosya tabanlı yapılandırılması. 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 durumunda parametreli konfigürasyon ö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. Bunun tersine, ortam değişkenleriyle yapılandırma, dağıtım zamanında kullanılamaz.

Parametreli konfigürasyon

Firebase için Cloud Functions, kod tabanınızın içinde yapılandırma parametrelerini bildirimli olarak tanımlamak için bir arayüz sağlar. Bu parametrelerin değeri hem işlev dağıtımı sırasında, dağıtım ve çalışma zamanı seçeneklerini ayarlarken hem de yürütme sırasında kullanılabilir. Bu, tüm parametrelerin geçerli bir değeri olmadığı sürece CLI'nin 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.`);
  }
);

Parametreli yapılandırma değişkenlerine sahip bir işlevi dağıtırken, Firebase CLI ilk olarak değerlerini yerel .env dosyalarından yüklemeye çalışır. Bunlar bu dosyalarda mevcut değilse ve herhangi bir default ayarlanmamışsa CLI, dağıtım sırasında değerleri ister ve ardından değerlerini, functions/ dizininizdeki .env .env.<project_ID> adlı bir .env dosyasına otomatik olarak 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 kontrolüne eklemek faydalı olabilir.

CLI davranışını yapılandırma

Parametreler, CLI'nin değerleri nasıl soracağını kontrol eden bir Options nesnesiyle yapılandırılabilir. Aşağıdaki örnek, bir telefon numarasının biçimini doğrulamak, basit bir seçim seçeneği sağlamak ve Firebase projesinden otomatik olarak bir seçim seçeneği doldurmak için seçenekleri ayarlar:

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ğerleri için güçlü yazma olanağı sağlar ve ayrıca Cloud Secret Manager'ın gizli dizilerini destekler. Desteklenen türler şunlardır:

  • Gizli
  • Sicim
  • Boolean
  • Tamsayı
  • Batmadan yüzmek

Parametre değerleri ve ifadeleri

Firebase, parametrelerinizi hem dağıtım sırasında hem de işleviniz yürütülürken değerlendirir. Bu ikili ortamlar nedeniyle, parametre değerlerini karşılaştırırken ve bunları işlevlerinizin çalışma zamanı seçeneklerini ayarlamak için kullanırken biraz daha dikkatli olunmalıdır.

Bir parametreyi çalışma zamanı seçeneği olarak işlevinize iletmek için 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 bilmek 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, firebase-functions/params alt paketinde mevcut olan önceden tanımlanmış üç parametre sunar:

  • projectID — işlevin çalıştığı Bulut projesi.
  • databaseURL — işlevle ilişkili Gerçek Zamanlı Veritabanı örneğinin URL'si (Firebase projesinde etkinleştirildiyse).
  • storageBucket — işlevle ilişkili Cloud Storage paketi (Firebase projesinde etkinleştirildiyse).

Bunlar, her açıdan kullanıcı tanımlı dize parametrelerine benzer şekilde çalışır; ancak değerleri her zaman Firebase CLI tarafından bilindiğinden, değerleri dağıtım sırasında hiçbir zaman istenmez veya .env dosyalarına kaydedilmez.

Gizli parametreler

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

Bu şekilde tanımlanan gizli parametreler, bunlara erişimi olan ayrı ayrı işlevlere bağlanmalı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 dizilerin değerleri, işlevin yürütülmesine kadar gizli olduğundan, işlevinizi yapılandırırken bunları kullanamazsınız.

Ortam Değişkenleri

Firebase için Cloud Functions, bir .env dosyasında belirtilen ortam değişkenlerinin uygulama çalışma zamanınıza yüklenmesi için dotenv dosya biçimini destekler. Dağıtıldıktan sonra ortam değişkenleri, process.env arayüzü aracılığıyla 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 tuşları 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 process.env söz dizimi ile 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 çok ortam değişkeni kümesini dağıtma

Firebase projeleriniz için (hazırlama ve üretim gibi) alternatif bir ortam değişkenleri kümesine ihtiyacınız varsa bir .env. <project or alias > dosyasını açın ve projeye özel ortam değişkenlerinizi buraya yazın. .env ve projeye özel .env dosyalarındaki (varsa) ortam değişkenleri, dağıtılan tüm işlevlere dahil edilecektir.

Ö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
GEZEGEN=Dünya

İZLEYİCİ=İnsanlar

KİTLE=Geliştirici İnsanlar İZLEYİCİ=Ürün İnsanlar

Bu ayrı dosyalardaki değerler göz önüne alındığında, işlevlerinizle birlikte dağıtılan ortam değişkenleri kümesi, 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. .env dosyalarınızda bu anahtarlardan hiçbirini kullanmayın:

  • X_GOOGLE_ ile başlayan tüm anahtarlar
  • EXT_ ile başlayan tüm tuşlar
  • FIREBASE_ ile başlayan tüm anahtarlar
  • Aşağıdaki listeden herhangi bir anahtar:
  • CLOUD_RUNTIME_CONFIG
  • GİRİŞ NOKTASI
  • GCP_PROJECT
  • GCLOUD_PROJECT
  • GOOGLE_CLOUD_PROJECT
  • FUNCTION_TRIGGER_TYPE
  • FONKSİYON ADI
  • FUNCTION_MEMORY_MB
  • FUNCTION_TIMEOUT_SEC
  • FUNCTION_IDENTITY
  • FUNCTION_REGION
  • FUNCTION_TARGET
  • FUNCTION_SIGNATURE_TYPE
  • K_SERVİS
  • K_REVISION
  • LİMAN
  • K_CONFIGURATION

Hassas yapılandırma bilgilerini saklayın ve bunlara erişin

.env dosyalarında saklanan ortam değişkenleri, işlev yapılandırması için kullanılabilir ancak bunların, veritabanı kimlik bilgileri veya API anahtarları gibi hassas bilgileri depolamanın güvenli bir yolu olduğunu düşünmemelisiniz. Bu, özellikle .env dosyalarınızı kaynak kontrolüne kontrol ettiğinizde önemlidir.

Hassas yapılandırma bilgilerini saklamanıza yardımcı olmak için Cloud Functions for Firebase, Google Cloud Secret Manager ile entegre olur. Bu şifrelenmiş hizmet, yapılandırma değerlerini güvenli bir şekilde saklarken, gerektiğinde işlevlerinizden kolay erişime de olanak tanır.

Gizli dizi oluşturma ve kullanma

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

Bir gizli dizi oluşturmak ve kullanmak için:

  1. Yerel proje dizininizin kökünden şu 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ı yansıtır ve değişikliğin etkili olması için işlevleri dağıtmanız gerektiği konusunda uyarır.

  3. Dağıtımdan önce, işlev kodunuzun, işlevin runWith parametresini kullanarak gizli diziye 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. Bulut İşlevlerini Dağıtın:

    firebase deploy --only functions

Artık ona diğer ortam değişkenleri gibi erişebileceksiniz. Tersine, runWith sırrı belirtmeyen başka bir işlev gizliliğe erişmeye çalışırsa tanımsız 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ığında gizli değere erişebilecektir. Yalnızca runWith parametresinde özel olarak bir sır içeren işlevler, bu gizli diziye bir ortam değişkeni olarak erişebilir. Bu, gizli değerlerin yalnızca ihtiyaç duyulan yerde mevcut olduğundan emin olmanıza yardımcı olur ve bir sırrın yanlışlıkla sızdırılması riskini azaltır.

Sırları yönetme

Gizli kodlarınızı yönetmek için Firebase CLI'yi kullanın. Gizli dizileri bu şekilde yönetirken, bazı CLI değişikliklerinin ilgili işlevleri değiştirmenizi ve/veya yeniden konuşlandırmanızı gerektirdiğini unutmayın. Özellikle:

  • Bir sır için yeni bir değer ayarladığınızda, en son değeri almaları için bu gizli diziye başvuran tüm işlevleri yeniden konuşlandırmanız gerekir.
  • Bir gizli diziyi silerseniz dağıtılan işlevlerinizden hiçbirinin bu gizli diziye başvurmadığından emin olun. Silinen bir gizli değeri kullanan işlevler sessizce başarısız olur.

Gizli yönetim için Firebase CLI komutlarının bir özetini burada bulabilirsiniz:

# 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, belirli bir sürümü yönetmek amacıyla isteğe bağlı sürüm parametresini sağlayabilirsiniz. Örneğin:

functions:secrets:access SECRET_NAME[@VERSION]

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

Gizli sırlar nasıl faturalandırılır?

Secret Manager, ücretsiz olarak 6 aktif gizli sürüme izin verir. Bu, bir Firebase projesinde hiçbir ücret ödemeden ayda 6 gizli bilgiye sahip olabileceğiniz anlamına gelir.

Firebase CLI, varsayılan olarak, uygun olduğu durumlarda (örneğin, gizli anahtarın yeni bir sürümüyle işlevleri dağıttığınızda) kullanılmayan gizli kod sürümlerini otomatik olarak yok etmeye çalışır. Ayrıca, functions:secrets:destroy ve functions:secrets:prune kullanarak kullanılmayan gizli dizileri aktif olarak temizleyebilirsiniz.

Secret Manager, bir gizli anahtar üzerinde aylık 10.000 faturalandırılmamış erişim işlemine izin verir. İşlev örnekleri, her soğuk başlatma işleminde yalnızca runWith parametresinde belirtilen gizli dizileri okur. Çok sayıda gizli dizi okuyan çok sayıda işlev örneğiniz varsa projeniz bu ödeneği aşabilir ve bu noktada 10.000 erişim işlemi başına 0,03 ABD doları ücretlendirilirsiniz.

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

Emülatör desteği

Dotenv ile ortam yapılandırması, yerel bir Bulut İşlevleri öykünücüsüyle birlikte çalışacak şekilde tasarlanmıştır.

Yerel bir Cloud Functions öykünücüsü 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 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
GEZEGEN=Dünya

İZLEYİCİ=İnsanlar

KİTLE=Geliştirici İnsanlar İZLEYİCİ=Yerel İnsanlar

Yerel bağlamda başlatıldığında öykünücü, 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ündeki sırlar ve kimlik bilgileri

Cloud Functions öykünücüsü , hassas yapılandırma bilgilerini depolamak ve bunlara erişmek için gizli dizilerin kullanımını destekler. Varsayılan olarak emülatör, uygulamanın varsayılan kimlik bilgilerini kullanarak üretim sırlarınıza erişmeye çalışacaktı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 dizi değerlerini geçersiz kılabilirsiniz. Bu, özellikle gizli değere erişiminiz yoksa, işlevlerinizi yerel olarak test etmenizi kolaylaştırır.

Ortam yapılandırmasından geçiş

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

Geçiş yapmak için firebase functions:config:export komutunu kullanarak mevcut ortam yapılandırmalarınızı 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şkeni 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ış bir ortam değişkeni key olabileceği için otomatik olarak dönüştürülememesidir.

İşlevlerinizi dağıtmadan veya .env dosyalarını kaynak denetiminde denetlemeden önce oluşturulan .env dosyalarının içeriğini dikkatle incelemenizi öneririz. Herhangi bir değer hassassa ve sızdırılmaması gerekiyorsa, bunları .env dosyalarınızdan kaldırın ve bunun yerine Secret Manager'da güvenli bir şekilde saklayın.

Ayrıca işlev kodunuzu da güncellemeniz gerekecektir. functions.config kullanan tüm işlevlerin, 2. nesile yükseltme bölümünde gösterildiği gibi artık bunun yerine process.env kullanması gerekecektir.

Ortam yapılandırması

firebase-functions v3.18.0 ortam değişkeni desteği yayınlanmadan önce, ortam yapılandırması için functions.config() ın kullanılması önerilen yaklaşımdı. Bu yaklaşım hâlâ desteklenmektedir, ancak kullanımı daha basit olduğundan ve kodunuzun taşınabilirliğini iyileştirdiğinden tüm yeni projelerin bunun yerine ortam değişkenlerini kullanmasını öneririz.

CLI ile ortam yapılandırmasını ayarlayın

Ortam verilerini depolamak için Firebase CLI'de firebase functions:config:set komutunu kullanabilirsiniz. İlgili konfigürasyonu birlikte gruplandırmak için her anahtara noktalar kullanılarak ad alanı eklenebilir. Anahtarlarda yalnızca küçük harflerin kabul edildiğini unutmayın; büyük harf karakterlere izin verilmez.

Örneğin, "Bazı Hizmetler" için İstemci Kimliğini ve API anahtarını saklamak için şunu çalıştırabilirsiniz:

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

Geçerli ortam yapılandırmasını al

Projeniz için ortam yapılandırmasında şu anda depolananları incelemek için firebase functions:config:get kullanabilirsiniz. JSON'a şunun gibi bir çıktı verecektir:

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

Bu işlevsellik Google Cloud Runtime Configuration API'yi temel alır.

Bir işlevdeki ortam yapılandırmasına erişmek için functions.config kullanın

Bazı yapılandırmalar, ayrılmış firebase ad alanı altında otomatik olarak sağlanır. Ortam yapılandırması, çalışan fonksiyonunuzun içinde functions.config() aracılığıyla kullanıma sunulur. Yukarıdaki yapılandırmayı kullanmak için kodunuz şöyle 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ı kullanın

Bazı Node modülleri herhangi bir konfigürasyon gerektirmeden hazırdır. Diğer modüllerin doğru şekilde başlatılması için ekstra konfigürasyona ihtiyacı vardır. Bu yapılandırmayı sabit kodlamak yerine ortam yapılandırma değişkenlerinde saklamanızı öneririz. Bu, kodunuzu çok daha taşınabilir tutmanıza yardımcı olur; bu da uygulamanızı açık kaynak olarak kullanmanıza veya üretim ve hazırlama sürümleri arasında kolayca geçiş yapmanıza olanak tanır.

Ö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 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ı o anda aktif olan projeye kopyalar.

Otomatik olarak doldurulan ortam değişkenleri

İşlevlerin çalışma zamanında ve yerel olarak öykünülmüş işlevlerde otomatik olarak doldurulan ortam değişkenleri vardır. Bunlar, Google Cloud tarafından doldurulanların yanı sıra Firebase'e özgü bir ortam değişkenini de içerir:

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, Firebase Yönetici SDK'sını bağımsız değişken olmadan başlattığınızda otomatik olarak uygulanır. JavaScript'te işlevler yazıyorsanız şu şekilde başlatın:

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

TypeScript'te işlevler 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();

Hizmet hesabı kimlik bilgilerini kullanarak Yönetici SDK'sını varsayılan proje yapılandırmasıyla başlatmanız gerekiyorsa, kimlik bilgilerini bir dosyadan yükleyebilir ve bunları FIREBASE_CONFIG şu şekilde ekleyebilirsiniz:

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

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