Google is committed to advancing racial equity for Black communities. See how.
Bu sayfa, Cloud Translation API ile çevrilmiştir.
Switch to English

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

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

İşlevleri dağıtın

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

$ firebase deploy --only functions

Varsayılan olarak, Firebase CLI, 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 düşmekten 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 mesajları alabilirsiniz. Bunu çözmek için, işlevleri 10 veya daha az grup 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 belirtebilirsiniz:

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

İşlevleri sil

Önceden konuşlandırılmış işlevleri şu yollarla silebilirsiniz:

  • açıkça Firebase CLI'de şu functions:delete
  • Firebase konsolundaki işlevler listesindeki bağlam menüsünü açıkça kullanarak
  • yerleştirmeden ö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, birden çok argümanı ve 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.

# 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 , firebase deploy index.js firebase deploy 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

Bölgeleri yeniden adlandırıyor veya değiştiriyorsanız veya üretim trafiğini işleyen işlevler için tetikliyorsanız, değişiklik sırasında olayları kaybetmemek için bu bölümdeki adımları izleyin. Bu adımları izlemeden önce , işlevinizin hem yeni sürümü hem de eski sürümü değişiklik sırasında 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, index.js işlevin yeni bir yeniden adlandırılmış 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 konuşlandırılmış sürümü kaldırır. Örneğin, adlı bir işlev varsa webhook de değiştirmek istediğinizi webhookNew aşağıdaki gibi kod revize:

// 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ştirin

Ü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 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ılmış işlevi dağıtın, bu da 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 varsayılan işlevler bölgesinde bulunan webhook adlı bir işleviniz varsa ve bunu asia-northeast1 taşımak istiyorsanız, işlevi yeniden adlandırmak ve bölgeyi revize etmek 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 şunu çalıştırarak dağıtın:

$ firebase deploy --only functions:webhookAsia

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

Ardından webhook silin:

$ firebase functions:delete webhook

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

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

  • Eski depolama onChange olayını onFinalize , onDelete , onArchive ve onMetadataUpdate . ( Beta sürümden v1 veya v2'ye yükseltme kılavuzunda bununla ilgili daha fazla bilgi edinin).
  • Bir tür Firebase Realtime Database veya Cloud Firestore etkinliğinden diğerine, örneğin genel onWrite olayından ayrıntılı onCreate olayına geçiş yapın.

Bir işlevin olay türünü yalnızca kaynak kodunu değiştirerek ve firebase deploy çalıştırarak 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 tetik tipiyle yeni bir işlevi içerecek şekilde 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 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 ayarlayın

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 sonraki sürümler için Firebase SDK, Node.js çalışma zamanı seçimine izin verir. Bir projedeki tüm işlevleri, yalnızca aşağıdaki desteklenen Node.js sürümlerinden birine karşılık gelen çalışma zamanı ortamında çalıştırmayı seçebilirsiniz:

  • Node.js 12 (Beta)
  • Node.js 10

  • Node.js 8 (8 Haziran 2020 itibarıyla kullanımdan kaldırılmıştır) Node.js 8 işlevlerinin dağıtımına 15 Şubat 2020'den sonra artık izin verilmeyecektir. Ardından, önceden dağıtılmış Node.js 8 işlevlerinin yürütülmesi 15 Mart 2021'den sonra durdurulacaktır. . Node.js 8 çalışma zamanına işlevler dağıttıysanız , Node.js 10 çalışma zamanına yükseltmeniz önerilir.

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

Başlatma sırasında functions/ dizininizde oluşturulan package.json dosyasındaki engines alanındaki sürümü ayarlayın. Örneğin, yalnızca sürüm 10'u kullanmak için bu satırı package.json içinde düzenleyin:

  "engines": {"node": "10"}

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ı 10 ayarlıyor.

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

Node.js çalışma zamanınızı yükseltmek için:

  1. Blaze kullandıkça öde faturalandırma planını kullandığınızdan emin olun.
  2. Firebase CLI sürüm 8.1.0 veya üzerini 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 8'den sürüm 10'a yükseltme yapıyorsanız, giriş şu şekilde görünmelidir: "engines": {"node": "10"}
  4. İsteğe bağlı olarak, değişikliklerinizi Firebase emülatörünü kullanarak test edin.
  5. Firebase CLI v8.1.0 veya sonraki sürümleri kullanarak işlevleri yeniden dağıtın.

Zaman aşımı ve bellek ayırmayı ayarlayın

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.

İşlev kaynak kodunda bellek ayırmayı 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 uyan 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

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

  1. Google Cloud Platform Console'da, soldaki menüden Cloud Functions'ı seçin.
  2. İşlevler listesinde adına tıklayarak bir işlev seçin.
  3. Üst menüdeki Düzenle simgesini tıklayın.
  4. Ayrılmış Bellek etiketli açılır menüden bir bellek ayırma 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 bir saniye sayısı girin.
  6. İşlevi güncellemek için Kaydet'e tıklayın.