İşlevleriniz için genellikle üçüncü taraf API anahtarları veya ayarlanabilir ayarlar gibi ek yapılandırmalara ihtiyacınız olur. Cloud Functions için Firebase SDK'sı, projeniz için bu tür verileri depolamayı ve almayı kolaylaştırmak amacıyla yerleşik ortam yapılandırması sunar.
Aşağıdaki seçenekler arasından seçim yapabilirsiniz:
- Parametreli yapılandırma (çoğu senaryo için önerilir). Bu, dağıtım sırasında doğrulanan parametrelerle güçlü şekilde yazılmış bir 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.
Ç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şkenleri içeren yapılandırma dağıtım sırasında kullanılamaz.
Parametreli yapılandırma
Cloud Functions for Firebase, yapılandırma parametrelerini kod tabanınızda açık bir şekilde tanımlamak için bir arayüz sağlar. Bu parametrelerin değeri hem işlev dağıtımı sırasında, hem de dağıtım ve çalışma zamanı seçenekleri belirlenirken 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/v1');
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 mevcut değilse ve default
ayarlanmamışsa CLI, dağıtım sırasında değerleri ister ve ardından değerlerini functions/
dizininizdeki .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 yararlı olabilir.
Global kapsamda parametreleri kullanma
Dağıtım sırasında, parametreleriniz gerçek değerlere sahip olmadan önce işlev kodunuz yüklenir ve denetlenir. Bu, genel kapsam sırasında parametre değerlerinin getirilmesi dağıtımın başarısız olmasına neden olur. Bir global değeri başlatmak için parametre kullanmak istediğiniz durumlarda başlatma geri çağırma işlevini onInit()
kullanın. Bu geri çağırma, herhangi bir işlev üretimde çalıştırılmadan önce çalışır ancak dağıtım sırasında çağrılmaz. Bu nedenle, bir 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, CLI'nin değerler isteme şeklini kontrol eden bir Options
nesnesi ile 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ğerleri için güçlü bir yazım denetimi sağlar ve Cloud Secret Manager'daki gizli anahtarları da destekler. Desteklenen türler şunlardır:
- Gizli Anahtar
- Dize
- Boole
- Tamsayı
- Kayan
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 işlevleriniz için çalışma zamanı seçeneklerini ayarlamak üzere bunları kullanırken biraz daha dikkatli olmanız gerekir.
Bir parametreyi işlevinize çalışma zamanı seçeneği olarak iletmek için doğrudan iletin:
const functions = require('firebase-functions/v1');
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/v1');
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/v1');
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
: İşlevin çalıştığı Cloud projesi.databaseURL
- işlevle ilişkili Realtime Database örneğinin URL'sidir (Firebase projesinde etkinleştirilmişse).storageBucket
: İşlevle ilişkili Cloud Storage paketi (Firebase projesinde etkinse).
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 parametreler, bunlara erişmesi gereken ayrı işlevlere bağlanmalıdır:
const functions = require('firebase-functions/v1');
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 uygulama çalışma zamanınıza 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:
functions/
dizininizde bir.env
dosyası oluşturun:# Directory layout: # my-project/ # firebase.json # functions/ # .env # package.json # index.js
.env
dosyasını düzenlemek için açın ve istediğiniz anahtarları ekleyin. Örneğin:PLANET=Earth AUDIENCE=Humans
İş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, process.env
söz dizimini kullanarak bu değişkenlere 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 |
AUDIENCE=Dev Humans | AUDIENCE=Prod Humans |
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_ ile başlayan tüm anahtarlar
- FIREBASE_ ile başlayan tüm anahtarlar
- Şu listedeki herhangi bir tuş:
- CLOUD_RUNTIME_CONFIG
- ENTRY_POINT
- GCP_PROJECT
- GCLOUD_PROJESİ
- GOOGLE_CLOUD_PROJECT
- FUNCTION_TRIGGER_TYPE
- FUNCTION_NAME
- FUNCTION_MEMORY_MB
- FUNCTION_TIMEOUT_SEC
- FUNCTION_IDENTITY
- FUNCTION_REGION
- İŞLEV_HEDEFİ
- FUNCTION_SIGNATURE_TYPE
- K_SERVICE
- K_REVISION
- PORT
- K_CONFIGURATION
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 yöntem olarak değerlendirmemeniz gerekir. Bu, özellikle .env
dosyalarınızı kaynak denetimine eklerseniz önemlidir.
Hassas yapılandırma bilgilerini saklamanıza yardımcı olmak için Cloud Functions for Firebase Google Cloud ile entegre olur Secret Manager. Bu şifrelenmiş hizmet, yapılandırma değerlerini güvenli bir şekilde depolar ve gerektiğinde işlevlerinizden kolayca erişmenize olanak tanır.
Gizli anahtar oluşturma ve kullanma
Gizli anahtar oluşturmak için Firebase CLI'yi kullanın.
Gizli anahtar oluşturmak ve kullanmak için:
Yerel proje dizininizin kök dizininden aşağıdaki komutu çalıştırın:
firebase functions:secrets:set SECRET_NAME
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.
Dağıtmadan önce, işlev kodunuzun işlevin
runWith
parametresini kullanarak gizliye 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 });
Cloud Functions uygulamasını 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 işlev, 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 KSA'yı kullanın. Gizli bilgileri 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 almaları için bu gizli anahtara atıfta bulunan tüm işlevleri yeniden dağıtmanız gerekir.
- Bir gizliyi silerseniz dağıtılan işlevlerinizin hiçbirinin bu gizliye referans vermediğinden emin olun. Silinen bir gizli değer kullanan işlevler sessizce başarısız olur.
Gizli anahtar yönetimi için Firebase CLI komutlarının özetini aşağıda 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 üzere 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 edinmek için komutu -h
ile birlikte göndererek CLI yardımını görüntüleyin.
Gizli anahtarlar nasıl faturalandırılır?
Secret Manager, ücretsiz olarak 6 etkin gizli sürüm kullanmanıza olanak tanır. Bu, Firebase projesinde ücretsiz olarak ayda 6 gizli anahtara sahip olabileceğiniz anlamına gelir.
Varsayılan olarak Firebase CLI, uygun olduğu durumlarda (ör. işlevleri gizli anahtarın yeni bir sürümüyle dağıttığınızda) kullanılmayan gizli anahtar sürümlerini otomatik olarak yok etmeye çalışır. Ayrıca, functions:secrets:destroy
ve functions:secrets:prune
yardımıyla kullanılmayan gizli anahtarları etkin şekilde temizleyebilirsiniz.
Secret Manager, bir gizli anahtarda aylık 10.000 faturalandırılmayan erişim işlemine izin verir. İşlev örnekleri, her baştan başlatma işleminde runWith
parametrelerinde belirtilen gizli anahtarları yalnızca okur. Çok sayıda gizli anahtar okuyan işlev örneğiniz varsa projeniz bu izinleri aşabilir. Bu durumda, 10.000 erişim işlemi başına 0,03 ABD doları ödersiniz.
Daha fazla bilgi için Secret Manager Fiyatlandırması başlıklı makaleyi inceleyin.
Emülatör 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 Cloud Functions emülatörü kullanırken .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
|
PLANET=Dünya
KİTLE=İnsanlar |
AUDIENCE=Dev Humans | 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ündeki gizli anahtarlar ve kimlik bilgileri
Cloud Functions emülatörü, hassas yapılandırma bilgilerini depolamak ve bunlara erişmek için gizli anahtarların kullanılmasını destekler. Emülatör, varsayılan olarak 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. 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
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, dizininizdeki .firebaserc
dosyasında listelenen her bir takma ad veya projenin yapılandırmasını (aşağıdaki örnekte local
, dev
ve prod
) .env
dosyaları olarak dışa aktaran bir dışa aktarma komutu sağlar.
Taşıma işlemini 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şken anahtarlarını yeniden adlandırmak için bir önek girmenizin isteneceğini unutmayın. Bunun nedeni, geçersiz veya ayrılmış ortam değişkeni anahtarı olabilecek tüm yapılandırmaların otomatik olarak dönüştürülememesidir.
İşlevlerinizi dağıtmadan veya .env
dosyalarını kaynak denetimine eklemeden önce oluşturulan .env
dosyalarının içeriğini dikkatlice incelemenizi öneririz. Hassas olan ve sızdırılmaması gereken değerleri .env
dosyalarınızdan kaldırın ve Secret Manager dosyalarında güvenli bir şekilde saklayı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ı
CLI ile ortam yapılandırmasını ayarlama
Ortam verilerini depolamak için Firebase KSA'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"
Geçerli 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'yi temel alır.
Bir işlevde ortam yapılandırmasına erişmek için functions.config
kullanma
Bazı yapılandırmalar, ayrılmış firebase
adlı ad alanında otomatik olarak sağlanır. Ortam yapılandırması, functions.config()
aracılığıyla çalışan işlevinizde kullanılabilir.
Yukarıdaki yapılandırmayı kullanmak için kodunuz aşağıdaki gibi görünebilir:
const functions = require('firebase-functions/v1');
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ı Node modülleri herhangi bir yapılandırma olmadan hazırdır. Diğer modüllerin doğru şekilde başlatılması için ek yapılandırma gerekir. Bu yapılandırmayı sabit kodlamak yerine ortam yapılandırma değişkenlerinde saklamanızı öneririz. Bu sayede kodunuzu çok daha taşınabilir hale getirebilir, uygulamanızı açık kaynak 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/v1');
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ırfirebase 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, Google Cloud ile doldurulanları ve Firebase'e özel bir ortam değişkenini 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, hiçbir bağımsız değişken olmadan Firebase Admin SDK'yı başlattığınızda otomatik olarak uygulanır. JavaScript'te işlev yazıyorsanız aşağıdaki gibi 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/v1';
import * as admin from 'firebase-admin';
import 'firebase-functions/v1';
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);