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

Ortamınızı yapılandırın


Çoğu zaman, işlevleriniz için üçüncü taraf API anahtarları veya ayarlanabilir ayarlar gibi ek yapılandırmalara ihtiyaç duyacaksınız. Cloud Functions için Firebase SDK, projeniz için bu tür verileri depolamayı ve almayı kolaylaştırmak için 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, hataları önleyen ve hata ayıklamayı basitleştiren parametrelerle türü kesin olarak belirlenmiş ortam yapılandırması sağlar.
  • 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, parametreli yapılandırma önerilir. Bu yaklaşım, yapılandırma değerlerinin hem çalışma zamanında hem de dağıtım zamanında kullanılabilir olmasını sağlar ve tüm parametreler geçerli bir değere sahip olmadığı sürece dağıtım engellenir. Tersine, ortam değişkenleriyle yapılandırma, konuşlandırma zamanında mevcut değildir.

Parametreli konfigürasyon

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

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

Firebase CLI, parametreli yapılandırma değişkenlerine sahip bir işlevi dağıtırken önce yerel .env dosyalarından değerlerini yüklemeye çalışır. Bu dosyalarda yoksa ve herhangi bir default ayarlanmamışsa, CLI dağıtım sırasında değerleri ister ve ardından bu değerleri otomatik olarak functions/ dizininizdeki .env .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 kontrolüne eklemeniz yararlı olabilir.

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

Parametreler, CLI'nin değerleri nasıl isteyeceğini 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 bir seçim seçeneğini Firebase projesinden otomatik olarak 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ü yazım sağlar ve ayrıca Cloud Secret Manager'dan gizli dizileri destekler. Desteklenen türler şunlardır:

  • Gizli
  • Sicim
  • boole
  • tamsayı
  • Batmadan yüzmek

Parametre değerleri ve ifadeler

Firebase, parametrelerinizi hem dağıtım zamanı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şlevleriniz için çalışma zamanı seçeneklerini ayarlamak üzere kullanırken biraz daha dikkatli olunmalıdır.

