İşlevleri yönet


Firebase CLI komutlarını kullanarak veya işlevlerin kaynak kodundaki ç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. Projeniz 5'ten fazla işlev içeriyorsa, 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ına girmekten kaçınmanıza yardımcı olur. Örneğin:

firebase deploy --only functions:addMessage,functions:makeUppercase

Çok sayıda işlevi dağıtırken standart kotayı aşabilir ve HTTP 429 veya 500 hata iletileri alabilirsiniz. Bunu çözmek için işlevleri 10 veya daha az kişiden oluşan gruplar halinde dağıtın.

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

Firebase CLI, varsayılan olarak kaynak kodu için functions/ klasörüne bakar. İsterseniz işlevleri kod tabanlarında veya birden fazla dosya kümesinde düzenleyebilirsiniz .

İşlevleri sil

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

  • Firebase CLI'de açıkça functions:delete
  • açıkça Google Cloud konsolunda .
  • dağıtımdan önce işlevi kaynaktan kaldırarak örtülü olarak .

Tüm silme işlemleri, işlevi üretimden kaldırmadan önce onaylamanızı ister.

Firebase CLI'deki açık işlev silme, işlev gruplarının yanı sıra birden çok bağımsız değişkeni de 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

firebase deploy dağıtımı, örtülü işlev silmeyle kaynağınızı ayrıştırır ve dosyadan kaldırılan tüm işlevleri üretimden kaldırır.

Bir fonksiyonun adını, bölgesini veya tetikleyicisini değiştirin

Üretim trafiğini yöneten işlevlerin bölgelerini veya tetikleyicilerini yeniden adlandırıyor veya değiştiriyorsanız, değişiklik sırasında etkinliklerin kaybolmasını önlemek için bu bölümdeki adımları izleyin. Bu adımları uygulamadan önce öncelikle fonksiyonunuzun idempotent olduğundan emin olun çünkü değişiklik sırasında fonksiyonunuzun hem yeni sürümü hem de eski sürümü aynı anda çalışacaktır.

Bir işlevi yeniden adlandırın

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 komutunu çalıştırın. İlk komut yeni adlandırılan işlevi dağıtır ve ikinci komut önceden dağıtılan sürümü kaldırır. Örneğin, yeniden adlandırmak istediğiniz HTTP ile tetiklenen bir web kancanız varsa kodu aşağıdaki gibi değiştirin:

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 yöneten bir işlev için belirtilen bölgeleri değiştiriyorsanız aşağıdaki adımları sırayla gerçekleştirerek olay 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, aynı kodun her iki bölge kümesinde de geçici olarak çalıştırılmasına neden olur.
  3. Önceki işlevi silin.

Örneğin, şu anda us-central1 varsayılan işlevler bölgesinde bulunan Cloud Firestore tarafından tetiklenen bir işleviniz varsa ve bunu asia-northeast1 taşımak istiyorsanız, işlevi yeniden adlandırmak ve gözden geçirmek için önce kaynak kodunuzu değiştirmeniz gerekir. bölge.

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 olay filtresini (bu durumda document ) belirtmelidir. Daha fazla bilgi için Bulut İşlevleri konumlarına 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

Daha sonra aşağıdakileri çalıştırarak dağıtın:

firebase deploy --only functions:firestoreTriggerAsia

Artık çalışan iki özdeş işlev var: firestoreTrigger us-central1 çalışıyor ve firestoreTriggerAsia asia-northeast1 çalışıyor.

Ardından firestoreTrigger silin:

firebase functions:delete firestoreTrigger

Artık asia-northeast1 çalışan tek bir işlev var - firestoreTriggerAsia .

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 çeşitli nedenlerden dolayı bir işlevin tetikleme türünü değiştirmeniz gerekebilir. Örneğin, bir Firebase Realtime Database veya Cloud Firestore olayı türünden başka bir türe geçmek isteyebilirsiniz.

