İşlevleri yönetme

Firebase CLI 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 CLI 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 belirli işlev adlarıyla --only işaretini kullanmanızı öneririz. Belirli işlevleri bu şekilde dağıtmak, dağıtım sürecini hızlandırır ve dağıtım kotalarıyla karşılaş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 sayıda gruplar halinde dağıtın.

Kullanılabilir komutların tam listesi için Firebase KSA referansına bakın.

Varsayılan olarak Firebase CLI, kaynak kodu için functions/ klasörüne bakar. Dilerseniz kod tabanlarında veya birden fazla dosya grubunda işlevleri düzenleyebilirsiniz.

Dağıtım yapılarını temizleme

İşlev dağıtımının bir parçası olarak container görüntüleri oluşturulur ve Artifact Registry içinde depolanır. Bu görüntüler, dağıtılan işlevlerinizin çalışması için gerekli değildir. Cloud Functions, ilk dağıtımda görüntünün bir kopyasını getirir ve saklar ancak depolanan yapılar, işlevin çalışma zamanında çalışması için gerekli değildir.

Bu container görüntüleri genellikle küçük olsa da zamanla birikebilir ve depolama maliyetlerinizi artırabilir. Derlenen yapıları incelemeyi veya container güvenlik açığı taramaları yapmayı planlıyorsanız bunları bir süre saklamayı tercih edebilirsiniz.

Depolama alanı 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 bir temizleme politikasını manuel olarak ayarlayabilir veya düzenleyebilirsiniz:

firebase functions:artifacts:setpolicy

Bu komut, varsayılan olarak Artifact Registry aracını 1 günden eski container görüntülerini otomatik olarak silecek şekilde yapılandırır. Bu sayede, depolama maliyetlerini en aza indirme ve son derlemelerin incelenmesine olanak tanıma arasında 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ıyorsanız --location seçeneğini kullanarak belirli bir konum için temizleme politikası oluşturabilirsiniz:

$ firebase functions:artifacts:setpolicy --location europe-west1

Yapı temizleme özelliğini devre dışı bırakma

Resim temizleme işlemini manuel olarak yönetmeyi tercih ediyorsanız veya hiç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 temizleme politikalarını kaldırır ve Firebase'in işlev dağıtımlarından sonra temizleme politikası oluşturmasını engeller.

İşlevleri silin

Daha önce dağıtılan işlevleri şu yöntemlerle silebilirsiniz:

  • Firebase CLI'da functions:delete ile açıkça
  • Google Cloud Console'da açıkça belirtmeniz gerekir.
  • İş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 açık işlev silme, birden fazla bağımsız değişkenin yanı sıra işlev gruplarını destekler ve belirli bir bölgede çalışan bir işlevi belirtmenize olanak tanır. Ayrıca onay istemini geçersiz kılabilirsiniz.

  • Tüm bölgelerde belirtilen adla eşleşen tüm işlevleri siler:

    firebase functions:delete FUNCTION-1_NAME

  • Varsayılan olmayan bir bölgede çalışan belirli bir işlevi siler:

    firebase functions:delete FUNCTION-1_NAME --region REGION_NAME

  • Birden fazla işlevi siler:

    firebase functions:delete FUNCTION-1_NAME FUNCTION-2_NAME

  • Belirtilen işlev grubunu siler:

    firebase functions:delete GROUP_NAME

  • Onay istemini atlar:

    firebase functions:delete FUNCTION-1_NAME --force

Dolaylı işlev silme özelliğiyle 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ş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 işlevinizin idempotent olduğundan emin olun. Değişiklik sırasında işlevinizin hem yeni hem de eski sürümü aynı anda çalışır.

İşlevleri 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ılan işlevi dağıtır ve ikinci komut, daha önce dağıtılan sürümü kaldırır. Örneğin, yeniden adlandırmak istediğiniz HTTP ile tetiklenen bir 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 bölgesini veya bölgelerini istediğiniz gibi 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 siler.

Örneğin, şu anda us-central1 bölgesinde dağıtılmış olan Cloud Firestore ile tetiklenen bir işleviniz varsa ve bu işlevi 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 kod, bölgeyle birlikte doğru etkinlik filtresini (bu örnekte document) belirtmelidir. 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 aşağıdaki komutu çalıştırarak dağıtın:

firebase deploy --only functions:firestoreTriggerAsia

Artık çalışan iki özdeş işlev vardır: firestoreTrigger, us-central1 bölgesinde ve firestoreTriggerAsia, asia-northeast1 bölgesinde çalışmaktadır.

