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 bağımsız değişkeni 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ırasıyla uygulayarak olay kaybını önleyebilirsiniz:
- İşlevi yeniden adlandırın ve bölgesini veya bölgelerini istediğiniz gibi değiştirin.
- Yeniden adlandırılmış işlevi dağıtın, bu da aynı kodun her iki bölge kümesinde de geçici olarak çalıştırılmasına neden olur.
- Ö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
veonMetadataUpdate
. ( 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 olayından 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:
- İstenilen tetik tipiyle yeni bir işlevi içerecek şekilde kaynak kodunu değiştirin.
- Hem eski hem de yeni işlevlerin geçici olarak çalıştırılmasına neden olan işlevi dağıtın.
- 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 özel olarak ş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 (Beta)
- Node.js 12
- Node.js 10
- Node.js 8 (8 Haziran 2020'de kullanımdan kaldırıldı) İşlevlerin Node.js 8 çalışma zamanına dağıtımı, 15 Aralık 2020'de Firebase CLI'de devre dışı bırakıldı. Önceden dağıtılmış işlevlerin yürütülmesi gelecekte bir noktada duracaktır; Node.js 8 çalışma zamanına işlevleri dağıttıysanız , Node.js 12 çalışma zamanına yükseltmenizi ö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ındaki sürümü ayarlayın. Örneğin, yalnızca sürüm 12'yi kullanmak için bu satırı package.json
içinde düzenleyin:
"engines": {"node": "12"}
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ı 12
ayarlıyor.
Node.js çalışma zamanınızı yükseltin
Node.js çalışma zamanınızı yükseltmek için:
- Blaze kullandıkça öde faturalandırma planını kullandığınızdan emin olun.
- Firebase CLI 8.6.0 veya sonraki sürümünü kullandığınızdan emin olun.
- Başlatma sırasında
functions/
dizininizde oluşturulanpackage.json
dosyasındakiengines
değerini değiştirin. Örneğin, sürüm 10'dan sürüm 12'ye yükseltme yapıyorsanız, giriş şu şekilde görünmelidir:"engines": {"node": "12"}
- İsteğe bağlı olarak, değişikliklerinizi Firebase emülatörünü kullanarak test edin.
- 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.
Bellek ayırma ve zaman aşımını işlev kaynak kodunda 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
-
4GB
Google Cloud Console'da bellek ayırma ve zaman aşımını ayarlamak için:
- Google Google Cloud Console'da soldaki menüden Cloud Functions'ı seçin.
- İşlevler listesinde adına tıklayarak bir işlev seçin.
- Üst menüdeki Düzenle simgesini tıklayın.
- Ayrılmış bellek etiketli açılır menüden bir bellek ayırma seçin.
- 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.
- İşlevi güncellemek için Kaydet'e tıklayın.