Uygulamanızı Cloud Functions emülatörüne bağlamadan önce Firebase Local Emulator Suite iş akışını genel olarak anladığınızdan, Local Emulator Suite'yi yüklediğinizden ve yapılandırdığınızdan ve CLI komutlarını incelediğinizden emin olun.
Firebase projesi seçme
Firebase Local Emulator Suite, tek bir Firebase projesinin ürünlerini taklit eder.
Kullanılacak projeyi seçmek için emülatörleri başlatmadan önce CLI'de çalışma dizininizde firebase use
komutunu çalıştırın. Alternatif olarak, her emülatör komutuna --project
işaretini de iletebilirsiniz.
Local Emulator Suite, gerçek Firebase projelerinin ve demo projelerinin emülasyonunu destekler.
Proje türü | Özellikler | Emülatörlerle kullanma |
---|---|---|
Gerçek |
Gerçek Firebase projesi, oluşturduğunuz ve yapılandırdığınız (muhtemelen Firebase konsolu üzerinden) projedir. Gerçek projelerde veritabanı örnekleri, depolama alanı paketleri, işlevler veya söz konusu Firebase projesi için oluşturduğunuz 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ülasyon oluşturmadığınız ürünlerde uygulamalarınız ve kodunuz canlı kaynakla (veritabanı örneği, depolama alanı paketi, işlev vb.) etkileşim kurar. |
Demo |
Demo Firebase projelerinde gerçek Firebase yapılandırması ve canlı kaynak bulunmaz. Bu projelere genellikle codelab'ler veya diğer eğitici içerikler üzerinden erişilir. Demo projelerin proje kimliklerinde |
Demo Firebase projeleriyle çalışırken uygulamalarınız ve kodunuz yalnızca emülatörlerle etkileşim kurar. Uygulamanız, emülatörünün çalışmadığı bir kaynağa etkileşime geçmeye çalışırsa bu kod başarısız olur. |
Mümkün olduğunda demo projeleri kullanmanızı öneririz. Sunulan avantajlar arasında şunlar sayılabilir:
- Firebase projesi oluşturmadan emülatörleri çalıştırabileceğiniz için daha kolay kurulum
- Kodunuz yanlışlıkla taklit edilmeyen (üretim) kaynakları çağırırsa 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.
Uygulamanızı, emülatörlerle konuşacak şekilde donatma
Uygulamanızı çağrılabilir işlevler için ayarlama
Prototip ve test etkinliklerinizde çağrılabilir arka uç işlevleri varsa Cloud Functions for Firebase emülatörüyle etkileşimi aşağıdaki gibi yapılandırın:
Kotlin+KTX
// 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().useFunctionsEmulator(origin: "http://127.0.0.1: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 ayarlama
Kodunuzdaki her HTTPS işlevi, yerel emülatörden aşağıdaki URL biçimi kullanılarak yayınlanır:
http://$HOST:$PORT/$PROJECT/$REGION/$NAME
Örneğin, varsayılan ana makine bağlantı noktası ve bölgesi olan 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 donanımla destekleyin
Emülatör, tetikleyici tanımlarına göre taklit edilen görev sıralarını otomatik olarak 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 eklenen 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, taklit edilen davranışın üretim ortamlarını tam olarak yansıtmasını beklememelisiniz. Emülatördeki parametreler, görevlerin gönderilme ve yeniden deneme hızının üst sınırlarını sağlar.
Uygulamanızı arka planda tetiklenen işlev emülasyonu için donanımla destekleme
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 veya platformunuzun SDK'sını kullanarak uygulamanızı ya da test kodunuzu emülatörlere bağlayarak arka uç kaynaklarını değiştirin.
Uzantıların yayınladığı özel etkinlikler için işleyicileri test etme
Cloud Functions v2 ile Firebase Extensions özel etkinlikleri işlemek için uyguladığınız işlevlerde Cloud Functions emülatörü, Eventarc tetikleyicilerini desteklemek için Eventarc emülatörüyle eşlenir.
Etkinlik yayınlayan uzantılar için özel etkinlik işleyicilerini test etmek istiyorsanız Cloud Functions ve Eventarc emülatörlerini yüklemeniz gerekir.
Cloud Functions çalışma zamanı, Eventarc emülatörünün çalışıyor olması durumunda EVENTARC_EMULATOR
ortam değişkenini geçerli işlemde localhost:9299
olarak ayarlar. EVENTARC_EMULATOR
ortam değişkeni ayarlandığında Firebase Admin SDK'ler otomatik olarak Eventarc emülatörüne bağlanır. Varsayılan bağlantı noktasını Local Emulator Suite'yi yapılandır bölümünde açıklandığı şekilde değiştirebilirsiniz.
Ortam değişkenleri doğru şekilde yapılandırıldığında Firebase Admin SDK, etkinlikleri otomatik olarak Eventarc emülatörüne gönderir. Ardından 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'teki İşlevler günlüklerini kontrol edebilirsiniz.
Yerel bir test ortamı yapılandırma
İşlevleriniz dotenv tabanlı ortam yapılandırmasını kullanıyorsa 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=Dünya
AUDIENCE=Humans |
AUDIENCE=Dev Humans | AUDIENCE=Local Humans |
Yerel bağlamda başlatıldığında emülatör, ortam değişkenlerini aşağıdaki 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ünde 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. Emülatör, varsayılan olarak uygulama varsayılan kimlik bilgilerini kullanarak üretim gizli anahtarlarınıza erişmeye çalışır. CI ortamları gibi belirli durumlarda emülatör, izin kısıtlamaları nedeniyle gizli değerlere erişemeyebilir.
Ortam değişkenleri için Cloud Functions emülatör desteğine benzer şekilde, bir .secret.local
dosyası oluşturarak gizli anahtar değerlerini geçersiz kılabilirsiniz. Bu, özellikle gizli değere erişiminiz yoksa işlevlerinizi yerel olarak test etmenizi kolaylaştırır.
Cloud Functions'ü test etmek için başka hangi araçlar var?
Cloud Functions emülatörünün yanında diğer prototip ve test araçları da bulunur:
- Etkileşimli, iteratif işlev prototipi oluşturma ve geliştirmeye olanak tanıyan Cloud Functions kabuğu. Kabuk, geliştirme için REPL tarzı bir arayüzle Cloud Functions emülatörünü kullanır. Cloud Firestore veya Realtime Database emülatörleriyle entegrasyon sağlanmaz. Kabuk kullanarak, Local Emulator Suite'ın şu anda desteklemediği ürünlerle (Analytics, Remote Config ve Crashlytics) etkileşimi simüle etmek için verileri taklit eder ve işlev çağrıları yaparsınız.
- İşlev geliştirme için mocha çerçevesine sahip bir Node.js olan Cloud Functions için Firebase Test SDK'sı. Cloud Functions Test SDK'sı, Cloud Functions kabuğunun üzerine 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 çoğu için üretim ortamına oldukça yakındır. Node çalışma zamanındaki her şeyin üretime mümkün olduğunca yakın olmasını sağlamak için yoğun bir çalışma yürüttük. Ancak emülatör, kapsayıcıya alınmış üretim ortamını tam olarak taklit etmez.Bu nedenle, işlev kodunuz gerçekçi bir şekilde yürütülürken ortamınızın diğer yönleri (ör. yerel dosyalar, işlevler kilitlendikten sonraki davranış vb.) farklı olur.
Cloud IAM
Firebase Emulator Suite, IAM ile ilgili herhangi bir çalışma davranışını kopyalamaya veya bu davranışa uymaya çalışmaz. Emülatörler, sağlanan Firebase Güvenlik Kuralları'na uyar. Ancak IAM'ın normalde kullanılacağı durumlarda (ör. Cloud Functions'ın çağıracağı hizmet hesabını ve dolayısıyla izinleri ayarlamak için) emülatör yapılandırılamaz ve doğrudan yerel bir komut dosyası çalıştırmaya benzer şekilde, geliştirici makinenizdeki herkese açık hesabı kullanır.
Bellek ve işlemci kısıtlamaları
Emülatör, işlevleriniz için bellek veya işlemci kısıtlamaları uygulamaz. Ancak emülatör, timeoutSeconds
çalışma zamanı bağımsız değişkeni aracılığıyla zaman aşımı işlevlerini destekler.
İşlevler emülatörde çalıştırıldığında işlev yürütme süresinin üretimden farklı olabileceğini unutmayın. İşlevleri tasarlayıp emülatörde test ettikten sonra, yürütme sürelerini doğrulamak için üretimde sınırlı testler çalıştırmanı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 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ümlere ihtiyacınız varsa veya Linux dışında bir ortamda geliştirme yapıyorsanız üretim ortamından farklı davranışlar sergileyebilir. Eksik programın kendi ikili kopyasını işlev dağıtımınızla birlikte 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 yönelik yalnızca Node alternatiflerini kullanarak veya dağıtımınızla birlikte derlenecek Linux ikili dosyaları oluşturarak çözebilirsiniz.
Tekrar deneniyor
Cloud Functions emülatörü, başarısız olan işlevlerin yeniden denenmesini desteklemez.
Sonrasında ne olacak?
- Seçili videolar ve ayrıntılı "Nasıl Yapılır?" örnekleri için Firebase Emulators Eğitimi Oynatma Listesi'ni takip edin.
- Cloud Functions for Firebase emülatör hakkında daha fazla bilgiyi İşlevleri yerel olarak çalıştırma başlıklı makalede bulabilirsiniz.