Ardından firestoreTrigger silin:

firebase functions:delete firestoreTrigger

Artık yalnızca bir işlev var: asia-northeast1 içinde çalışan firestoreTriggerAsia.

Bir işlevin tetikleyici türünü değiştirme

Zaman içinde Cloud Functions for Firebase dağıtımınızı 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.

Yalnızca kaynak kodunu değiştirip firebase deploy komutunu çalıştırarak bir işlevin etkinlik türünü değiştirmek mümkün değildir. Hataları önlemek için bir işlevin tetikleyici türünü şu prosedürü uygulayarak değiştirin:

  1. Kaynak kodunu, istenen tetikleyici türüne sahip yeni bir işlev 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 CLI'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şturma özelliğini 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çenekleri için doğru bilgi kaynağıdır ve diğer yöntemler (ör. Google Cloud konsolu veya gcloud CLI) kullanılarak ayarlanan seçenekleri geçersiz kılar.

Geliştirme iş akışınızda çalışma zamanı seçeneklerini Google Cloud konsolu veya gcloud CLI kullanarak manuel olarak ayarlıyorsanız 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ılmış sürümünün ayarlarıyla aşağıdaki önceliğe göre birleştirir:

  1. Seçenek, işlev kodunda ayarlanır: Harici değişiklikleri geçersiz kıl.
  2. Seçenek, işlev kodunda RESET_VALUE olarak ayarlanmış: 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ışsa: Dağıtılan işlevde belirtilen seçeneği kullanın.

preserveExternalChanges: true seçeneğinin kullanılması çoğu senaryo için önerilmez. Bunun nedeni, kodunuzun artık işlevlerinizin çalışma zamanı seçenekleri için tam doğruluk kaynağı olmayacak olmasıdır. Kullanıyorsanız bir işlevin tam yapılandırmasını görüntülemek için Google Cloud konsoluna bakın veya gcloud CLI aracını kullanın.

Node.js sürümünü ayarlama

Cloud Functions için Firebase SDK'sı, Node.js çalışma zamanı seçimine olanak tanır. Bir projedeki tüm işlevleri, desteklenen Node.js sürümlerinden birine karşılık gelen çalışma zamanı ortamında çalıştırabilirsiniz:

  • Node.js 22
  • Node.js 20
  • Node.js 18 (desteği sonlandırıldı)

Node.js'nin 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ıldı. Node.js'nin bu sürümlerine yönelik devam eden destekle ilgili önemli bilgiler için destek takvimine bakın.

Node.js sürümünü ayarlamak için:

Sürümü, başlatma sırasında functions/ dizininizde oluşturulan package.json dosyasındaki engines alanında ayarlayabilirsiniz. Örneğin, yalnızca 20. sürümü kullanmak için package.json dosyasındaki ş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 Cloud Functions için Firebase SDK'sının çalışma zamanını firebase.json içinde ayarlayabilirsiniz:

  {
    "functions": {
      "runtime": "nodejs20" // or nodejs22
    }
  }

CLI, package.json içinde ayrı olarak ayarladığınız herhangi bir değer veya aralık yerine firebase.json içinde ayarlanan değeri kullanır.

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ında olduğundan emin olun.
  2. Firebase CLI v11.18.0 veya sonraki bir sürümü kullandığınızdan emin olun.
  3. Başlatma 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. İsterseniz değişikliklerinizi Firebase Local Emulator Suite kullanarak test edebilirsiniz.
  5. Tüm işlevleri yeniden dağıtın.

Node.js modül sistemi seçme

Node.js'deki varsayılan modül sistemi CommonJS'dir (CJS). Ancak mevcut Node.js sürümleri ECMAScript Modüllerini (ESM) de destekler. Cloud Functions her ikisini de destekler.

İşlevleriniz varsayılan olarak CommonJS kullanır. Bu durumda içe ve dışa aktarma işlemleri şu şekilde görünür:

const {onRequest} = require("firebase-functions/https");

exports.helloWorld = onRequest(async (req, res) => res.send("Hello from Firebase!"));

Bunun yerine ESM kullanmak için package.json dosyanızda "type": "module" alanını ayarlayın :

  {
   ...
   "type": "module",
   ...
  }

Bu ayarı yaptıktan sonra ESM import ve export söz dizimini kullanın:

import {onRequest} from "firebase-functions/https";

export const helloWorld = onRequest(async (req, res) => res.send("Hello from Firebase!"));

Her iki modül sistemi de tam olarak desteklenir. Projenize en uygun olanı seçebilirsiniz. Modüllerle ilgili Node.js belgelerinden daha fazla bilgi edinebilirsiniz.