İşlevinize bir çalışma zamanı seçeneği olarak bir parametre 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) => {
    //…

Ek olarak, hangi seçeneği seçeceğinizi bilmek için bir parametreyle karşılaştırmanız gerekirse, 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 bulunan ö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 Bulut Depolama grubu (Firebase projesinde etkinleştirildiyse).

Bunlar, her açıdan kullanıcı tanımlı dize parametreleri gibi işlev görür, ancak değerleri her zaman Firebase CLI tarafından bilindiğinden, değerleri dağıtım sırasında asla istenmez veya .env dosyalarına kaydedilmez.

Gizli parametreler

defineSecret() kullanılarak tanımlanan Secret türündeki parametreler, Cloud Secret Manager'da saklanan 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'da var olup olmadığını 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 olması gereken 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();
    //…

Sırların değerleri, işlev çalıştırılana kadar gizli olduğundan, işlevinizi yapılandırırken bunları kullanamazsınız.

Ortam Değişkenleri

Cloud Functions for Firebase, bir .env dosyasında belirtilen ortam değişkenlerini uygulama çalışma zamanınıza yüklemek için dotenv dosya biçimini destekler. Devreye alındıktan sonra, ortam değişkenleri process.env arabirimi 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 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 devreye alındıktan sonra, işlev kodunuz onlara process.env sözdizimiyle 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ümesi dağıtma

Firebase projeleriniz için alternatif bir ortam değişkenleri grubuna ihtiyacınız varsa (hazırlama ve üretim gibi), bir .env. <project or alias > dosyasını açın ve projeye özgü ortam değişkenlerinizi buraya yazın. .env ve projeye özgü .env dosyalarından (eğer 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 bu üç dosyayı içerebilir:

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

KİTLE=İnsanlar

KİTLE=Geliştirici İnsanlar KİTLE=İnsan Üretmek

Bu ayrı dosyalardaki değerler göz önüne alındığında, işlevlerinizle dağıtılan ortam değişkenleri seti, hedef projenize bağlı olarak değişir:

$ 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 anahtarlar
  • 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_SERVICE
  • K_REVİZYON
  • LİMAN
  • K_KONFİGÜRASYON

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

.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 depolamanın güvenli bir yolu olarak görmemelisiniz. Bu, özellikle .env dosyalarınızı kaynak denetiminde denetlerseniz önemlidir.

Cloud Functions for Firebase, hassas yapılandırma bilgilerini depolamanıza yardımcı olmak için Google Cloud Secret Manager ile entegre olur. Bu şifreli hizmet, yapılandırma değerlerini güvenli bir şekilde saklarken, gerektiğinde işlevlerinizden kolay erişime izin verir.

Bir sır oluşturun ve kullanın

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

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ı yankılar ve değişikliğin etkili olması için işlevleri dağıtmanız gerektiği konusunda uyarır.

  3. Dağıtmadan ö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 herhangi bir ortam değişkeni gibi erişebileceksiniz. Tersine, runWith sırrı belirtmeyen başka bir işlev sırra 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 konuşlandırıldıktan sonra, gizli değere erişebilecektir. Yalnızca runWith parametresinde özel olarak bir sır içeren işlevler, bu sırra bir ortam değişkeni olarak erişebilir. Bu, gizli değerlerin yalnızca ihtiyaç duyuldukları yerde mevcut olduğundan emin olmanıza yardımcı olarak yanlışlıkla bir sırrın sızdırılması riskini azaltır.

Sırları yönetme

Sırlarınızı yönetmek için Firebase CLI'yi kullanın. Gizli dizileri 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 dizi 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 sırrı silerseniz, dağıtılan işlevlerinizden hiçbirinin bu sırra başvurmadığından emin olun. Silinmiş gizli bir değer kullanan işlevler sessizce başarısız olur.

İşte gizli yönetim için Firebase CLI komutlarının bir özeti:

# 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 üzere isteğe bağlı version 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 için komutla -h iletin.

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 diziye sahip olabileceğiniz anlamına gelir.

Varsayılan olarak, Firebase CLI, uygun olduğunda, örneğin gizli anahtarın yeni bir sürümüyle işlevleri dağıttığınızda, kullanılmayan gizli sürümleri otomatik olarak yok etmeye çalışır. Ayrıca, functions:secrets:destroy ve functions:secrets:prune kullanarak kullanılmayan sırları etkin bir şekilde temizleyebilirsiniz.

Secret Manager, bir secret üzerinde 10.000 faturalandırılmamış aylık erişim işlemine izin verir. İşlev örnekleri, her soğuk başlatmada yalnızca runWith parametresinde belirtilen sırları okur. Çok sayıda sır okuyan çok sayıda işlev örneğiniz varsa, projeniz bu ödeneği aşabilir ve bu noktada sizden 10.000 erişim işlemi başına 0,03 USD ücret alınır.

Daha fazla bilgi için Gizli Yönetici Fiyatlandırması bölümüne bakın.

Öykünücü desteği

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

Yerel bir Bulut İşlevleri öykünücüsü kullanırken, bir .env.local dosyası ayarlayarak projeniz için ortam değişkenlerini geçersiz kılabilirsiniz. .env.local içeriği, .env ve projeye özgü .env dosyasından önceliklidir.

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

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

KİTLE=İnsanlar

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

Öykünücü, 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ü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 öykünücü, uygulama varsayılan kimlik bilgilerini kullanarak üretim sırlarınıza erişmeye çalışır. CI ortamları gibi belirli durumlarda öykünücü, 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ı ayarlayarak 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 taşıma

functions.config ile ortam yapılandırmasını kullanıyorsanız, mevcut yapılandırmanızı ortam değişkenleri olarak ( dotenv biçiminde) geçirebilirsiniz. Firebase CLI, dizininizin .firebaserc dosyasında (aşağıdaki örnekte local , dev ve prod ) listelenen her diğer 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, geçersiz olabilecekleri veya ayrılmış bir ortam değişkeni olabilecekleri için tüm yapılandırmaların otomatik olarak dönüştürülememesidir.

İşlevlerinizi konuşlandırmadan veya .env dosyalarını kaynak denetiminde kontrol etmeden önce, oluşturulan .env dosyalarının içeriğini dikkatli bir şekilde gözden geçirmenizi öneririz. Herhangi bir değer hassassa ve sızdırılmaması gerekiyorsa, bunları .env dosyalarınızdan kaldırın ve bunun yerine güvenli bir şekilde Secret Manager'da saklayın.

Ayrıca işlev 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ı gerekir.

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() kullanılması önerilen yaklaşımdı. Bu yaklaşım hala 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'deki firebase functions:config:set komutunu kullanabilirsiniz. İlgili yapılandırmayı birlikte gruplandırmak için her anahtara nokta kullanılarak ad alanı verilebilir. 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ği ve API anahtarını depolamak üzere şunları ç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 şöyle bir çıktı verecektir:

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

Bu işlevsellik , Google Cloud Runtime Configuration API'ye dayalıdır.

Bir işlevde 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 işleviniz içinde functions.config() yoluyla sağlanır. 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ı Düğüm modülleri herhangi bir yapılandırma olmadan hazırdır. Diğer modüllerin doğru bir şekilde başlatılması için ekstra yapılandırmaya 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 yapmanıza veya üretim ve hazırlık 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ğıtmadan ö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ı şu anda etkin olan projeye klonlar.

Otomatik olarak doldurulmuş ortam değişkenleri

İşlev ç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 içerir:

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

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

Bu yapılandırma, Firebase Admin SDK'yı 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 gerekirse, kimlik bilgilerini bir dosyadan yükleyebilir ve bunları şu şekilde FIREBASE_CONFIG ekleyebilirsiniz:

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

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