Yalnızca kaynak kodunu değiştirerek ve firebase deploy çalıştırarak bir işlevin olay türünü değiştirmek mümkün değildir. Hataları önlemek için bir işlevin tetikleme türünü şu prosedürle değiştirin:

  1. İstenilen tetikleyici türüne sahip yeni bir işlev eklemek için kaynak kodunu değiştirin.
  2. Hem eski hem de yeni işlevlerin geçici olarak çalıştırılmasına neden olan işlevi dağıtın.
  3. Firebase CLI'yi 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 olayına 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):
  # ...

Daha sonra 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

Firebase için Cloud Functions, 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 seçmenize olanak tanır.

En iyi uygulama olarak, bu seçeneklerin (Node.js sürümü hariç) işlev kodunun içindeki bir yapılandırma nesnesinde ayarlanması gerekir. Bu RuntimeOptions nesnesi, işlevinizin çalışma zamanı seçeneklerine ilişkin gerçeğin kaynağıdır ve başka herhangi bir yöntemle (örneğin, Google Cloud konsolu veya gcloud CLI aracılığıyla) ayarlanan seçenekleri geçersiz kılar.

Geliştirme iş akışınız, çalışma zamanı seçeneklerini Google Cloud konsolu veya gcloud CLI aracılığıyla manuel olarak ayarlamayı içeriyorsa 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 önceliğe göre birleştirir:

  1. Seçenek, işlev kodunda ayarlanır: harici değişiklikleri geçersiz kıl.
  2. İşlev kodunda seçenek RESET_VALUE olarak ayarlandı: harici değişiklikleri varsayılan değerle geçersiz kılın.
  3. Seçenek, işlev kodunda ayarlanmadı ancak şu anda dağıtılan işlevde ayarlandı: dağıtılan işlevde belirtilen seçeneği kullanın.

preserveExternalChanges: true seçeneğinin kullanılması çoğu senaryo için önerilmez çünkü kodunuz artık işlevlerinizin çalışma zamanı seçenekleri için tam doğruluk kaynağı olmayacaktır. Kullanıyorsanız bir işlevin tam yapılandırmasını görüntülemek için Google Cloud konsolunu kontrol edin veya gcloud CLI'yi kullanın.

Node.js sürümünü ayarlayın

Cloud Functions için Firebase SDK'sı, Node.js çalışma zamanının seçilmesine 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 20 (önizleme)
  • Node.js 18
  • Node.js 16
  • Node.js 14

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 sürüm 18'i kullanmak için package.json dosyasındaki bu satırı düzenleyin:

  "engines": {"node": "18"}

Yarn paket yöneticisini kullanıyorsanız veya engines alanı için başka özel gereksinimleriniz varsa, bunun yerine firebase.json dosyasında Cloud Functions için Firebase SDK'sının çalışma zamanını ayarlayabilirsiniz:

  {
    "functions": {
      "runtime": "nodejs18" // or nodejs14, nodejs16 or nodejs20
    }
  }

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

Node.js çalışma zamanınızı yükseltin

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 üstünü 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, sürüm 16'dan sürüm 18'e yükseltme yapıyorsanız giriş şu şekilde görünmelidir: "engines": {"node": "18"}
  4. İsteğe bağlı olarak değişikliklerinizi Firebase Local Emulator Suite'i kullanarak test edin.
  5. Tüm işlevleri yeniden konuşlandırın.

Python sürümünü ayarla

Cloud Functions sürüm 12.0.0 ve üzeri için Firebase SDK, Python çalışma zamanının seçilmesine olanak tanır. firebase.json dosyasındaki çalışma zamanı sürümünü gösterildiği gibi ayarlayın:

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

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