Python sürümünü ayarlama

Cloud Functions için Firebase SDK'sının 12.0.0 ve sonraki sürümlerinde Python çalışma zamanı seçilebilir. firebase.json içinde çalışma zamanı sürümünü şu şekilde ayarlayın:

  {
    "functions": {
      "runtime": "python310" // or python311
    }
  }

Ölçeklendirme davranışını kontrol etme

Cloud Functions for Firebase, çalışan örneklerin sayısını varsayılan olarak gelen isteklerin sayısına göre ölçeklendirir. Trafiğin azaldığı zamanlarda örnek sayısını sıfıra kadar ölçeği azaltabilir. Ancak uygulamanız daha düşük gecikme süresi gerektiriyorsa ve soğuk başlatma sayısını sınırlamak istiyorsanız etkin durumda tutulacak ve istekleri karşılamaya hazır olacak minimum kapsayıcı örneği sayısını belirterek bu varsayılan davranışı değiştirebilirsiniz.

Benzer şekilde, gelen isteklere yanıt olarak örneklerin ölçeklendirilmesini sınırlamak için maksimum bir sayı belirleyebilirsiniz. Bu ayarı, maliyetlerinizi kontrol etmek veya veritabanı gibi bir destek hizmetine yapılan bağlantı sayısını sınırlamak için kullanabilirsiniz.

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 çoklu eşzamanlılık içermeyen daha düşük bir CPU seçeneği idealdir. Soğuk başlatmanın kritik bir sorun olduğu diğer durumlarda, yüksek eşzamanlılık ve minimum örnek sayısı ayarlamak, büyük trafik artışlarını karşılamak için bir grup örneğin her zaman sıcak tutulması anlamına gelir.

Çok az trafik alan daha küçük ölçekli uygulamalar için yüksek eşzamanlılığa sahip düşük maksimum örnek sayısı ayarlamak, uygulamanın aşırı maliyetlere yol açmadan trafik artışlarını yönetebileceği anlamına gelir. Ancak maksimum örnek sayısı çok düşük ayarlandığında, üst sınıra 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 bir istek işleyebiliyordu. Bu nedenle, ölçeklendirme davranışı yalnızca minimum ve maksimum örnek ayarlarıyla belirleniyordu. Örnek sayısını kontrol etmenin yanı sıra Cloud Functions for Firebase (2. nesil) ile her örneğin aynı anda sunabileceği istek sayısını concurrency seçeneğiyle 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ı olarak ayarlayabilirsiniz.

Daha yüksek eşzamanlılık ayarlarına sahip işlevler, her örneğin muhtemelen bir miktar boşluk payı olduğundan soğuk başlatma olmadan trafik artışlarını karşılayabilir. Bir örnek, aynı anda 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şlatma yapmasına gerek kalmadan 25 ek istekten oluşan bir ani artışı işleyebilir. Buna karşılık, eşzamanlılık ayarı yalnızca 1 olduğunda isteklerdeki bu ani artış 25 soğuk başlatmaya neden olabilir.

Bu basitleştirilmiş senaryo, eşzamanlılığın sağlayabileceği verimlilik artışını gösterir. Gerçekte ise verimliliği optimize etmek ve eşzamanlılıkla soğuk başlatmaları azaltmak için ölçeklendirme davranışı daha karmaşıktır. 2. nesildeki eşzamanlılık, Cloud Functions for Firebase tarafından desteklenir ve Cloud Run'nin kapsayıcı örneği otomatik ölçeklendirme kurallarına uyar.Cloud Run

Cloud Functions for Firebase (2. nesil) ürünündeki daha yüksek eşzamanlılık ayarlarını denerken aşağıdakileri göz önünde bulundurun:

  • Daha yüksek eşzamanlılık ayarları, pratik bir sınıra ulaşana kadar optimum performans için daha yüksek CPU ve RAM gerektirebilir. Örneğin, yoğun resim 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şleyecek kaynaklara sahip olmayabilir.
  • Cloud Functions for Firebase (2. nesil), Cloud Run tarafından desteklendiğinden eşzamanlılığı optimize etmek için Google Cloud kılavuzuna da bakabilirsiniz.
  • Üretimde çoklu eşzamanlılığa geçmeden önce çoklu eşzamanlılığı bir test ortamında kapsamlı bir şekilde test ettiğinizden emin olun.

Minimum sayıda örneği sıcak tutma

