İşlevleri yönetme


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:

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:

  1. İşlevi yeniden adlandırın ve istediğiniz gibi bölgelerini değiştirin.
  2. 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.
  3. Ö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:

  1. Kaynak kodu, istenen tetikleyici türüne sahip yeni bir işlevi içerecek şekilde değiştirin.
  2. İşlevi dağıtın. Bu işlem, hem eski hem de yeni işlevlerin geçici olarak çalıştırılmasına neden olur.
  3. 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:

  1. Seçenek, işlevler kodunda ayarlanır: Harici değişiklikleri geçersiz kılın.
  2. İşlev kodunda seçenek RESET_VALUE olarak ayarlanır: Harici değişiklikleri varsayılan değerle geçersiz kılın.
  3. 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:

  1. Projenizin Blaze fiyatlandırma planı kapsamında olduğundan emin olun.
  2. Firebase CLI v11.18.0 veya sonraki bir sürümü kullandığınızdan emin olun.
  3. İlk kullanıma hazırlama sırasında functions/ dizininizde oluşturulan package.json dosyasındaki engines 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"}
  4. İsteğe bağlı olarak, Firebase Local Emulator Suite kullanarak değişikliklerinizi test edin.
  5. 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
Çağırma sıklıkları ve sınırlama üzerinde daha fazla kontrol için

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:

  1. Google Cloud konsolunda, sol menüden Cloud Functions for Firebase simgesini seçin.
  2. İşlevler listesinde adını tıklayarak bir işlev seçin.
  3. Üst menüdeki Düzenle simgesini tıklayın.
  4. Ayrılan bellek etiketli açılır menüden bir bellek ayırma seçeneği belirleyin.
  5. 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.
  6. İş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