Check out what’s new from Firebase@ Google I/O 2021, and join our alpha program for early access to the new Remote Config personalization feature. Learn more

İşlev dağıtımını ve çalışma zamanı seçeneklerini yönetin

Firebase CLI komutlarını kullanarak veya işlevlerin kaynak kodunda çalışma zamanı seçeneklerini ayarlayarak işlevleri dağıtabilir, silebilir ve değiştirebilirsiniz.

İşlevleri dağıt

İşlevleri dağıtmak için şu Firebase CLI komutunu çalıştırın:

$ firebase deploy --only functions

Firebase CLI, varsayılan olarak index.js içindeki 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 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ı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 mesajı alabilirsiniz. Bunu çözmek için işlevleri 10 veya daha az kişilik gruplar halinde dağıtın.

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

Varsayılan olarak, Firebase CLI, kaynak kodu için functions/ klasöre bakar. firebase.json aşağıdaki satırları ekleyerek başka bir klasör belirleyebilirsiniz:

"functions": {
  "source": "another-folder"
}

Fonksiyonları sil

Önceden dağıtılan işlevleri şu yollarla silebilirsiniz:

  • açıkça Firebase CLI'de functions:delete
  • Firebase konsolundaki işlevler listesindeki bağlam menüsünü açıkça kullanarak
  • dağıtımdan önce işlevi index.js kaldırarak dolaylı 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 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ük işlev silme ile, firebase deploy index.js ayrıştırır ve dosyadan kaldırılan tüm işlevleri üretimden kaldırır.

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

Üretim trafiğini işleyen işlevler için bölgeleri veya tetikleyicileri yeniden adlandırıyor veya değiştiriyorsanız, değişiklik sırasında olayları kaybetmemek için bu bölümdeki adımları izleyin. Bu adımları izlemeden önce, değişiklik sırasında işlevinizin hem yeni sürümü hem de eski sürümü aynı anda çalışacağından, önce işlevinizin idempotent olduğundan emin olun.

Bir işlevi yeniden adlandırın

Bir işlevi yeniden adlandırmak için, işlevin index.js 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 ve ikinci komut, daha önce dağıtılan sürümü kaldırır. Örneğin, webhook olarak değiştirmek istediğiniz webhook adlı bir işleviniz varsa, kodu aşağıdaki gibi gözden webhookNew :

// before
const functions = require('firebase-functions');

exports.webhook = functions.https.onRequest((req, res) => {
    res.send("Hello");
});

// after
const functions = require('firebase-functions');

exports.webhookNew = functions.https.onRequest((req, res) => {
    res.send("Hello");
});

Ardından yeni işlevi dağıtmak için aşağıdaki komutları çalıştırın:

# Deploy new function called webhookNew
$ firebase deploy --only functions:webhookNew

# Wait until deployment is done; now both webhookNew and webhook are running

# Delete webhook
$ firebase functions:delete webhook

Bir işlevin bölgesini veya bölgelerini değiştirme

Üretim trafiğini işleyen 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. Her iki bölge kümesinde de aynı kodun geçici olarak çalıştırılmasına neden olan yeniden adlandırılan işlevi dağıtın.
  3. Önceki işlevi silin.

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

// before
const functions = require('firebase-functions');

exports.webhook = functions
    .https.onRequest((req, res) => {
            res.send("Hello");
    });

// after
const functions = require('firebase-functions');

exports.webhookAsia = functions
    .region('asia-northeast1')
    .https.onRequest((req, res) => {
            res.send("Hello");
    });

Ardından aşağıdakileri çalıştırarak dağıtın:

$ firebase deploy --only functions:webhookAsia

Şimdi çalışan iki özdeş işlev var: webhook us-central1 içinde çalışıyor ve webhookAsia asia-northeast1 webhookAsia içinde çalışıyor.

Ardından, webhook silin:

$ firebase functions:delete webhook

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