Varsayılan olarak Cloud Functions for Firebase, gelen isteklerin sayısına göre çalışan örneklerin sayısını ölçeklendirir; trafiğin azaldığı zamanlarda potansiyel olarak sıfır örneklere kadar ölçeklenebilir. Ancak uygulamanız daha az gecikme gerektiriyorsa ve soğuk başlatma sayısını sınırlamak istiyorsanız sıcak tutulacak ve isteklere hizmet etmeye hazır tutulacak konteyner örneklerinin minimum 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 bir maksimum sayı ayarlayabilirsiniz. Bu ayarı maliyetlerinizi kontrol etmenin veya veritabanı gibi bir destek hizmetine olan bağlantı sayısını sınırlamanın bir yolu olarak 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 niteliği, hangi ayarların en uygun maliyetli olduğunu ve en iyi performansla sonuçlanacağını belirleyecektir.

Trafiği az olan bazı uygulamalar için çoklu eş zamanlılığın olmadığı daha düşük bir CPU seçeneği en uygunudur. Soğuk başlatmanın kritik bir sorun olduğu diğerleri için, yüksek eşzamanlılık ve minimum bulut sunucularının ayarlanması, trafikteki büyük ani artışlarla başa çıkabilmek için bir bulut sunucuları kümesinin 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 maksimum örneklerin düşük ayarlanması, uygulamanın aşırı maliyetlere yol açmadan trafik patlamalarını işleyebileceği anlamına gelir. Ancak maksimum bulut sunucuları çok düşük bir değere ayarlandığında tavana ulaşıldığında isteklerin düşürülebileceğini unutmayın.

Eşzamanlı isteklere izin ver

Cloud Functions for Firebase'de (1. nesil), her örnek aynı anda bir isteği işleyebildiğinden ölçeklendirme davranışı yalnızca minimum ve maksimum örnek ayarlarıyla belirlendi. Bulut İşlevleri for Firebase'de (2. nesil) bulut sunucusu sayısını kontrol etmenin yanı sıra, concurrency seçeneğiyle her bir bulut sunucusunun aynı anda sunabileceği istek sayısını da kontrol edebilirsiniz. Eşzamanlılık için varsayılan değer 80'dir ancak bunu 1 ile 1000 arasında herhangi bir tam sayıya ayarlayabilirsiniz.

Daha yüksek eşzamanlılık ayarlarına sahip işlevler, her bulut sunucusunun muhtemelen bir miktar boşluk payına sahip olması nedeniyle, soğuk başlatma olmadan trafikteki ani artışları absorbe edebilir. Bir örnek 50'ye kadar 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şlatmaya gerek duymadan 25 ek istekten oluşan ani artışı işleyebilir. Buna karşılık, eşzamanlılık ayarının yalnızca 1 olması durumunda 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östermektedir. Gerçekte, verimliliği optimize etmek ve eşzamanlılıkla soğuk başlatmaları azaltmak için ölçeklendirme davranışı daha karmaşıktır. Firebase 2. nesil için Cloud Functions'taki eşzamanlılık, Cloud Run tarafından desteklenir ve Cloud Run'ın konteyner örneği otomatik ölçeklendirme kurallarına uyar.

Cloud Functions for Firebase'de (2. nesil) daha yüksek eşzamanlılık ayarlarıyla denemeler yaparken aşağıdakileri aklınızda 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 görüntü veya video işleme yapan bir işlev, CPU ve RAM ayarları en üst düzeye çıkarıldığında bile 1000 eşzamanlı isteği işleyecek kaynaklara sahip olmayabilir.
  • Firebase için Cloud Functions (2. nesil), Cloud Run tarafından desteklendiğinden eşzamanlılığı optimize etmek için Google Cloud kılavuzuna da başvurabilirsiniz.
  • Üretimde çoklu eşzamanlılığa geçmeden önce çoklu eşzamanlılığı bir test ortamında iyice test ettiğinizden emin olun.

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

