Uygulamanızı Cloud Functions emülatörüne bağlamadan önce genel Firebase Local Emulator Suite iş akışını anladığınızdan, Local Emulator Suite'ı yükleyip yapılandırdığınızdan ve CLI komutlarını incelediğinizden emin olun.
Bir Firebase projesi seçin
Firebase Local Emulator Suite, tek bir Firebase projesi için ürünleri taklit eder.
Kullanılacak projeyi seçmek için emülatörleri başlatmadan önce çalışma dizininizde firebase use
komutunu çalıştırın. Alternatif olarak, her bir emülatör komutuna --project
işaretini iletebilirsiniz.
Local Emulator Suite Gerçek Firebase projelerinin ve demo projelerinin emülasyonunu destekler.
Proje türü | Özellikler | Emülatörlerle kullanma |
---|---|---|
Real |
Gerçek bir Firebase projesi, sizin oluşturup yapılandırdığınız (büyük olasılıkla Firebase konsolu üzerinden) bir projedir. Gerçek projelerde veritabanı örnekleri, depolama paketleri, işlevler veya söz konusu Firebase projesi için ayarladığınız diğer kaynaklar gibi canlı kaynaklar bulunur. |
Gerçek Firebase projeleriyle çalışırken desteklenen ürünlerin herhangi biri veya tümü için emülatör çalıştırabilirsiniz. Emülasyonunu yapmadığınız tüm ürünler için uygulamalarınız ve kodunuz canlı kaynakla (veritabanı örneği, depolama paketi, işlev vb.) etkileşimde bulunur. |
Demo |
Demo Firebase projesinde gerçek Firebase yapılandırması ve canlı kaynaklar yoktur. Bu projelere genellikle codelab'ler veya diğer eğitimler aracılığıyla erişilir. Demo projelerin proje kimlikleri |
Demo Firebase projeleriyle çalışırken uygulamalarınız ve kodunuz yalnızca emülatörlerle etkileşimde bulunur. Uygulamanız, emülatörün çalışmadığı bir kaynakla etkileşime girmeye çalışırsa bu kod başarısız olur. |
Mümkün olan her durumda demo projeleri kullanmanızı öneririz. Sunulan avantajlar arasında şunlar sayılabilir:
- Emülatörleri Firebase projesi oluşturmadan çalıştırabileceğiniz için daha kolay kurulum
- Kodunuz yanlışlıkla emüle edilmemiş (üretim) kaynakları çağırdığında veri değişikliği, kullanım ve faturalandırma olasılığı olmadığından daha güçlü güvenlik
- SDK yapılandırmanızı indirmek için internete erişmeniz gerekmediğinden daha iyi çevrimdışı destek sunar.
Uygulamanızı emülatörlerle iletişim kuracak şekilde yapılandırma
Uygulamanızı çağrılabilir işlevler için araçlandırın
Prototip ve test etkinliklerinizde çağrılabilir arka uç işlevleri kullanılıyorsa Cloud Functions for Firebase emülatörüyle etkileşimi şu şekilde yapılandırın:
Kotlin
// 10.0.2.2 is the special IP address to connect to the 'localhost' of // the host computer from an Android emulator. val functions = Firebase.functions functions.useEmulator("10.0.2.2", 5001)
Java
// 10.0.2.2 is the special IP address to connect to the 'localhost' of // the host computer from an Android emulator. FirebaseFunctions functions = FirebaseFunctions.getInstance(); functions.useEmulator("10.0.2.2", 5001);
Swift
Functions.functions().useEmulator(withHost: "localhost", port: 5001)
Web
import { getApp } from "firebase/app"; import { getFunctions, connectFunctionsEmulator } from "firebase/functions"; const functions = getFunctions(getApp()); connectFunctionsEmulator(functions, "127.0.0.1", 5001);
Web
firebase.functions().useEmulator("127.0.0.1", 5001);
Uygulamanızı HTTPS işlevleri emülasyonu için yapılandırma
Kodunuzdaki her HTTPS işlevi, aşağıdaki URL biçimi kullanılarak yerel emülatörden sunulur:
http://$HOST:$PORT/$PROJECT/$REGION/$NAME
Örneğin, varsayılan ana makine bağlantı noktası ve bölgeye sahip basit bir helloWorld
işlevi şu adreste sunulur:
https://localhost:5001/$PROJECT/us-central1/helloWorld
Uygulamanızı görev sırası işlevleri emülasyonu için araçlandırın
Emülatör, tetikleyici tanımlarına göre otomatik olarak emüle edilmiş görev kuyrukları oluşturur ve Yönetici SDK'sı, CLOUD_TASKS_EMULATOR_HOST
ortam değişkeni aracılığıyla çalıştığını algılarsa sıraya alınmış istekleri emülatöre yönlendirir.
Üretimde kullanılan dağıtım sisteminin, emülatörde uygulanan sistemden daha karmaşık olduğunu unutmayın. Bu nedenle, emüle edilen davranışın üretim ortamlarını tam olarak yansıtmasını beklememelisiniz. Emülatördeki parametreler, görevlerin gönderilme ve yeniden denenme hızına üst sınırlar getirir.
Uygulamanızı arka planda tetiklenen işlevlerin emülasyonu için araçlandırın
Cloud Functions emülatörü, aşağıdaki kaynaklardan arka planda tetiklenen işlevleri destekler:
- Realtime Database emülatör
- Cloud Firestore emülatör
- Authentication emülatör
- Pub/Sub emülatör
- Firebase uyarıları emülatörü
Arka plan etkinliklerini tetiklemek için Emulator Suite UI kullanarak arka uç kaynaklarını değiştirin veya uygulamanızı ya da test kodunuzu platformunuz için SDK'yı kullanarak emülatörlere bağlayın.
Uzantılar tarafından yayınlanan özel etkinlikler için test işleyicileri
Firebase Extensions özel etkinliklerini Cloud Functions v2 ile işlemek için uyguladığınız işlevlerde, Cloud Functions emülatörü Eventarc tetikleyicilerini desteklemek üzere Eventarc emülatörüyle eşleşir.
Etkinlik yayan uzantılar için özel etkinlik işleyicilerini test etmek istiyorsanız Cloud Functions ve Eventarc emülatörlerini yüklemeniz gerekir.
Eventarc emülatörü çalışıyorsa Cloud Functions çalışma zamanı, geçerli işlemde EVENTARC_EMULATOR
ortam değişkenini localhost:9299
olarak ayarlar. Firebase Admin SDK ortam değişkeni ayarlandığında EVENTARC_EMULATOR
, Eventarc emülatörüne otomatik olarak bağlanır. Varsayılan bağlantı noktasını YapılandırmaLocal Emulator Suite bölümünde açıklandığı gibi değiştirebilirsiniz.
Ortam değişkenleri düzgün şekilde yapılandırıldığında Firebase Admin SDK, etkinlikleri otomatik olarak Eventarc emülatörüne gönderir. Buna karşılık Eventarc emülatörü, kayıtlı işleyicileri tetiklemek için Cloud Functions emülatörüne geri çağrı yapar.
İşleyici yürütmeyle ilgili ayrıntılar için Emulator Suite UI bölümündeki işlev günlüklerini kontrol edebilirsiniz.
Yerel test ortamı yapılandırma
İşlevleriniz dotenv tabanlı ortam yapılandırmasına bağlıysa bu davranışı yerel test ortamınızda taklit edebilirsiniz.
Yerel bir Cloud Functions emülatörü kullanırken .env.local
dosyası oluşturarak projenizin ortam değişkenlerini geçersiz kılabilirsiniz. .env.local
içeriği, .env
ve projeye özel .env
dosyasına göre önceliklidir.
Örneğin, bir proje geliştirme ve yerel test için biraz farklı değerler içeren şu üç dosyayı içerebilir:
.env
|
.env.dev
|
.env.local
|
PLANET=Earth
AUDIENCE=Humans |
AUDIENCE=Dev Humans | AUDIENCE=Local Humans |
Yerel bağlamda başlatıldığında emülatör, ortam değişkenlerini gösterildiği gibi yükler:
$ firebase emulators:start
i emulators: Starting emulators: functions
# Starts emulator with following environment variables:
# PLANET=Earth
# AUDIENCE=Local Humans
Cloud Functions emülatöründeki gizli anahtarlar ve kimlik bilgileri
Cloud Functions emülatörü, hassas yapılandırma bilgilerini depolamak ve bunlara erişmek için gizli anahtarların kullanılmasını destekler. Varsayılan olarak, emülatör uygulama varsayılan kimlik bilgilerini kullanarak üretim gizli anahtarlarınıza erişmeye çalışır. CI ortamları gibi belirli durumlarda, izin kısıtlamaları nedeniyle emülatör gizli değerlere erişemeyebilir.
Cloud Functions ortam değişkenleri için emülatör desteğine benzer şekilde, .secret.local
dosyası oluşturarak gizli değerleri geçersiz kılabilirsiniz. Bu sayede, özellikle gizli değere erişiminiz yoksa işlevlerinizi yerel olarak kolayca test edebilirsiniz.
Cloud Functions test etmek için başka hangi araçlar var?
Cloud Functions emülatörü, diğer prototip ve test araçlarıyla desteklenir:
- Etkileşimli ve yinelemeli işlev prototipi oluşturma ve geliştirme olanağı sağlayan Cloud Functions kabuğu. Kabuk, geliştirme için REPL tarzı bir arayüzle Cloud Functions Emulator'ı kullanır. Cloud Firestore veya Realtime Database emülatörleriyle entegrasyon sağlanmaz. Kabuğu kullanarak verileri taklit edebilir ve Local Emulator Suite'nın şu anda desteklemediği ürünlerle etkileşimi simüle etmek için işlev çağrıları yapabilirsiniz: Analytics, Remote Config ve Crashlytics.
- Cloud Functions için Firebase Test SDK'sı: İşlev geliştirme için mocha çerçevesiyle Node.js. Cloud Functions Test SDK, Cloud Functions kabuğunun üzerinde otomasyon sağlar.
Cloud Functions kabuğu ve Cloud Functions Test SDK'sı hakkında daha fazla bilgiyi İşlevleri etkileşimli olarak test etme ve Cloud Functions'ın birim testi başlıklı makalelerde bulabilirsiniz.
Cloud Functions emülatörünün üretimden farkı
Cloud Functions emülatörü, kullanım alanlarının büyük çoğunluğu için üretim ortamına oldukça yakındır. Node çalışma zamanındaki her şeyin üretim ortamına mümkün olduğunca yakın olmasını sağlamak için çok çalıştık. Ancak, emülatör tam kapsayıcılı üretim ortamını taklit etmez.Bu nedenle, işlev kodunuz gerçekçi bir şekilde yürütülse de ortamınızın diğer yönleri (ör. yerel dosyalar, işlevler kilitlendikten sonraki davranış vb.) farklılık gösterir.
Cloud IAM
Firebase Emulator Suite, çalıştırma için IAM ile ilgili davranışları kopyalamaya veya bunlara uymaya çalışmaz. Emülatörler, sağlanan Firebase Security Rules'a uyar. Ancak normalde IAM'in kullanılacağı durumlarda (ör. Cloud Functions çağırma hizmet hesabını ve dolayısıyla izinleri ayarlamak için) emülatör yapılandırılamaz ve geliştirici makinenizde genel olarak kullanılabilen hesabı doğrudan yerel bir komut dosyası çalıştırmaya benzer şekilde kullanır.
Bellek ve işlemci kısıtlamaları
Emülatör, işlevleriniz için bellek veya işlemci kısıtlamalarını zorunlu kılmaz. Ancak emülatör, timeoutSeconds
çalışma zamanı bağımsız değişkeni aracılığıyla işlevlerin zaman aşımına uğramasını destekler.
İşlevler emülatörde çalıştırıldığında işlev yürütme süresinin üretimdeki süreden farklı olabileceğini unutmayın. İşlevleri emülatörle tasarlayıp test ettikten sonra yürütme sürelerini onaylamak için üretimde sınırlı testler yapmanızı öneririz.
Yerel ve üretim ortamlarındaki farklılıkları planlama
Emülatör yerel makinenizde çalıştığından uygulamalar, yerleşik programlar ve yardımcı programlar için yerel ortamınıza bağlıdır.
Cloud Functions geliştirme için yerel ortamınızın Google üretim ortamından farklı olabileceğini unutmayın:
Üretim ortamını simüle etmek için yerel olarak yüklediğiniz uygulamalar (ör. bu eğitimdeki ImageMagick), özellikle farklı sürümler gerektiriyorsanız veya Linux olmayan bir ortamda geliştirme yapıyorsanız üretimden farklı davranışlar gösterebilir. İşlev dağıtımınızla birlikte eksik programın kendi ikili kopyanızı dağıtmayı düşünebilirsiniz.
Benzer şekilde, yerleşik yardımcı programlar (ör.
ls
,mkdir
gibi kabuk komutları), özellikle Linux dışı bir ortamda (ör. macOS) geliştirme yapıyorsanız üretimde bulunan sürümlerden farklı olabilir. Bu sorunu, yerel komutlara alternatif olarak yalnızca Node'u kullanarak veya dağıtımınızla birlikte paketlenecek Linux ikilileri oluşturarak çözebilirsiniz.
Tekrar deneniyor
Cloud Functions emülatörü, işlevlerin başarısızlık durumunda yeniden denenmesini desteklemez.
Sonrasında ne olacak?
- Seçilmiş bir dizi video ve ayrıntılı "Nasıl Yapılır?" örnekleri için Firebase Emulators Eğitimi Oynatma Listesi'ni inceleyin.
- Cloud Functions for Firebase emülatörü hakkında daha fazla bilgiyi İşlevleri yerel olarak çalıştırma başlıklı makalede bulabilirsiniz.