Kaynak kodunda bir işlev için minimum örnek sayısını ayarlayabilirsiniz. Örneğin, bu işlev sıcak tutulacak minimum 5 örnek 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 işlemi gerçekleştirilir.
  • Soğuk başlatmalar, trafiği düzensiz olan uygulamaları en ciddi şekilde etkiler. Uygulamanızın trafiğinde ani artışlar oluyorsa ve her trafik artışında soğuk başlatmaların azalacağı kadar yüksek bir değer ayarlarsanız gecikmenin önemli ölçüde azaldığını görürsünüz. Sürekli trafiği olan uygulamalarda soğuk 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 projenizde soğuk başlatmaları azaltmak için parametreleştirilmiş yapılandırmanızda minimum örnek değeri ayarlayabilirsiniz:

    Node.js

    const { onRequest } = require('firebase-functions/https');
    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 = onRequest(
      { minInstances: minInstancesConfig },
    (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şlev için 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 kullanılabilir örnek yoksa 429 Too Many Requests yanıt koduyla reddedilir.

Maksimum örnek sayısı ayarlarını kullanmayla ilgili en iyi uygulamalar hakkında daha fazla bilgi edinmek için maksimum örnek sayısını ayarlamayla ilgili en iyi uygulamalara göz atın.

Hizmet hesabı ayarlama

İşlevler için varsayılan hizmet hesapları, diğer Firebase ve Google Cloud hizmetleriyle etkileşim kurmanıza olanak tanıyan geniş bir izin grubuna sahiptir:

  • 2. nesil işlevler: PROJECT_NUMBER-compute@developer.gserviceaccount.com (Compute Engine varsayılan hizmet hesabı olarak adlandırılır)
  • 1. nesil işlevler: PROJECT_ID@appspot.gserviceaccount.com (App Engine varsayılan hizmet hesabı olarak adlandırılır)

Varsayılan hizmet hesabını geçersiz kılmak ve bir işlevi tam olarak gereken kaynaklarla sınırlamak isteyebilirsiniz. Bunu yapmak için özel bir hizmet hesabı oluşturup serviceAccount yapılandırma değerini kullanarak bu hesabı uygun işleve atayabilirsiniz:

const { onRequest } = require("firebase-functions/https");

exports.helloWorld = onRequest(
    {
        // This function doesn't access other Firebase project resources, so it uses a limited service account.
        serviceAccount:
            "my-limited-access-sa@", // or prefer the full form: "my-limited-access-sa@my-project.iam.gserviceaccount.com"
    },
    (request, response) => {
        response.send("Hello from Firebase!");
    },
);

Tüm işlevleriniz için aynı hizmet hesabını ayarlamak istiyorsanız bunu setGlobalOptions işleviyle yapabilirsiniz.

Zaman aşımı ve bellek ayırma ayarlarını yapma

Bazı durumlarda işlevleriniz, uzun bir zaman aşımı değeri veya büyük bir bellek ayırma için özel gereksinimlere sahip olabilir. Bu değerleri Google Cloud konsolunda veya işlev kaynak kodunda (yalnızca Firebase) ayarlayabilirsiniz. Bunun için aşağıdaki maksimum süre sınırları dahilinde zaman aşımı değerleri kullanmanız gerekir:

  • HTTP ve çağrılabilir işlevler: 3.600 saniye (60 dakika)
  • Programlanmış/görev sırası işlevleri: 1.800 saniye (30 dakika)
  • Diğer etkinliğe dayalı işlevler: 540 saniye (9 dakika)

İşlevlerin kaynak kodunda bellek ayırma ve zaman aşımı değerlerini ayarlamak için bellek ve zaman aşımı saniyeleriyle ilgili genel seçenekleri kullanarak işlevlerinizi çalıştıran sanal makineyi özelleştirin. Ö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.

Google Cloud konsolunda bellek ayırma ve zaman aşımı ayarlarını yapmak için:

  1. Google Cloud konsolunda, sol menüden Cloud Functions for Firebase'i 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 Save'i (Kaydet) 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) içindeki her işlev varsayılan olarak bir CPU kullanır ve 4 ile 8 GB için 2 CPU'ya kadar çıkar. Bu, 1. nesil varsayılan davranışından önemli ölçüde farklıdır. Bu fark, aşağıdaki tabloda gösterildiği gibi düşük bellekli işlevler için biraz daha yüksek maliyetlere yol açabilir:

Tahsis edilen RAM Sürüm 1 varsayılan CPU (kesirli) 2. sürüm varsayılan 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 12/7 1 1.6x
2 GB 1 1 1x
4 GB 2 2 1x
8 GB 2 2 1x
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 şu şekilde 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