Kaynak kodunda bir işlev için minimum örnek sayısını ayarlayabilirsiniz. Örneğin, bu işlev sıcak tutmak için minimum 5 örneği 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 değerini ayarlarken dikkate almanız 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 soğuk başlangıçla karşılaşırsınız.
  • Soğuk başlatmalar, ani trafiğe sahip uygulamalar üzerinde en ciddi etkiye sahiptir. Uygulamanızda ani trafik artışı varsa ve her trafik artışında soğuk başlatmaların azaltılmasını sağlayacak kadar yüksek bir değer ayarlarsanız gecikmenin önemli ölçüde azaldığını görürsünüz. Sürekli trafiğe sahip uygulamalar için soğuk başlatmanın performansı ciddi şekilde etkilemesi muhtemel değildir.
  • Minimum örneklerin ayarlanması üretim ortamları için anlamlı olabilir ancak test ortamlarında genellikle bundan kaçınılmalıdır. Test projenizi sıfıra ölçeklendirmek ancak yine de üretim projenizdeki soğuk başlatmaları azaltmak için parametreli yapılandırmanızda minimum örnek değeri ayarlayabilirsiniz:

    Node.js

    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.`);
      }
    );
    

    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 örnekler için bir değer ayarlayabilirsiniz. Örneğin, bu işlev, varsayımsal eski bir veritabanını bunaltmamak için 100 örneklik bir 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 kuyruğa alınır ve o zamana kadar herhangi bir örnek mevcut değilse 429 Too Many Requests yanıt koduyla reddedilir.

Maksimum örnek ayarlarını kullanmaya yönelik en iyi uygulamalar hakkında daha fazla bilgi edinmek için maksimum örnekleri ayarlamaya yönelik bu en iyi uygulamalara göz atın.

Zaman aşımı ve bellek tahsisini ayarlayın

Bazı durumlarda, işlevlerinizin uzun zaman aşımı değeri veya büyük miktarda bellek tahsisi gibi özel gereksinimleri olabilir. Bu değerleri Google Cloud konsolunda veya işlevin kaynak kodunda (yalnızca Firebase) ayarlayabilirsiniz.

İşlevlerin kaynak kodunda bellek ayırmayı ve zaman aşımını ayarlamak için işlevlerinizi çalıştıran sanal makineyi özelleştirmek amacıyla bellek ve zaman aşımı saniyelerine ilişkin genel seçenekleri kullanın. Örneğin, bu Bulut Depolama işlevi 1GiB 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ı saniyelerinin maksimum değeri 540 veya 9 dakikadır.

Google Cloud konsolunda bellek ayırmayı ve zaman aşımını ayarlamak için:

  1. Google Cloud konsolunda soldaki menüden Firebase için Cloud Functions'ı seçin.
  2. İşlevler listesinde ismine 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çin.
  5. Gelişmiş seçenekleri görüntülemek için Diğer'i tıklayın ve Zaman Aşımı metin kutusuna saniye sayısını girin.
  6. İşlevi güncellemek için Kaydet'e tıklayın.

CPU varsayılanlarını geçersiz kıl

2 GB'a kadar bellek tahsis edilir; Cloud Functions for Firebase'deki (2. nesil) her işlev varsayılan olarak bir CPU'ya ayarlanır ve daha sonra 4 ve 8 GB için 2 CPU'ya çıkarılır. Bunun, aşağıdaki tabloda ifade edildiği gibi, düşük bellekli işlevler için biraz daha yüksek maliyetlere yol açabilecek şekillerde 1. nesil varsayılan davranıştan önemli ölçüde farklı olduğunu unutmayın:

RAM tahsis edildi Sürüm 1 varsayılan CPU (kesirli) Sürüm 2 varsayılan CPU MS başına fiyat artışı
128 MB 1/12 1 10,5x
256MB 1/6 1 5,3x
512MB 1/3 1 2,7x
1 GB 7/12 1 1,6x
2GB 1 1 1x
4 cigabayt 2 2 1x
8GB 2 2 1x
16 GB yok 4 yok

2. nesil işlevleriniz için 1. nesil davranışı 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")

CPU'yu yoğun olarak kullanan işlevler için 2. nesil, ek CPU'yu yapılandırma esnekliği sağlar. CPU'yu gösterildiği gibi işlev bazında 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