Firebase CLI komutlarını kullanarak işlevleri dağıtabilir, silebilir ve değiştirebilirsiniz veya işlevlerinizin kaynak kodunda çalışma zamanı seçeneklerini ayarlayın.
İşlevleri dağıtma
İşlevleri dağıtmak için şu Firebase CLI komutunu çalıştırın:
firebase deploy --only functions
Varsayılan olarak Firebase CLI, içindeki tüm işlevleri dağıtır
kaynağınızı aynı anda dinleyebilirsiniz. Projenizde 5’ten fazla fonksiyon varsa
--only
işaretini belirli işlev adlarıyla kullanmanızı öneririz.
fonksiyonları dağıtıp
tıklayın. Belirli işlevleri dağıtma
Bu şekilde dağıtım sürecini hızlandırır ve projenizle ilgili
dağıtım kotaları. Örneğin:
firebase deploy --only functions:addMessage,functions:makeUppercase
Çok sayıda işlev dağıtırken standart kotayı kontrol etmeli ve HTTP 429 ya da 500 hata mesajları almalıdır. Çözüm Bunun için işlevleri 10 veya daha az kişilik gruplar halinde dağıtmanız gerekir.
Mevcut tam liste için Firebase CLI referansına bakın komutlarının ikisine katlanır.
Varsayılan olarak Firebase CLI, functions/
kaynak kodudur. İsterseniz fonksiyonları düzenleyebilirsiniz
veya birden fazla dosya setinde
kullanabilirsiniz.
İşlevleri silin
Önceden dağıtılmış işlevleri şu yöntemlerle silebilirsiniz:
functions:delete
ile Firebase KSA'da açıkça- Google Cloud konsolunda açıkça gönderin.
- dolaylı olarak devre dışı bırakabilirsiniz.
Tüm silme işlemleri işlevi üretimden kaldırmadan önce onaylamanızı ister.
Firebase KSA'daki açık işlev silme, birden fazla bağımsız değişkeni destekler yanı sıra gruplar ve belirli bir bölgede çalışan bir işlev belirtmenizi sağlar. Ayrıca, onay istemini geçersiz kılabilirsiniz.
# Delete all functions that match the specified name in all regions. firebase functions:delete myFunction
# Delete a specified function running in a specific region. firebase functions:delete myFunction --region us-east-1
# Delete more than one function firebase functions:delete myFunction myOtherFunction
# Delete a specified functions group. firebase functions:delete groupA
# Bypass the confirmation prompt. firebase functions:delete myFunction --force
Örtülü işlev silme ile firebase deploy
, kaynağınızı ayrıştırır ve
Dosyadan kaldırılan tüm işlevleri üretimden kaldırır.
Bir işlevin adını, bölgesini veya tetikleyicisini değiştirin
Bölgeleri yeniden adlandırıyor veya değiştiriyorsanız ya da istiyorsanız, verilerinizi kaybetmemek için bu bölümdeki adımları etkinlikleri görebilirsiniz. Bu adımları uygulamadan önce işlevi idempotent'tir, çünkü işlevinizin hem yeni sürümü hem de eski sürümü zaman alabilir.
İşlevi yeniden adlandırma
Bir işlevi yeniden adlandırmak için kaynağınızda işlevin yeniden adlandırılmış yeni bir sürümünü oluşturun.
sonra iki ayrı dağıtım komutunu çalıştırın. İlk komut,
işlevi, ikinci komut ise önceden dağıtılmış olan
sürümünü değil. Örneğin, bir Node.js fonksiyonunuz varsa
istediğiniz webhook
adını
webhookNew
olarak değiştirmek için, kodu aşağıdaki gibi revize edin:
// before
const functions = require('firebase-functions');
exports.webhook = functions.https.onRequest((req, res) => {
res.send("Hello");
});
// after
const functions = require('firebase-functions');
exports.webhookNew = functions.https.onRequest((req, res) => {
res.send("Hello");
});
Ardından yeni işlevi dağıtmak için aşağıdaki komutları çalıştırın:
# Deploy new function called webhookNew firebase deploy --only functions:webhookNew # Wait until deployment is done; now both webhookNew and webhook are running # Delete webhook firebase functions:delete webhook
Bir işlevin bölgesini veya bölgelerini değiştirme
Belirli bir bölge için belirtilen bölgeleri başka bir fonksiyona sahipseniz, etkinlik kaybını önlemek için şu adımları izleyin:
- İşlevi yeniden adlandırın ve bölgesini veya bölgelerini istediğiniz gibi değiştirin.
- Yeniden adlandırılan işlevi dağıtın. Bu durumda, aynı kod her iki bölge grubunda da geçici olarak çalıştırılır.
- Önceki işlevi silin.
Örneğin,
webhook
adlı odada şu anda
varsayılan işlevler bölgesini kullanıyorsanız ve bunu şuraya taşımak istiyorsunuz:us-central1
asia-northeast1
, öncelikle
işlev görmek ve revize etmek.
// before
const functions = require('firebase-functions');
exports.webhook = functions
.https.onRequest((req, res) => {
res.send("Hello");
});
// after
const functions = require('firebase-functions');
exports.webhookAsia = functions
.region('asia-northeast1')
.https.onRequest((req, res) => {
res.send("Hello");
});
Ardından şu komutu çalıştırarak dağıtın:
firebase deploy --only functions:webhookAsia
Şimdi birbirinin aynı olan iki işlev çalışıyor: webhook
, us-central1
üzerinde çalışıyor,
ve webhookAsia
, asia-northeast1
bölgesinde çalışıyor.
Ardından, webhook
öğesini silin:
firebase functions:delete webhook
Şimdi yalnızca bir işlev vardır: asia-northeast1
işlevinde çalışan webhookAsia
.
Bir işlevin tetikleyici türünü değiştirme
Cloud Functions for Firebase dağıtımınızı zaman içinde geliştirdikçe fonksiyonun tetikleyici türünü çeşitli nedenlerle değiştirmem gerekiyor. Örneğin, Firebase Realtime Database türünü değiştirmek isteyebilirsiniz veya Cloud Firestore etkinliği başka türe.
Bir işlevin etkinlik türü, yalnızca
firebase deploy
çalıştırmanız gerekir. Hataları önlemek için
bir işlevin tetikleyici türünü şu prosedürle değiştirin:
- Kaynak kodu, istenen tetikleyici türüne sahip yeni bir işlev içerecek şekilde değiştirin.
- İşlevi dağıtın. Bu durumda, hem eski hem de yeni işlev geçici olarak çalıştırılır.
- Eski işlevi Firebase KSA'yı kullanarak üretimden açık bir şekilde silin.
Örneğin, objectChanged
adında eski
onChange
etkinlik türü ve onFinalize
olarak değiştirmek istiyorsanız önce yeniden adlandırın
işlevi onFinalize
etkinlik türüne sahip olacak şekilde düzenleyin.
// before
const functions = require('firebase-functions');
exports.objectChanged = functions.storage.object().onChange((object) => {
return console.log('File name is: ', object.name);
});
// after
const functions = require('firebase-functions');
exports.objectFinalized = functions.storage.object().onFinalize((object) => {
return console.log('File name is: ', object.name);
});
Ardından, eski işlevi silmeden önce yeni işlevi oluşturmak için aşağıdaki komutları çalıştırın:
# Create new function objectFinalized firebase deploy --only functions:objectFinalized # Wait until deployment is done; now both objectChanged and objectFinalized are running # Delete objectChanged firebase functions:delete objectChanged
Çalışma zamanı seçeneklerini ayarlama
Cloud Functions for Firebase, Node.js gibi çalışma zamanı seçeneklerini belirlemenize olanak tanır. çalışma zamanı sürümü ve işlev başına zaman aşımı, bellek ayırma ve minimum/maksimum işlev örneklerinden ibarettir.
En iyi uygulama olarak, bu seçeneklerin (Node.js sürümü hariç)
yapılandırma nesnesini ifade eder. Bu
RuntimeOptions
nesne, fonksiyonunuzun çalışma zamanı seçenekleri için doğru kaynaktır ve
Başka bir yöntemle (ör. Google Cloud Console aracılığıyla) belirlenen geçersiz kılma seçenekleri
veya gcloud CLI) aracını kullanın.
Geliştirme iş akışınızda çalışma zamanı seçeneklerini
Google Cloud konsolunu veya gcloud KSA'yı kullanıyorsanız ve bu değerlerin böyle olmasını istemiyorsanız
her dağıtımda geçersiz kılınmışsa preserveExternalChanges
seçeneğini true
olarak ayarlayın.
Bu seçenek true
olarak ayarlandığında Firebase,
işlevinizin şu anda dağıtılmış olan sürümünün ayarlarıyla
şu önceliğe sahip olmalıdır:
- Seçenek, işlev kodunda ayarlandı: Harici değişiklikleri geçersiz kıl.
- Seçenek, işlev kodunda
RESET_VALUE
olarak ayarlandı: Harici değişiklikleri varsayılan değerle geçersiz kılın. - Seçenek, işlev kodunda ayarlanmamış ancak şu anda dağıtılmış olan işlevde ayarlanmış: Dağıtılan işlevde belirtilen seçeneği kullanın.
preserveExternalChanges: true
seçeneğinin kullanılması önerilmez
çünkü çoğu senaryoda
kodu artık çalışma zamanı seçeneklerinin tam veri kaynağı
işlevlerine dahildir. Kullanıyorsanız Google Cloud Console'a göz atın veya gcloud'u kullanın
CLI'yı kullanarak işlevin tam yapılandırmasını görebilirsiniz.
Node.js sürümünü ayarlama
Cloud Functions için Firebase SDK'sı, Node.js çalışma zamanı seçimine izin verir. Bir projedeki tüm işlevleri yalnızca çalışma zamanında çalıştırmayı seçebilirsiniz ortama nasıl aktarabilirsiniz?
- Node.js 20 (önizleme)
- Düğüm.js 18
- Düğüm.js 16
- Düğüm.js 14
Node.js sürümünü ayarlamak için:
Sürümü, package.json
tablosundaki engines
alanından ayarlayabilirsiniz.
başlatma sırasında functions/
dizininizde oluşturulan bir dosyadır.
Örneğin,
sürüm 18, bu satırı package.json
ürününde düzenleyin:
"engines": {"node": "18"}
Yarn paket yöneticisi kullanıyorsanız veya
engines
alanında, Cloud Functions için Firebase SDK'sının çalışma zamanını şurada ayarlayabilirsiniz:
Bunun yerine firebase.json
:
{
"functions": {
"runtime": "nodejs18" // or nodejs14, nodejs16 or nodejs20
}
}
KSA, herhangi bir değer yerine firebase.json
içinde ayarlanan değeri kullanır veya
package.json
içinde ayrı olarak ayarladığınız aralık.
Node.js çalışma zamanınızı yükseltin
Node.js çalışma zamanınızı yükseltmek için:
- Projenizin Blaze fiyatlandırma planı.
- Firebase KSA 11.18.0 veya sonraki bir sürümü kullandığınızdan emin olun.
- Şu konumda oluşturulan
package.json
dosyasındakiengines
değerini değiştirin: başlatma sırasındafunctions/
dizininiz. Örneğin sürüm 16'dan sürüm 18'e yükseltiyorsanız giriş şöyle görünmelidir:"engines": {"node": "18"}
- İsteğe bağlı olarak, değişikliklerinizi Firebase Local Emulator Suite.
- Tüm işlevleri yeniden dağıtın.
Ölçeklendirme davranışını kontrol etme
Cloud Functions for Firebase varsayılan olarak çalışan örnek sayısını ölçeklendirir gelen istek sayısına göre (potansiyel olarak sıfıra düşürülebilir) daha az trafik elde etmek anlamına gelir. Ancak, uygulamanız gereken yerlerde ve baştan başlatma sayısını sınırlamak isterseniz bunu değiştirebilirsiniz. görüntülenebilecek minimum kapsayıcı örneği sayısını belirterek ve talepleri karşılamaya hazır tutulduğundan emin olun.
Benzer şekilde, örneklerin ölçeklenmesini sınırlamak için bir maksimum sayı ayarlayabilirsiniz: yanıt verebilir. Maliyetlerinizi kontrol etmenin bir yolu olarak bu ayarı kullanın veya bir
Baştan başlatma sayısını azaltma
Kaynak koddaki bir işlevin minimum örnek sayısını ayarlamak için
runWith
yöntemidir. Bu yöntem
RuntimeOptions
minInstances
değerini tanımlayan arayüzdür. Örneğin,
bu işlev, sıcak tutmak için en az 5 örneği ayarlar:
exports.getAutocompleteResponse = functions
.runWith({
// Keep 5 instances warm for this latency-critical function
minInstances: 5,
})
.https.onCall((data, context) => {
// Autocomplete a user's search term
});
minInstances
için değer ayarlarken göz önünde bulundurmanız gereken bazı noktalar aşağıda belirtilmiştir:
- Cloud Functions for Firebase, uygulamanızı
minInstances
ayarınızın üzerinde ölçeklendirirse bu eşiğin üzerindeki her örnek için baştan başlatmayla karşılaşırsınız. - Soğuk başlatma, ani trafik çeken uygulamalar üzerindeki en ciddi etkiye sahiptir. Eğer
uygulamanızın ani trafiğe sahip olduğunu ve
minInstances
değerini, uygulamanızın soğuk başlatmalar her trafik artışında azalmaya başladığında, daha az gecikme. Sürekli trafiğe sahip uygulamalarda soğuk başlatmalara performansı önemli ölçüde etkileyebilir. Minimum örnek belirlemek, üretim ortamları için mantıklı olabilir ancak genellikle test ortamlarında kaçınılmalıdır. Sıfıra ölçeklendirmek için ama yine de üretim projenizde baştan başlatma sayısını azaltırsanız
minInstances
,FIREBASE_CONFIG
ortam değişkenine göre ayarlanabilir:// Get Firebase project id from `FIREBASE_CONFIG` environment variable const envProjectId = JSON.parse(process.env.FIREBASE_CONFIG).projectId; exports.renderProfilePage = functions .runWith({ // Keep 5 instances warm for this latency-critical function // in production only. Default to 0 for test projects. minInstances: envProjectId === "my-production-project" ? 5 : 0, }) .https.onRequest((req, res) => { // render some html });
Bir işlev için maksimum örnek sayısını sınırlama
İşlev kaynak kodunda maksimum örnek sayısını ayarlamak için
runWith
yöntemidir. Bu yöntem
RuntimeOptions
özelliklerini tanımlayan
maxInstances
için değerleri kullanın. Örneğin, bu işlev 100'lük bir sınır belirler.
örneklerden kaçının:
exports.mirrorOrdersToLegacyDatabase = functions
.runWith({
// Legacy database only supports 100 simultaneous connections
maxInstances: 100,
})
.firestore.document("orders/{orderId}")
.onWrite((change, context) => {
// Connect to legacy database
});
Bir HTTP işlevi, maxInstances
sınırına kadar ölçeklendirilirse yeni istekler
30 saniye boyunca sıraya alındı ve ardından şu yanıt koduyla reddedildi:
O zamana kadar kullanılabilir örnek yoksa 429 Too Many Requests
.
Maksimum örnek sayısı ayarlarını kullanmayla ilgili en iyi uygulamalar hakkında daha fazla bilgi edinmek için
bunları
maxInstances
kullanımına yönelik en iyi uygulamalar.
Zaman aşımı ve bellek ayırmayı ayarlama
Bazı durumlarda, işlevlerinizin uzun bir zaman aşımı için özel gereksinimleri olabilir. veya büyük bir bellek ayırması söz konusu. Bu değerleri, Google Cloud Console'da veya işlev kaynak kodunda (yalnızca Firebase).
İşlev kaynak kodunda bellek ayırmayı ve zaman aşımını ayarlamak için
runWith
parametresi, Firebase SDK'sında Cloud Functions 2.0.0 için kullanıma sunuldu. Bu çalışma zamanı seçeneği
şuna uyan bir JSON nesnesidir:
RuntimeOptions
timeoutSeconds
ve memory
değerlerini tanımlayan arayüzdür.
Örneğin, bu depolama işlevi 1 GB bellek kullanır ve sonrasında zaman aşımına uğrar.
300 saniye:
exports.convertLargeFile = functions
.runWith({
// Ensure the function has enough memory and time
// to process large files
timeoutSeconds: 300,
memory: "1GB",
})
.storage.object()
.onFinalize((object) => {
// Do some complicated things that take a lot of memory and time
});
Maksimum timeoutSeconds
değeri 540
veya 9 dakikadır.
Bir işleve verilen bellek miktarı, ayrılan CPU'ya karşılık gelir.
işlevine ilişkin değer memory
için geçerli değerler listesinde açıklandığı şekilde yapılır:
128MB
- 200 MHz256MB
- 400 MHz512MB
- 800 MHz1GB
- 1,4 GHz2GB
- 2,4 GHz4GB
- 4,8 GHz8GB
- 4,8 GHz
Google Cloud konsolunda bellek ayırmayı ve zaman aşımını ayarlamak için:
- Google Google Cloud konsolunda şu menüden Cloud Functions'ı seçin: sol menü.
- İşlev listesinde adını tıklayarak bir işlev seçin.
- Üst menüde Düzenle simgesini tıklayın.
- Ayrılan bellek etiketli açılır menüden bir bellek tahsisi seçin.
- Gelişmiş seçenekleri görüntülemek için Diğer'i tıklayın ve Zaman aşımı metin kutusuna süreyi saniye cinsinden girin.
- İşlevi güncellemek için Kaydet'i tıklayın.