Genellikle işlevleriniz için, üçüncü taraf API anahtarları veya ayarlanabilir ayarlar gibi ek yapılandırmalara ihtiyacınız olur. Cloud Functions için Firebase SDK'sı, projenizde bu tür verilerin saklanmasını ve alınmasını kolaylaştıran yerleşik ortam yapılandırması sunar.
Üç seçenekten birini belirleyebilirsiniz:
- Parametreleştirilmiş 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ğlayarak hataları önler ve hata ayıklamayı kolaylaştırır.
- 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) ile çalışma zamanı ortam yapılandırması.
Çoğu kullanım durumu için parametreleştirilmiş 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 değilse 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 şekilde tanımlamak için arayüz sağlar. Bu parametrelerin değeri hem işlevin 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 değerlerini yerel .env dosyalarından yüklemeyi dener. 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ı .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 sahip olmadan önce işlev kodunuz yüklenip incelenir. Bu, global kapsam sırasında parametre değerleri getirmenin dağıtım hatasına neden olacağı anlamına gelir. Genel bir 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, parametre 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'nın değer isteme şeklini kontrol eden bir Options
nesnesiyle yapılandırılabilir. Aşağıdaki örnekte telefon numarasının biçimini doğrulamak, basit bir seçim seçeneği sunmak ve Firebase projesinden otomatik olarak bir seçim seçeneği doldurmak için seçenekler belirlenmiştir:
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
Parametre haline getirilmiş yapılandırma, parametre değerleri için güçlü yazma 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 zamanında hem de işleviniz yürütüldüğü sırada değerlendirir. Bu ikili ortamlar nedeniyle, parametre değerlerini karşılaştırırken ve işlevleriniz için çalışma zamanı seçeneklerini ayarlarken bunları kullanırken daha fazla dikkat edilmesi gerekir.
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 belirleyeceğ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, firebase-functions/params
alt paketinden kullanılabilen önceden tanımlı üç parametre sunar:
projectID
— İşlevin çalıştığı Cloud projesi.databaseURL
- İşlevle ilişkilendirilen Realtime Database örneğinin URL'si (Firebase projesinde etkinleştirilmişse).storageBucket
: İşlevle ilişkili Cloud Storage paketidir (Firebase projesinde etkinleştirilmişse).
Bunlar, her açıdan kullanıcı tanımlı dize parametreleri gibi çalışır. Tek fark, değerleri Firebase CLI tarafından her zaman bilindiği için değerleri hiçbir zaman dağıtımda istenmez ve .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 parametreler, yerel bir .env
dosyasını kontrol edip eksikse dosyaya yeni bir değer yazmak yerine, Cloud Secret Manager'da mevcut 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 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ülene 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 uygulamanızın çalışma zamanına yüklemek 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:
functions/
dizininizde bir.env
dosyası oluşturun:# Directory layout: # my-project/ # firebase.json # functions/ # .env # package.json # index.js
Düzenlemek için
.env
dosyasını açın ve istediğiniz anahtarları ekleyin. Örnek: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 onlara 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 fazla ortam değişkeni grubunu dağıtma
Firebase projeleriniz için alternatif bir ortam değişkeni grubuna (hazırlık ve üretim gibi) ihtiyacınız varsa bir .env.<project or
alias>
dosyası oluşturun ve projeye özel ortam değişkenlerinizi buraya yazın. .env
ortam değişkenleri ve projeye özel .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
AUDIENCE=İnsanlar |
AUDIENCE=Dev İnsanlar | AUDIENCE=Üretilen İnsanlar |
Bu ayrı dosyalardaki değerler göz önünde bulundurulduğunda, işlevlerinizle dağıtılan ortam değişkenleri, 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 anahtarlardan 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
- Aşağıdaki listedeki herhangi bir anahtar:
- CLOUD_RUNTIME_CONFIG
- ENTRY_POINT
- GCP_PROJECT
- GCLOUD_PROJECT
- GOOGLE_CLOUD_PROJECT
- FUNCTION_TRIGGER_TYPE
- FUNCTION_NAME (FUNCTION_NAME)
- FUNCTION_MEMORY_MB
- FUNCTION_TIMEOUT_SEC
- FUNCTION_IDENTITY
- FUNCTION_REGION
- FUNCTION_TARGET (FUNCTION_TARGET)
- FUNCTION_SIGNATURE_TYPE
- K_HİZMET
- K_REVISION
- BAĞLANTI NOKTASI
- K_YAPILANDIRMA
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 depolamak için güvenli bir yol olarak değerlendirmemeniz gerekir. Bu, özellikle .env
dosyalarınızı kaynak kontrolünde kontrol ediyorsanız önemlidir.
Cloud Functions for Firebase, hassas yapılandırma bilgilerini depolamanıza yardımcı olmak için Google Cloud Secret Manager ile entegredir. Bu şifrelenmiş hizmet, yapılandırma değerlerini güvenli bir şekilde saklar ve gerektiğinde işlevlerinizden kolay erişim sağlar.
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 şu 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ğıtımdan önce işlev kodunuzun, işlevin
runWith
parametresini kullanarak 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 });
Cloud Functions'ı dağıtın:
firebase deploy --only functions
Artık diğer tüm ortam değişkenleri gibi ona da erişebilirsiniz.
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 runWith
parametrelerinde özel olarak gizli anahtar bulunan işlevler, söz konusu gizli anahtara ortam değişkeni olarak erişebilir. Bu, gizli anahtar değerlerinin yalnızca gerekli yerlerde kullanılabildiğinden emin olmanıza yardımcı olarak gizli anahtarın yanlışlıkla sızdırılması riskini azaltır.
Gizli anahtarları yönetme
Gizli anahtarlarınızı yönetmek için Firebase CLI'yi 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 alabilmesi için bu gizli anahtara referans veren tüm işlevleri yeniden dağıtmanız gerekir.
- Bir gizli anahtarı silerseniz dağıtılan işlevlerinizin hiçbirinin söz konusu 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 ö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 parametresi 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üleme komutuyla -h
geçirin.
Gizli anahtarlar nasıl faturalandırılır?
Secret Manager, ücretsiz olarak 6 aktif gizli anahtar sürümüne izin verir. Yani bir Firebase projesinde ayda 6 gizli anahtara ücretsiz olarak sahip olabilirsiniz.
Varsayılan olarak Firebase CLI, uygun durumlarda (ör. gizli anahtarın yeni sürümüyle işlevleri dağıttığınızda) kullanılmayan gizli anahtar sürümlerini otomatik olarak kaldırmayı dener. Ayrıca, kullanılmayan gizli anahtarları functions:secrets:destroy
ve functions:secrets:prune
kullanarak etkin bir şekilde temizleyebilirsiniz.
Secret Manager,bir gizli anahtar üzerinde 10.000 faturasız aylık erişim işlemi yapılmasına olanak tanır. İşlev örnekleri her baştan başlatma işleminde runWith
parametrelerinde belirtilen gizli anahtarları okur. Çok sayıda gizli anahtar okuyan çok sayıda işlev örneğiniz varsa projeniz bu izni aşabilir. Bu noktada 10.000 erişim işlemi başına 0,03 ABD doları ücret ödersiniz.
Daha fazla bilgi için Secret Manager Fiyatlandırması bölümüne bakın.
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ı ayarlayarak 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
AUDIENCE=İnsanlar |
AUDIENCE=Dev İnsanlar | AUDIENCE=Yerel İnsanlar |
Yerel bağlamda başlatıldığında emülatör, ortam değişkenlerini aşağıda 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ı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. Bu, özellikle gizli anahtar değerine 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 (dotenv biçiminde) taşıyabilirsiniz.
Firebase CLI, dizininizin .firebaserc
dosyasında listelenen her takma ad veya projenin (aşağıdaki örnekte local
, dev
ve prod
) yapılandırmasını .env
dosyaları olarak çıkaran bir dışa aktarma komutu sağlar.
Taşıma işlemini gerçekleştirmek 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 girmeniz isteneceğini unutmayın. Bunun nedeni, tüm yapılandırmaların geçersiz 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ünde kontrol etmeden önce, oluşturulan .env
dosyalarının içeriğini dikkatlice incelemenizi öneririz. Hassas değerler varsa ve sızdırılmaması gerekiyorsa bunları .env
dosyalarınızdan kaldırın ve Secret Manager'da güvenli bir şekilde saklayın.
İşlevler kodunuzu da güncellemeniz gerekir. 2. nesle yükseltme bölümünde gösterildiği gibi, artık functions.config
kullanan işlevlerin bunun yerine process.env
kullanması gerekecek.
Ortam yapılandırması
firebase-functions
v3.18.0
ürününde ortam değişkeni desteği kullanıma sunulmadan önce, ortam yapılandırması için functions.config()
kullanılması önerilen yaklaşımdı. Bu yaklaşım hâlâ desteklenmektedir ancak tüm yeni projelerde bunun yerine ortam değişkenleri kullanılmasını öneririz. Çünkü bunların kullanımı daha basittir ve kodunuzun taşınabilirliğini artırır.
KSA 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ırmayı birlikte gruplandırmak için noktalar kullanılarak ad alanına eklenebilir. Anahtarlarda yalnızca küçük harf karakterlerinin kabul edildiğini, büyük harfli karakterlere izin verilmediğini unutmayın.
Örneğin, "Bazı Hizmetler"in İstemci Kimliği ve API anahtarını depolamak için şu 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 halihazırda nelerin depolandığını incelemek için firebase functions:config:get
işlevini kullanabilirsiniz. JSON çıkışı şuna benzer:
{
"someservice": {
"key":"THE API KEY",
"id":"THE CLIENT ID"
}
}
Bu işlev Google Cloud Runtime Configuration API'yi temel alır.
Bir işlevdeki ortam yapılandırmasına erişmek için functions.config
değerini kullanın
Bazı yapılandırmalar, ayrılmış firebase
ad alanı altında otomatik olarak sağlanır. Ortam yapılandırması, functions.config()
aracılığıyla çalışan işlevinizin içinde kullanıma 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}
});
});
Modül başlatmak için ortam yapılandırmasını kullanma
Bazı Düğüm modülleri, yapılandırma gerekmeden hazır. Diğer modüllerin doğru şekilde başlatılabilmesi için ek yapılandırma gerekir. Bu yapılandırmayı sabit kodlamak yerine ortam yapılandırma değişkenlerinde depolamanızı öneririz. Böylece, kodunuzu çok daha taşınabilir bir şekilde saklayabilirsiniz. Böylece, uygulamanızı açık kaynaklı hale getirebilir veya üretim ve hazırlık sürümleri arasında kolayca geçiş yapabilirsiniz.
Örneğin, Slack Düğümü SDK'sı 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ırfirebase functions:config:clone --from <fromProject>
, başka bir projenin ortamını o anda etkin olan bir projeye klonlar.
Otomatik olarak doldurulan 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 tarafından doldurulanları ve Firebase'e özel ortam değişkenlerini 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'
}
Firebase Admin SDK'yı bağımsız değişken olmadan başlattığınızda bu yapılandırma otomatik olarak uygulanır. İşlevleri JavaScript'te yazıyorsanız, şu şekilde başlayın:
const admin = require('firebase-admin');
admin.initializeApp();
TypeScript'te işlev 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 gerekirse bir dosyadan kimlik bilgilerini yükleyip şu şekilde FIREBASE_CONFIG
öğesine ekleyebilirsiniz:
serviceAccount = require('./serviceAccount.json');
const adminConfig = JSON.parse(process.env.FIREBASE_CONFIG);
adminConfig.credential = admin.credential.cert(serviceAccount);
admin.initializeApp(adminConfig);