Firebase KSA komutlarını kullanarak veya işlevlerinizin kaynak kodunda çalışma zamanı seçeneklerini ayarlayarak işlevleri dağıtabilir, silebilir ve değiştirebilirsiniz.
İşlevleri dağıtma
İşlevleri dağıtmak için şu Firebase KSA komutunu çalıştırın:
firebase deploy --only functions
Varsayılan olarak Firebase CLI, kaynağınızdaki tüm işlevleri aynı anda dağıtır. Projenizde 5'ten fazla işlev varsa yalnızca düzenlediğiniz işlevleri dağıtmak için --only
işaretini belirli işlev adlarıyla birlikte kullanmanızı öneririz. Belirli işlevleri bu şekilde dağıtmak, dağıtım sürecini hızlandırır ve dağıtım kotalarını aşmanızı önler. Örneğin:
firebase deploy --only functions:addMessage,functions:makeUppercase
Çok sayıda işlev dağıtırken standart kotayı aşabilir ve HTTP 429 veya 500 hata mesajları alabilirsiniz. Bu sorunu çözmek için işlevleri 10 veya daha az işlev içeren gruplar halinde dağıtın.
Kullanılabilir komutların tam listesi için Firebase KSA referansına bakın.
Firebase KSA, varsayılan olarak kaynak kodu functions/
klasöründe arar. İsterseniz işlevleri kod tabanlarında veya birden fazla dosya grubunda düzenleyebilirsiniz.
Dağıtım yapılarını temizleme
İşlev dağıtımı kapsamında container görüntüleri oluşturulur ve Artifact Registry içinde depolanır. Bu resimler, dağıtılan işlevlerinizin çalışması için gerekli değildir. Cloud Functions İlk dağıtım sırasında resmin bir kopyasını getirip saklar ancak saklanan yapılar, işlevin çalışma zamanında çalışması için gerekli değildir.
Bu kapsayıcı görüntüleri genellikle küçük olsa da zaman içinde birikebilir ve depolama maliyetlerinize katkıda bulunabilir. Derleme yapılarını incelemeyi veya kapsayıcı güvenlik açığı taramaları çalıştırmayı planlıyorsanız bunları belirli bir süre boyunca saklamayı tercih edebilirsiniz.
Depolama maliyetlerini yönetmeye yardımcı olmak için Firebase CLI 14.0.0 ve sonraki sürümler, her işlev dağıtımından sonra dağıtım yapılarını depolayan depolar için Artifact Registry temizleme politikası yapılandırmanıza olanak tanır.
functions:artifacts:setpolicy
komutunu kullanarak temizleme politikasını manuel olarak ayarlayabilir veya düzenleyebilirsiniz:
firebase functions:artifacts:setpolicy
Bu komut, varsayılan olarak Artifact Registry'yı 1 günden eski kapsayıcı görüntülerini otomatik olarak silecek şekilde yapılandırır. Bu sayede, depolama maliyetleri en aza indirilirken son derlemelerin olası incelemesine olanak tanınarak makul bir denge sağlanır.
--days
seçeneğini kullanarak saklama süresini özelleştirebilirsiniz:
firebase functions:artifacts:setpolicy --days 7 # Delete images older than 7 days
İşlevleri birden fazla bölgeye dağıtırsanız --location
seçeneğini kullanarak belirli bir konum için temizleme politikası ayarlayabilirsiniz:
$ firebase functions:artifacts:setpolicy --location europe-west1
Yapı temizlemeyi devre dışı bırakma
Resim temizleme işlemini manuel olarak yönetmeyi tercih ediyorsanız veya herhangi bir resmin silinmesini istemiyorsanız temizleme politikalarını tamamen devre dışı bırakabilirsiniz:
$ firebase functions:artifacts:setpolicy --none
Bu komut, Firebase CLI'nın ayarladığı mevcut tüm temizleme politikalarını kaldırır ve Firebase'in işlev dağıtımlarından sonra temizleme politikası ayarlamasını engeller.
İşlevleri silin
Daha önce dağıtılan işlevleri aşağıdaki yöntemlerle silebilirsiniz:
- Firebase KSA'da
functions:delete
ile açıkça - Google Cloud konsolunda açıkça belirtilmelidir.
- İşlevi dağıtımdan önce kaynaktan kaldırarak dolaylı olarak.
Tüm silme işlemleri, işlevi üretimden kaldırmadan önce onaylamanızı ister.
Firebase CLI'da işlevlerin açıkça silinmesi, birden fazla bağımsız değişkenin yanı sıra işlev gruplarını da destekler ve belirli bir bölgede çalışan bir işlevi belirtmenize olanak tanır. 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 işlemiyle firebase deploy
, kaynağınızı ayrıştırır ve dosyadan kaldırılan işlevleri üretimden kaldırır.
Bir işlevin adını, bölgesini veya tetikleyicisini değiştirme
Üretim trafiğini işleyen işlevlerin bölgelerini veya tetikleyicilerini yeniden adlandırıyor ya da değiştiriyorsanız değişiklik sırasında etkinlikleri kaybetmemek için bu bölümdeki adımları uygulayın. Bu adımları uygulamadan önce, değişikliğin yapıldığı sırada işlevinizin hem yeni hem de eski sürümü aynı anda çalışacağından işlevinizin idempotent olduğundan emin olun.
İş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 ve ardından iki ayrı dağıtım komutu çalıştırın. İlk komut, yeni adlandırılmış işlevi dağıtır. İkinci komut ise daha önce dağıtılmış sürümü kaldırır. Örneğin, yeniden adlandırmak istediğiniz bir HTTP tetikli webhook'unuz varsa kodu aşağıdaki gibi düzenleyin:
Node.js
// before
const {onRequest} = require('firebase-functions/v2/https');
exports.webhook = onRequest((req, res) => {
res.send("Hello");
});
// after
const {onRequest} = require('firebase-functions/v2/https');
exports.webhookNew = onRequest((req, res) => {
res.send("Hello");
});
Python
# before
from firebase_functions import https_fn
@https_fn.on_request()
def webhook(req: https_fn.Request) -> https_fn.Response:
return https_fn.Response("Hello world!")
# after
from firebase_functions import https_fn
@https_fn.on_request()
def webhook_new(req: https_fn.Request) -> https_fn.Response:
return https_fn.Response("Hello world!")
Ardından, yeni işlevi dağıtmak için aşağıdaki komutları çalıştırın:
# Deploy new function firebase deploy --only functions:webhookNew # Wait until deployment is done; now both functions are running # Delete webhook firebase functions:delete webhook
Bir işlevin bölgesini veya bölgelerini değiştirme
Üretim trafiğini işleyen bir işlev için belirtilen bölgeleri değiştiriyorsanız aşağıdaki adımları sırayla uygulayarak etkinlik kaybını önleyebilirsiniz:
- İşlevi yeniden adlandırın ve istediğiniz gibi bölgelerini değiştirin.
- Yeniden adlandırılan işlevi dağıtın. Bu işlem, aynı kodun her iki bölge grubunda da geçici olarak çalıştırılmasına neden olur.
- Önceki işlevi silin.
Örneğin, şu anda us-central1
bölgesinin varsayılan işlevler bölgesinde bulunan ve Cloud Firestore ile tetiklenen bir işleviniz varsa ve bunu asia-northeast1
bölgesine taşımak istiyorsanız önce kaynak kodunuzu değiştirerek işlevi yeniden adlandırmanız ve bölgeyi düzeltmeniz gerekir.
Node.js
// before
exports.firestoreTrigger = onDocumentCreated(
"my-collection/{docId}",
(event) => {},
);
// after
exports.firestoreTriggerAsia = onDocumentCreated(
{
document: "my-collection/{docId}",
region: "asia-northeast1",
},
(event) => {},
);
Güncellenen kodda, bölgeyle birlikte doğru etkinlik filtresi (bu örnekte document
) belirtilmelidir. Daha fazla bilgi için Cloud Functions konumları bölümüne bakın.
Python
# Before
@firestore_fn.on_document_created("my-collection/{docId}")
def firestore_trigger(event):
pass
# After
@firestore_fn.on_document_created("my-collection/{docId}",
region="asia-northeast1")
def firestore_trigger_asia(event):
pass
Ardından şu komutu çalıştırarak dağıtın:
firebase deploy --only functions:firestoreTriggerAsia
Şimdi iki özdeş işlev çalışıyor: firestoreTrigger
, us-central1
içinde, firestoreTriggerAsia
ise asia-northeast1
içinde çalışıyor.
Ardından firestoreTrigger
öğesini silin:
firebase functions:delete firestoreTrigger
Artık yalnızca firestoreTriggerAsia
işlevi var ve bu işlev asia-northeast1
içinde çalışıyor.
İşlevin tetikleyici türünü değiştirme
Cloud Functions for Firebase dağıtımınızı zaman içinde geliştirirken çeşitli nedenlerle bir işlevin tetikleyici türünü değiştirmeniz gerekebilir. Örneğin, bir Firebase Realtime Database veya Cloud Firestore etkinliği türünden başka bir türe geçmek isteyebilirsiniz.
Bir işlevin etkinlik türünü yalnızca kaynak kodu değiştirip firebase deploy
komutunu çalıştırarak değiştirmek mümkün değildir. Hataları önlemek için,
bir işlevin tetikleyici türünü aşağıdaki prosedürle değiştirin:
- Kaynak kodu, istenen tetikleyici türüne sahip yeni bir işlevi içerecek şekilde değiştirin.
- İşlevi dağıtın. Bu işlem, hem eski hem de yeni işlevlerin geçici olarak çalıştırılmasına neden olur.
- Firebase KSA'yı kullanarak eski işlevi üretimden açıkça silin.
Örneğin, bir nesne silindiğinde tetiklenen bir işleviniz varsa ancak daha sonra nesne sürüm oluşturmayı etkinleştirdiyseniz ve bunun yerine arşiv etkinliğine abone olmak istiyorsanız önce işlevi yeniden adlandırın ve yeni tetikleyici türüne sahip olacak şekilde düzenleyin.
Node.js
// before
const {onObjectDeleted} = require("firebase-functions/v2/storage");
exports.objectDeleted = onObjectDeleted((event) => {
// ...
});
// after
const {onObjectArchived} = require("firebase-functions/v2/storage");
exports.objectArchived = onObjectArchived((event) => {
// ...
});
Python
# before
from firebase_functions import storage_fn
@storage_fn.on_object_deleted()
def object_deleted(event):
# ...
# after
from firebase_functions import storage_fn
@storage_fn.on_object_archived()
def object_archived(event):
# ...
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 objectArchived firebase deploy --only functions:objectArchived # Wait until deployment is done; now both objectDeleted and objectArchived are running # Delete objectDeleted firebase functions:delete objectDeleted
Çalışma zamanı seçeneklerini ayarlama
Cloud Functions for Firebase, Node.js çalışma zamanı sürümü ve işlev başına zaman aşımı, bellek ayırma ve minimum/maksimum işlev örnekleri gibi çalışma zamanı seçeneklerini belirlemenize olanak tanır.
En iyi uygulama olarak, bu seçenekler (Node.js sürümü hariç) işlev kodunun içindeki bir yapılandırma nesnesinde ayarlanmalıdır. Bu
RuntimeOptions
nesnesi, işlevinizin çalışma zamanı seçenekleriyle ilgili tek doğru kaynaktır ve başka bir yöntemle (ör. Google Cloud Console veya gcloud CLI aracılığıyla) ayarlanan seçenekleri geçersiz kılar.
Geliştirme iş akışınızda Google Cloud Console veya gcloud CLI aracılığıyla çalışma zamanı seçeneklerini manuel olarak ayarlama yer alıyorsa ve bu değerlerin her dağıtımda geçersiz kılınmasını istemiyorsanız preserveExternalChanges
seçeneğini true
olarak ayarlayın.
Bu seçenek true
olarak ayarlandığında Firebase, kodunuzda ayarlanan çalışma zamanı seçeneklerini işlevinizin şu anda dağıtılan sürümünün ayarlarıyla aşağıdaki öncelik sırasına göre birleştirir:
- Seçenek, işlevler kodunda ayarlanır: Harici değişiklikleri geçersiz kılın.
- İşlev kodunda seçenek
RESET_VALUE
olarak ayarlanır: Harici değişiklikleri varsayılan değerle geçersiz kılın. - Seçenek, işlev kodunda ayarlanmamış ancak şu anda dağıtılan işlevde ayarlanmış: Dağıtılan işlevde belirtilen seçeneği kullanın.
preserveExternalChanges: true
seçeneğinin kullanılması, kodunuz artık işlevlerinizin çalışma zamanı seçenekleri için tam doğru kaynak olmayacağından çoğu senaryoda önerilmez. Bu özelliği kullanıyorsanız Google Cloud Console'u kontrol edin veya bir işlevin tam yapılandırmasını görüntülemek için gcloud CLI'yı kullanın.
Node.js sürümünü ayarlama
Firebase SDK'sı, Cloud Functions için Node.js çalışma zamanı seçimine olanak tanır. Bir projedeki tüm işlevleri yalnızca şu desteklenen Node.js sürümlerinden birine karşılık gelen çalışma zamanı ortamında çalıştırmayı seçebilirsiniz:
- Node.js 22
- Node.js 20
- Node.js 18 (kullanımdan kaldırıldı)
Node.js 14 ve 16 sürümleri 2025'in başlarında kullanımdan kaldırıldı. Bu sürümlerle dağıtım devre dışı bırakılır. Node.js'nin bu sürümlerine yönelik devam eden destekle ilgili önemli bilgiler için destek programına bakın.
Node.js sürümünü ayarlamak için:
Başlatma sırasında functions/
dizininizde oluşturulan package.json
dosyasındaki engines
alanında sürümü ayarlayabilirsiniz.
Örneğin, yalnızca 20. sürümü kullanmak için package.json
dosyasında şu satırı düzenleyin:
"engines": {"node": "20"}
Yarn paket yöneticisini kullanıyorsanız veya engines
alanı için başka özel gereksinimleriniz varsa Firebase SDK'sının çalışma zamanını Cloud Functions için firebase.json
içinde ayarlayabilirsiniz:
{
"functions": {
"runtime": "nodejs20" // or nodejs22
}
}
CLI, firebase.json
içinde ayarlanan değeri package.json
içinde ayrı olarak ayarladığınız herhangi bir değer veya aralığa tercih eder.
Node.js çalışma zamanınızı yükseltme
Node.js çalışma zamanınızı yükseltmek için:
- Projenizin Blaze fiyatlandırma planı kapsamında olduğundan emin olun.
- Firebase CLI v11.18.0 veya sonraki bir sürümü kullandığınızdan emin olun.
- İlk kullanıma hazırlama sırasında
functions/
dizininizde oluşturulanpackage.json
dosyasındakiengines
değerini değiştirin. Örneğin, 18. sürümden 20. sürüme yükseltme yapıyorsanız giriş şu şekilde görünmelidir:"engines": {"node": "20"}
- İsteğe bağlı olarak, Firebase Local Emulator Suite kullanarak değişikliklerinizi test edin.
- Tüm işlevleri yeniden dağıtın.
Python sürümünü ayarlama
Cloud Functions 12.0.0 ve sonraki sürümleri için Firebase SDK'sı, Python çalışma zamanının seçilmesine olanak tanır. Çalışma zamanı sürümünü firebase.json
içinde aşağıdaki gibi ayarlayın:
{
"functions": {
"runtime": "python310" // or python311
}
}
Ölçeklendirme davranışını denetleme
Varsayılan olarak, Cloud Functions for Firebase, çalışan örneklerin sayısını gelen isteklerin sayısına göre ölçeklendirir. Bu işlem, trafik azaldığında örnek sayısını sıfıra düşürecek şekilde de yapılabilir. Ancak uygulamanızın gecikmenin azaltılmasını gerektirmesi ve baştan başlatma sayısını sınırlamak istemeniz durumunda, sıcak tutulacak ve isteklere hizmet vermeye hazır olacak minimum sayıda kapsayıcı örneği belirterek bu varsayılan davranışı değiştirebilirsiniz.
Benzer şekilde, gelen isteklere yanıt olarak örneklerin ölçeklendirilmesini sınırlamak için maksimum sayı belirleyebilirsiniz. Bu ayarı, maliyetlerinizi kontrol etmek veya bir veritabanı gibi destekleyici bir hizmete yapılan bağlantı sayısını sınırlamak için kullanın.
Bu ayarları, örnek başına eşzamanlılık ayarıyla (2. nesilde yeni) birlikte kullanarak işlevlerinizin ölçeklendirme davranışını kontrol edebilir ve ayarlayabilirsiniz. Uygulamanızın ve işlevinizin yapısı, hangi ayarların en uygun maliyetli olduğunu ve en iyi performansı sağlayacağını belirler.
Trafiği düşük olan bazı uygulamalar için eşzamanlılık içermeyen daha düşük bir CPU seçeneği idealdir. Soğuk başlatmaların kritik bir sorun olduğu diğer durumlarda, yüksek eşzamanlılık ve minimum örnek sayısı ayarlanması, trafikteki büyük artışları karşılamak için bir dizi örneğin her zaman sıcak tutulması anlamına gelir.
Çok az trafik alan daha küçük ölçekli uygulamalarda, yüksek eşzamanlılık ile düşük maksimum örnek sayısı belirlemek, uygulamanın aşırı maliyetlere yol açmadan trafik patlamalarını yönetebileceği anlamına gelir. Ancak, maksimum örnek sayısı çok düşük ayarlandığında tavan değere ulaşıldığında isteklerin bırakılabileceğini unutmayın.
Eşzamanlı isteklere izin ver
Cloud Functions for Firebase (1. nesil) sürümünde her örnek aynı anda yalnızca bir isteği işleyebiliyordu. Bu nedenle ölçeklendirme davranışı yalnızca minimum ve maksimum örnek ayarlarıyla belirleniyordu.
Cloud Functions for Firebase (2. nesil) sürümünde, örnek sayısını kontrol etmenin yanı sıra concurrency
seçeneğiyle her örneğin aynı anda sunabileceği istek sayısını da kontrol edebilirsiniz. Eşzamanlılık için varsayılan değer 80'dir ancak bu değeri 1 ile 1.000 arasında herhangi bir tam sayıya ayarlayabilirsiniz.
Daha yüksek eşzamanlılık ayarlarına sahip işlevler, her örnekte bir miktar boş alan olabileceği için soğuk başlatma olmadan trafik artışlarını karşılayabilir. Bir örnek, en fazla 50 eşzamanlı isteği işleyecek şekilde yapılandırılmışsa ancak şu anda yalnızca 25 isteği işliyorsa yeni bir örneğin soğuk başlatılmasına gerek kalmadan 25 ek isteğin ani artışını işleyebilir. Buna karşılık, eşzamanlılık ayarı yalnızca 1 olduğunda isteklerdeki bu artış 25 soğuk başlatmaya yol açabilir.
Bu basitleştirilmiş senaryo, eşzamanlılığın potansiyel verimlilik kazanımlarını gösterir. Ancak verimliliği optimize etmek ve eşzamanlılık ile soğuk başlatmaları azaltmak için ölçeklendirme davranışı daha karmaşıktır. Cloud Functions for Firebase 2. nesilde eşzamanlılık, Cloud Run tarafından desteklenir ve Cloud Run'nin container örneğini otomatik ölçeklendirme kurallarına uyar.
Cloud Functions for Firebase(2. nesil) içinde daha yüksek eşzamanlılık ayarlarıyla deneme yaparken aşağıdakileri göz önünde bulundurun:
- Daha yüksek eşzamanlılık ayarları, pratik bir sınıra ulaşılana kadar optimum performans için daha yüksek CPU ve RAM gerektirebilir. Örneğin, yoğun görüntü veya video işleme yapan bir işlev, CPU ve RAM ayarları en üst düzeye çıkarılmış olsa bile 1.000 eşzamanlı isteği işlemek için yeterli kaynağa sahip olmayabilir.
- Cloud Functions for Firebase (2. nesil) Cloud Run tarafından desteklendiğinden Google Cloud kılavuzundaki eşzamanlılığı optimize etme ile ilgili bilgileri de inceleyebilirsiniz.
- Üretimde çoklu eşzamanlılığa geçmeden önce test ortamında çoklu eşzamanlılığı kapsamlı bir şekilde test ettiğinizden emin olun.
Minimum sayıda örneği sıcak tutma
Kaynak kodda bir işlev için minimum örnek sayısı belirleyebilirsiniz. Örneğin, bu işlev, hazır tutulacak minimum örnek sayısını 5 olarak ayarlar:
Node.js
const { onCall } = require("firebase-functions/v2/https");
exports.getAutocompleteResponse = onCall(
{
// Keep 5 instances warm for this latency-critical function
minInstances: 5,
},
(event) => {
// Autocomplete user’s search term
}
);
Python
@https_fn.on_call(min_instances=5)
def get_autocomplete_response(event: https_fn.CallableRequest) -> https_fn.Response:
Minimum örnek sayısı değeri belirlerken dikkat etmeniz gereken bazı noktalar şunlardır:
- Cloud Functions for Firebase, uygulamanızı ayarınızın üzerinde ölçeklendirirse bu eşiğin üzerindeki her örnek için baştan başlatma deneyimi yaşarsınız.
- Baştan başlatma, trafiği ani artışlar gösteren uygulamaları en çok etkiler. Uygulamanızda ani trafik artışları varsa ve her trafik artışında soğuk başlatmaların azaltılmasını sağlayacak kadar yüksek bir değer ayarlarsanız gecikme süresinin önemli ölçüde azaldığını görürsünüz. Sürekli trafiğe sahip uygulamalarda sıfırdan başlatmaların performansı ciddi şekilde etkilemesi olası değildir.
Minimum örnek sayısını ayarlamak üretim ortamları için mantıklı olabilir ancak genellikle test ortamlarında bundan kaçınılmalıdır. Test projenizde sıfıra ölçeklendirme yaparken üretim projenizdeki soğuk başlatmaları azaltmak için parametrelendirilmiş yapılandırmanızda minimum örnek değeri ayarlayabilirsiniz:
Node.js
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.`); } );
Python
MIN_INSTANCES = params.IntParam("HELLO_WORLD_MININSTANCES") WELCOME_MESSAGE = params.StringParam("WELCOME_MESSAGE") @https_fn.on_request(min_instances=MIN_INSTANCES.value()) def get_autocomplete_response(event: https_fn.Request) -> https_fn.Response: return https_fn.Response(f"{WELCOME_MESSAGE.value()} I'm a function.")
Bir işlevin maksimum örnek sayısını sınırlama
İşlev kaynak kodunda maksimum örnek sayısı için bir değer belirleyebilirsiniz. Örneğin, bu işlev, varsayımsal bir eski veritabanını aşırı yüklememek için 100 örnek sınırı belirler:
Node.js
const { onMessagePublished } = require("firebase-functions/v2/pubsub");
exports.mirrorevents = onMessagePublished(
{ topic: "topic-name", maxInstances: 100 },
(event) => {
// Connect to legacy database
}
);
Python
@pubsub_fn.on_message_published(topic="topic-name", max_instances=100)
def mirrorevents(event: pubsub_fn.CloudEvent):
# Connect to legacy database
Bir HTTP işlevi maksimum örnek sınırına kadar ölçeklendirilirse yeni istekler 30 saniye boyunca sıraya alınır ve bu süre içinde herhangi bir örnek kullanılamazsa 429 Too Many Requests
yanıt koduyla reddedilir.
Maksimum örnek ayarlarını kullanmayla ilgili en iyi uygulamalar hakkında daha fazla bilgi edinmek için maksimum örnek sayısını ayarlamayla ilgili en iyi uygulamalar başlıklı makaleyi inceleyin.
Zaman aşımı ve bellek ayırma süresini ayarlama
Bazı durumlarda, işlevleriniz için uzun bir zaman aşımı değeri veya büyük bir bellek ayırma işlemi gerekebilir. Bu değerleri Google Cloud konsolunda veya işlev kaynak kodunda (yalnızca Firebase) ayarlayabilirsiniz.
İşlevler kaynak kodunda bellek ayırma ve zaman aşımını ayarlamak için işlevlerinizi çalıştıran sanal makineyi özelleştirmek üzere bellek ve zaman aşımı saniyeleri için genel seçenekleri kullanın. Örneğin, bu Cloud Storage işlevi 1 GiB bellek kullanır ve 300 saniye sonra zaman aşımına uğrar:
Node.js
exports.convertLargeFile = onObjectFinalized({
timeoutSeconds: 300,
memory: "1GiB",
}, (event) => {
// Do some complicated things that take a lot of memory and time
});
Python
@storage_fn.on_object_finalized(timeout_sec=300, memory=options.MemoryOption.GB_1)
def convert_large_file(event: storage_fn.CloudEvent):
# Do some complicated things that take a lot of memory and time.
Zaman aşımı saniyeleri için maksimum değer 540
veya 9 dakikadır.
Google Cloud konsolunda bellek tahsisini ve zaman aşımını ayarlamak için:
- Google Cloud konsolunda, sol menüden Cloud Functions for Firebase simgesini seçin.
- İşlevler listesinde adını tıklayarak bir işlev seçin.
- Üst menüdeki Düzenle simgesini tıklayın.
- Ayrılan bellek etiketli açılır menüden bir bellek ayırma seçeneği belirleyin.
- Gelişmiş seçenekleri görüntülemek için Diğer'i tıklayın ve Zaman aşımı metin kutusuna saniye cinsinden bir sayı girin.
- İşlevi güncellemek için Kaydet'i tıklayın.
CPU varsayılanlarını geçersiz kılma
2 GB'a kadar bellek ayrılır. Cloud Functions for Firebase (2. nesil) bölgesindeki her işlev varsayılan olarak bir CPU'ya ayarlanır, ardından 4 ve 8 GB için 2 CPU'ya yükseltilir. Bu davranışın, 1. nesil varsayılan davranışından önemli ölçüde farklı olduğunu ve aşağıdaki tabloda belirtildiği gibi düşük bellekli işlevler için biraz daha yüksek maliyetlere yol açabileceğini unutmayın:
Ayrılan RAM | Varsayılan 1. sürüm CPU'su (kesirli) | Varsayılan 2. sürüm CPU | Ms başına fiyat artışı |
---|---|---|---|
128 MB | 1/12 | 1 | 10,5 kat |
256 MB | 1/6 | 1 | 5,3 kat |
512 MB | 1/3 | 1 | 2,7x |
1 GB | 7/12 | 1 | 1,6x |
2 GB | 1 | 1 | 1 kat |
4 GB | 2 | 2 | 1 kat |
8 GB | 2 | 2 | 1 kat |
16 GB | Yok | 4 | Yok |
2. nesil işlevleriniz için 1. nesil davranışını tercih ediyorsanız 1. nesil varsayılanlarını genel bir seçenek olarak ayarlayın:
Node.js
// Turn off Firebase defaults
setGlobalOptions({ cpu: 'gcf_gen1' });
Python
# Use 1st gen behavior
set_global_options(cpu="gcf_gen1")
2. nesil, CPU yoğun işlevler için ek CPU yapılandırma esnekliği sunar. CPU'yu işlev bazında aşağıdaki gibi artırabilirsiniz:
Node.js
// Boost CPU in a function:
export const analyzeImage = onObjectFinalized({ cpu: 2 }, (event) => {
// computer vision goes here
});
Python
# Boost CPU in a function:
@storage_fn.on_object_finalized(cpu=2)
def analyze_image(event: storage_fn.CloudEvent):
# computer vision goes here