Firebase CLI komutlarını kullanarak işlevleri dağıtabilir, silebilir ve değiştirebilirsiniz veya işlevlerinizin kaynak kodunda çalışma zamanı seçeneklerini ayarlayın.
İşlevleri dağıtma
İşlevleri dağıtmak için şu Firebase CLI komutunu çalıştırın:
firebase deploy --only functions
Firebase CLI, varsayılan olarak içindeki tüm işlevleri dağıtır
kaynağınızı aynı anda dinleyebilirsiniz. Projenizde 5’ten fazla fonksiyon varsa
--only
işaretini belirli işlev adlarıyla kullanmanızı öneririz.
fonksiyonları dağıtıp
tıklayın. Belirli işlevleri dağıtma
Bu şekilde dağıtım sürecini hızlandırır ve projenizle ilgili
dağıtım kotaları. Örneğin:
firebase deploy --only functions:addMessage,functions:makeUppercase
Çok sayıda işlev dağıtırken standart kotayı kontrol etmeli ve HTTP 429 ya da 500 hata mesajları almalıdır. Çözüm Bunun için işlevleri 10 veya daha az kişilik gruplar halinde dağıtmanız gerekir.
Kullanılabilen tüm özellikler listesi için Firebase CLI referansına bakın komutlarının ikisine katlanır.
Firebase CLI, varsayılan olarak functions/
klasöründe
kaynak kodudur. İsterseniz fonksiyonları düzenleyebilirsiniz
veya birden fazla dosya setinde
kullanabilirsiniz.
İşlevleri silin
Önceden dağıtılmış işlevleri şu yöntemlerle silebilirsiniz:
functions:delete
ile Firebase CLI'da açık bir şekilde- Google Cloud Console'dan açıkça.
- dolaylı olarak devre dışı bırakabilirsiniz.
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şkeni destekler yanı sıra gruplar ve belirli bir bölgede çalışan bir işlev belirtmenizi sağlar. 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ülü işlev silme ile 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ştirin
Bölgeleri yeniden adlandırıyor veya değiştiriyorsanız ya da istiyorsanız, verilerinizi kaybetmemek için bu bölümdeki adımları etkinlikleri görebilirsiniz. Bu adımları uygulamadan önce işlevi idempotent'tir, çünkü işlevinizin hem yeni sürümü hem de eski sürümü zaman alabilir.
İşlevi 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. sonra iki ayrı dağıtım komutunu çalıştırın. İlk komut, işlevi, ikinci komut ise önceden dağıtılmış olan sürümünü değil. Örneğin, HTTP tetiklenmiş bir webhook'unuz varsa bu URL'lerde kodu aşağıdaki gibi revize edin:
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
Belirli bir bölge için belirtilen bölgeleri başka bir fonksiyona sahipseniz, etkinlik kaybını önlemek için şu adımları izleyin:
- İşlevi yeniden adlandırın ve bölgesini veya bölgelerini istediğiniz gibi değiştirin.
- Yeniden adlandırılan işlevi dağıtın. Bu durumda, aynı kod her iki bölge grubunda da geçici olarak çalıştırılır.
- Önceki işlevi silin.
Örneğin, Cloud Firestore tarafından tetiklenen bir
şu anda
us-central1
işlevinin varsayılan işlevler bölgesini kullanıyorsanız ve bunu şuraya taşımak istiyorsunuz:
asia-northeast1
, öncelikle
işlev görmek ve revize etmek.
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, doğru etkinlik filtresini belirtmelidir (bu örnekte
document
) bölgeyle birlikte gösterilir. Görüntüleyin
Cloud Functions konumları hakkında daha fazla bilgi edinin.
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 şu komutu çalıştırarak dağıtın:
firebase deploy --only functions:firestoreTriggerAsia
Şimdi birbirinin aynı olan iki işlev çalışıyor: firestoreTrigger
,
us-central1
ve firestoreTriggerAsia
, asia-northeast1
bölgesinde çalışıyor.
Ardından, firestoreTrigger
öğesini silin:
firebase functions:delete firestoreTrigger
Şimdi yalnızca bir işlev vardır: Bu işlevfirestoreTriggerAsia
asia-northeast1
.
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 fonksiyonun tetikleyici türünü çeşitli nedenlerle değiştirmem gerekiyor. Örneğin, Firebase Realtime Database türlerinden birini ya da Cloud Firestore etkinliğini başka bir türe aktarabilirsiniz.
Bir işlevin etkinlik türü, yalnızca
firebase deploy
çalıştırmanız gerekir. Hataları önlemek için
bir işlevin tetikleyici türünü şu prosedürle değiştirin:
- Kaynak kodu, istenen tetikleyici türüne sahip yeni bir işlev içerecek şekilde değiştirin.
- İşlevi dağıtın. Bu durumda, hem eski hem de yeni işlev geçici olarak çalıştırılır.
- Firebase CLI'ı kullanarak eski işlevi üretimden açıkça silin.
Örneğin, bir nesne çalıştırıldığında tetiklenen bir ancak sonrasında nesne sürümü oluşturma ve bunun yerine arşiv etkinliğine abone olmak istiyorsanız işlevini yeni tetikleyici türüne göre 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
Firebase için Cloud Functions, Node.js gibi çalışma zamanı seçeneklerini belirlemenize olanak tanır. çalışma zamanı sürümü ve işlev başına zaman aşımı, bellek ayırma ve minimum/maksimum işlev örneklerinden ibarettir.
En iyi uygulama olarak, bu seçeneklerin (Node.js sürümü hariç)
yapılandırma nesnesini ifade eder. Bu
RuntimeOptions
nesne, fonksiyonunuzun çalışma zamanı seçenekleri için doğru kaynaktır ve
Başka bir yöntemle (ör. Google Cloud Console aracılığıyla) belirlenen geçersiz kılma seçenekleri
veya gcloud CLI) aracını kullanın.
Geliştirme iş akışınızda çalışma zamanı seçeneklerini
Google Cloud konsolunu veya gcloud KSA'yı kullanıyorsanız ve bu değerlerin böyle olmasını istemiyorsanız
her dağıtımda geçersiz kılınmışsa preserveExternalChanges
seçeneğini true
olarak ayarlayın.
Bu seçenek true
olarak ayarlandığında Firebase,
işlevinizin şu anda dağıtılmış olan sürümünün ayarlarıyla
şu önceliğe sahip olmalıdır:
- Seçenek, işlev kodunda ayarlandı: Harici değişiklikleri geçersiz kıl.
- Seçenek, işlev kodunda
RESET_VALUE
olarak ayarlandı: Harici değişiklikleri varsayılan değerle geçersiz kılın. - Seçenek, işlev kodunda ayarlanmamış ancak şu anda dağıtılmış olan işlevde ayarlanmış: Dağıtılan işlevde belirtilen seçeneği kullanın.
preserveExternalChanges: true
seçeneğinin kullanılması önerilmez
çünkü çoğu senaryoda
kodu artık çalışma zamanı seçeneklerinin tam veri kaynağı
işlevlerine dahildir. Kullanıyorsanız Google Cloud Console'a göz atın veya gcloud'u kullanın
CLI'yı kullanarak işlevin tam yapılandırmasını görebilirsiniz.
Node.js sürümünü ayarlama
Cloud Functions için Firebase SDK'sı, bir Node.js çalışma zamanı seçimine olanak tanır. Bir projedeki tüm işlevleri yalnızca çalışma zamanında çalıştırmayı seçebilirsiniz ortama nasıl aktarabilirsiniz?
- Node.js 22 (önizleme)
- Düğüm.js 20
- Düğüm.js 18
Node.js Sürüm 14 ve 16 desteği sonlandırılmış olup 2025'in başlarında kullanımdan kaldırılacaktır. Dağıtım devre dışı bırakılır.
Node.js sürümünü ayarlamak için:
Sürümü, package.json
tablosundaki engines
alanından ayarlayabilirsiniz.
başlatma sırasında functions/
dizininizde oluşturulan bir dosyadır.
Örneğin,
sürüm 18, bu satırı package.json
ürününde düzenleyin:
"engines": {"node": "20"}
Yarn paket yöneticisi kullanıyorsanız veya
engines
alanında, Cloud Functions için Firebase SDK'sının çalışma zamanını şurada ayarlayabilirsiniz:
Bunun yerine firebase.json
:
{
"functions": {
"runtime": "nodejs18" // or nodejs20
}
}
KSA, herhangi bir değer yerine firebase.json
içinde ayarlanan değeri kullanır veya
package.json
içinde ayrı olarak ayarladığınız aralık.
Node.js çalışma zamanınızı yükseltin
Node.js çalışma zamanınızı yükseltmek için:
- Projenizin Blaze fiyatlandırma planı.
- Firebase CLI 11.18.0 veya sonraki bir sürümü kullandığınızdan emin olun.
- Şu konumda oluşturulan
package.json
dosyasındakiengines
değerini değiştirin: başlatma sırasındafunctions/
dizininiz. Örneğin sürüm 18'den sürüm 20'ye geçiyorsanız şöyle görünmelidir:"engines": {"node": "20"}
- İsteğe bağlı olarak, değişikliklerinizi Firebase Local Emulator Suite.
- Tüm işlevleri yeniden dağıtın.
Python sürümünü ayarlayın
Cloud Functions için Firebase SDK'sının 12.0.0 ve üst sürümleri, Python için izin verme seçimi
belirler. firebase.json
ürününde çalışma zamanı sürümünü gösterildiği gibi ayarlayın:
{
"functions": {
"runtime": "python310" // or python311
}
}
Ölçeklendirme davranışını kontrol etme
Cloud Functions for Firebase varsayılan olarak çalışan örnek sayısını ölçeklendirir gelen istek sayısına göre (potansiyel olarak sıfıra düşürülebilir) daha az trafik elde etmek anlamına gelir. Ancak, uygulamanız gereken yerlerde ve baştan başlatma sayısını sınırlamak isterseniz bunu değiştirebilirsiniz. görüntülenebilecek minimum kapsayıcı örneği sayısını belirterek ve talepleri karşılamaya hazır tutulduğundan emin olun.
Benzer şekilde, örneklerin ölçeklenmesini sınırlamak için bir maksimum sayı ayarlayabilirsiniz: yanıt verebilir. Maliyetlerinizi kontrol etmenin bir yolu olarak bu ayarı kullanın veya bir
Bu ayarları örnek başına eşzamanlılık ayarıyla birlikte kullanmak (yeni 2. nesil) kullanıyorsanız işlevleriniz için ölçeklendirme davranışını kontrol edebilir ve ayarlayabilirsiniz. İlgili içeriği oluşturmak için kullanılan uygulamanızın ve işlevinizin yapısı, en iyi performans gösteren ile en iyi performansı sağlayacak.
Düşük trafiğe sahip bazı uygulamalar için çoklu eşzamanlılığa sahip olmayan daha düşük bir CPU seçeneği en uygunudur. Soğuk başlatmanın kritik bir sorun olduğu bazı işletmeler için, eş zamanlılık ve minimum örnek sayıları, belirli bir örnek grubunun her zaman ani trafik artışlarını karşılamaya hazır olun.
Çok az trafik alan küçük ölçekli uygulamalar için düşük maksimum trafik ayarlanır. yüksek eşzamanlılığa sahip örnekler, uygulamanın bu trafik patlamalarıyla başa çıkabileceği anlamına gelir. bir yolunu bulmanız gerekir. Ancak maksimum örnekleri çok düşük olarak ayarlandığında üst sınıra ulaşıldığında istekler iptal edilebilir.
Eşzamanlı isteklere izin ver
Cloud Functions for Firebase'de (1. nesil) her örnek tek seferde bir isteği işleyebilir. Bu nedenle,
ölçeklendirme davranışı yalnızca minimum ve maksimum örnek ayarlarıyla belirlendi.
Cloud Functions for Firebase'de (2. nesil) örnek sayısını kontrol etmenin yanı sıra,
her bir örneğin aynı anda yayınlayabileceği istek sayısını
concurrency
seçeneği. Varsayılan eşzamanlılık değeri 80'dir ancak
1 ile 1000 arasında herhangi bir tam sayı olarak ayarlayabilirsiniz.
Daha yüksek eşzamanlılık ayarlarına sahip işlevler, yüksek tutarlılık olmadan trafikteki ani artışları olabilir. Çünkü her örneğin bir miktar boşluk payı olabilir. Bir örnek 50 eşzamanlı isteği işleyecek şekilde yapılandırılmıştır ancak şu anda yalnızca işlenmektedir yeni bir istek gerektirmeden 25 ek istekteki artışı işleyebilir. baştan başlatmaya çalışır. Bunun aksine, eşzamanlılık ayarı yalnızca 1 ise, istek sayısındaki ani artış 25 baştan başlatmaya yol açabilir.
Bu basitleştirilmiş senaryo, projenizin olası verimlilik kazançlarını sağlar. Gerçekte ise verimliliği optimize etmek ve baştan başlarsa eş zamanlılık daha karmaşıktır. Eşzamanlılık: 2. nesil Firebase için Cloud Functions, Cloud Run tarafından desteklenmektedir ve Cloud Run'ın container örneğini otomatik ölçeklendirme
Cloud Functions for Firebase'de daha yüksek eşzamanlılık ayarlarıyla denemeler yaparken (2. nesil) aşağıdaki noktaları göz önünde bulundurun:
- Daha yüksek eşzamanlılık ayarları, optimum performans için daha yüksek CPU ve RAM gerektirebilir performans üzerinde değişiklik gösterebilir. Çok fazla işlem yapan video işleme için yeterli kaynak olmayabilir. CPU ve RAM ayarları en üst düzeye çıkarılmış olsa bile 1.000 eşzamanlı istek.
- Cloud Functions for Firebase (2. nesil) hizmeti Cloud Run tarafından desteklendiğinden şunları yapabilirsiniz: incelemek için Google Cloud kılavuzuna eşzamanlılığı optimize etme.
- Projeyi başlatmadan önce çoklu eş zamanlılığı bir test ortamında kapsamlı bir şekilde test ettiğinizden emin olun. ve üretimde çok eşzamanlılığa geçiliyor.
Minimum sayıda örneği sıcak tutun
Kaynak kodda bir işlev için minimum örnek sayısı ayarlayabilirsiniz. Örneğin, bu işlev en az 5 örnek ayarlar sıcak tutmak için:
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ğeri belirlerken dikkate almanız gereken bazı noktalar şunlardır:
- Cloud Functions for Firebase, uygulamanızı ayarınızın üzerinde ölçeklendiriyorsa bu eşiğin üzerindeki her örnek için baştan başlatmayla karşılaşırsınız.
- Soğuk başlatma, ani trafik çeken uygulamalar üzerindeki en ciddi etkiye sahiptir. Eğer olduğunu ve uygulamanızın daha hızlı çalışmasını sağlayacak kadar yüksek bir değer soğuk başlatmalar her trafik artışında azalmaya başladığında, daha az gecikme. Sürekli trafiğe sahip uygulamalarda baştan başlatmanın düşük olması performansını ciddi ölçüde etkileyecektir.
Minimum örnek belirlemek, üretim ortamları için mantıklı olabilir ancak genellikle test ortamlarında kaçınılmalıdır. Sıfıra ölçeklendirmek için ama yine de üretim projenizde baştan başlatma sayısını azaltırsanız Parametreleştirilmiş yapılandırmanızda minimum örnek değeri belirleyebilirsiniz:
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şlev için maksimum örnek sayısını sınırlama
İşlev kaynak kodunda maksimum örnek sayısı için bir değer ayarlayabilirsiniz. Örneğin, bu işlev 100 örnekle sınırlı kalmaması için bir veri tabanında aşırı yüklenmeye yol açabilir:
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ındı ve ardından şu yanıt koduyla reddedildi:
O zamana kadar kullanılabilir örnek yoksa 429 Too Many Requests
.
Maksimum örnek sayısı ayarlarını kullanmayla ilgili en iyi uygulamalar hakkında daha fazla bilgi edinmek için bunları maksimum örnek sayısını ayarlamaya yönelik en iyi uygulamalar.
Zaman aşımı ve bellek ayırmayı ayarlama
Bazı durumlarda, işlevlerinizin uzun bir zaman aşımı için özel gereksinimleri olabilir. veya büyük bir bellek ayırması söz konusu. Bu değerleri, Google Cloud konsolunda veya işlev kaynak kodunda (yalnızca Firebase).
İşlevlerin kaynak kodunda bellek ayırmayı ve zaman aşımını ayarlamak için bellek ve zaman aşımı saniyeleri için genel seçenekler tıklayın. Örneğin, bu Cloud Storage işlevi 1 GiB bellek ve zaman kullanır arasında bir boşluk olması gerekir:
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ı saniyesi için maksimum değer 540
veya 9 dakikadır.
Google Cloud Console'da bellek ayırmayı ve zaman aşımını ayarlamak için:
- Google Cloud konsolunda, açılır menüden Cloud Functions for Firebase'i seçin. sol menü.
- İşlev listesinde adını tıklayarak bir işlev seçin.
- Üst menüde Düzenle simgesini tıklayın.
- Etiketli açılır menüden bir bellek tahsisi seçin Ayrılmış bellek.
- Gelişmiş seçenekleri görüntülemek için Diğer'i tıklayın ve saniye olarak Zaman aşımı metin kutusunda gösterilir.
- İşlevi güncellemek için Kaydet'i tıklayın.
CPU varsayılan ayarlarını geçersiz kıl
Cloud Functions for Firebase'deki (2. nesil) her işlev için en fazla 2 GB bellek ayrılır varsayılan olarak bir CPU'ya ayarlanır ve daha sonra 4 ve 8 GB için 2 CPU'ya yükseltilir. Lütfen bu, 1. nesil varsayılan davranıştan önemli ölçüde farklıdır. Bu yöntemde de belirtildiği gibi düşük bellekli işlevler için biraz daha yüksek maliyete neden olur. aşağıdaki tabloda bulabilirsiniz:
Ayrılan RAM | Sürüm 1 varsayılan CPU (kesirli) | Sürüm 2 varsayılan CPU | ms başına fiyat artışı |
---|---|---|---|
128 MB | 12/1 | 1 | 10,5x |
256 MB | 1/6 | 1 | 5,3 kat |
512 MB | 3/1 | 1 | 2,7 kat |
1 GB | 12/7 | 1 | 1,6x |
2 GB | 1 | 1 | 1 kat |
4 GB | 2 | 2 | 1 kat |
8 GB | 2 | 2 | 1 kat |
16 GB | Yok | 4 | Yok |
2. nesil işlevleriniz için 1. nesil davranışını tercih ederseniz 1. nesil varsayılanları ayarlayın global bir seçenek olarak kullanabilirsiniz:
Node.js
// Turn off Firebase defaults
setGlobalOptions({ cpu: 'gcf_gen1' });
Python
# Use 1st gen behavior
set_global_options(cpu="gcf_gen1")
2. nesil, CPU'yu yoğun işlevler için ek yapılandırma ve CPU. CPU'yu aşağıda 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