Bir işlevin tetik 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 tetikleme türünü değiştirmeniz gerekebilir. Örneğin, şunları yapmak isteyebilirsiniz:

  • Eski depolama onChange olayından onFinalize , onDelete , onArchive ve onMetadataUpdate . ( Beta'dan v1'e veya v2'ye yükseltme kılavuzunda bununla ilgili daha fazla bilgi edinin).
  • Bir tür Firebase Realtime Database veya Cloud Firestore olayı türünden, genel onWrite olayı gibi ayrıntılı onCreate olayına onWrite gibi diğerine onWrite .

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. Hatalardan kaçınmak için, bu prosedürle bir işlevin tetikleme türünü değiştirin:

  1. Kaynak kodunu, istenen tetikleyici türüyle yeni bir işlev içerecek şekilde değiştirin.
  2. Hem eski hem de yeni işlevlerin geçici olarak çalıştırılmasıyla sonuçlanan işlevi dağıtın.
  3. Firebase CLI'yi kullanarak eski işlevi üretimden açıkça silin.

Örneğin, eski onChange olay türüne sahip bir objectChanged işleviniz objectChanged ve bunu onFinalize olarak değiştirmek istiyorsanız, önce işlevi yeniden adlandırın ve onFinalize olay türüne sahip olacak şekilde onFinalize .

// before
const functions = require('firebase-functions');

exports.objectChanged = functions.storage.object().onChange((object) => {
    return console.log('File name is: ', object.name);
});

// after
const functions = require('firebase-functions');

exports.objectFinalized = functions.storage.object().onFinalize((object) => {
    return console.log('File name is: ', object.name);
});

Ardından, eski işlevi silmeden önce yeni işlevi oluşturmak için aşağıdaki komutları çalıştırın:

# Create new function objectFinalized
$ firebase deploy --only functions:objectFinalized

# Wait until deployment is done; now both objectChanged and objectFinalized are running

# Delete objectChanged
$ firebase functions:delete objectChanged

Çalışma zamanı seçeneklerini ayarla

Firebase için Cloud Functions, Node.js çalışma zamanı sürümü ve işlev başına zaman aşımı ve bellek ayırma gibi çalışma zamanı seçeneklerini belirlemenize olanak tanır.

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

Cloud Functions 2.0.0 ve üstü için Firebase SDK, Node.js çalışma zamanı seçimine izin verir. 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 14
  • Node.js 12
  • Node.js 10
  • Node.js 8 (8 Haziran 2020'de kullanımdan kaldırıldı) 15 Aralık 2020'de Firebase CLI'de Node.js 8 çalışma zamanına işlevlerin dağıtımı devre dışı bırakıldı. Zaten dağıtılmış işlevlerin yürütülmesi gelecekte bir noktada duracaktır; Node.js 8 çalışma zamanına işlevler dağıttıysanız , Node.js 14 çalışma zamanına yükseltme yapmanızı öneririz.

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ü ayarlayın. Örneğin, yalnızca sürüm 14'ü kullanmak için bu satırı package.json dosyasında düzenleyin:

  "engines": {"node": "14"}

engines alanı gereklidir; işlevleri dağıtmanız ve çalıştırmanız için desteklenen Node.js sürümlerinden birini belirtmesi gerekir . Şu anda firebase init functions bu alanı 14 ayarlar.

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 v8.6.0 veya sonraki bir sürümü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 10'dan sürüm 14'e yükseltiyorsanız, giriş şöyle görünmelidir: "engines": {"node": "14"}
  4. İsteğe bağlı olarak, değişikliklerinizi Firebase Local Emulator Suite kullanarak test edin.
  5. Firebase CLI v8.1.0 veya sonraki sürümünü kullanarak işlevleri yeniden dağıtın.

Zaman aşımı ve bellek ayırmayı ayarla

Bazı durumlarda, işlevlerinizin uzun bir zaman aşımı değeri veya büyük bir bellek tahsisi için özel gereksinimleri olabilir. Bu değerleri Google Cloud Console'da veya işlev kaynak kodunda (yalnızca Firebase) ayarlayabilirsiniz.

İşlevlerin kaynak kodunda bellek ayırma ve zaman aşımını ayarlamak için Cloud Functions 2.0.0 için runWith sunulan runWith parametresini kullanın. Bu çalışma zamanı seçeneği, timeoutSeconds ve memory için değerleri tanımlayan RuntimeOptions arabirimine uygun bir JSON nesnesini kabul eder. Örneğin, bu depolama işlevi 1 GB bellek kullanır ve 300 saniye sonra zaman aşımına uğrar:

const runtimeOpts = {
  timeoutSeconds: 300,
  memory: '1GB'
}

exports.myStorageFunction = functions
  .runWith(runtimeOpts)
  .storage
  .object()
  .onFinalize((object) = > {
    // do some complicated things that take a lot of memory and time
  });

timeoutSeconds için maksimum değer 540 veya 9 dakikadır. memory için geçerli değerler şunlardır:

  • 128MB
  • 256MB
  • 512MB
  • 1GB
  • 2GB
  • 4GB
  • 8GB

Google Cloud Console'da bellek ayırma ve zaman aşımını ayarlamak için:

  1. Google Google Bulut Konsolunda, soldaki menüden Bulut İşlevleri'ni seçin.
  2. Fonksiyonlar listesinde ismine tıklayarak bir fonksiyon seçin.
  3. Üst menüdeki Düzenle simgesini tıklayın.
  4. Tahsis açılan menü etiketli Bellekten bir bellek ayırmayı seçin.
  5. Gelişmiş seçenekleri görüntülemek için Daha Fazla'yı tıklayın ve Zaman Aşımı metin kutusuna birkaç saniye girin.
  6. İşlevi güncellemek için Kaydet'e tıklayın.