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ükleyip 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 --project
işaretini her emülatör komutuna aktarabilirsiniz.
Local Emulator Suite, gerçek Firebase projeleri 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 paketleri, işlevler veya 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 çalışmadığı bir kaynakla etkileşim kurmaya çalışırsa bu kod başarısız olur. |
Mümkün olan her yerde demo projeleri kullanmanızı öneririz. Sunulan avantajlar arasında şunlar sayılabilir:
- Emülatörleri bir Firebase projesi oluşturmadan çalıştırabileceğiniz için kurulumu daha kolaydır
- 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 sunulur:
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 öğeleri Eventarc emülatörüne otomatik olarak bağlanır. Varsayılan bağlantı noktasını Local Emulator Suite yapılandırması 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 içindeki Functions günlüklerini kontrol edebilirsiniz.
Yerel bir test ortamı yapılandırma
İşlevleriniz alan tabanlı ortam yapılandırmasına dayanıyorsa yerel test ortamınızda bu davranışı emüle 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
dosyasına 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 | KİTLE=Yerel İnsanlar |
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ü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. 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 uygulamasını 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ştirmeye olanak tanıyan Cloud Functions kabuğu. Kabuk, geliştirme için REPL tarzı bir arayüze sahip Cloud Functions emülatörünü kullanır. Cloud Firestore veya Realtime Database emülatörleriyle entegrasyon sağlanmaz. Kabuğu kullanarak, Local Emulator Suite tarafından desteklenmeyen Analytics, Remote Config ve Crashlytics gibi ürünlerle etkileşimi simüle etmek için verileri taklit edebilir ve işlev çağrıları yapabilirsiniz.
- Cloud Functions için Firebase Test SDK'sı, işlev geliştirmede mocha çerçevesine sahip bir Node.js'dir. Cloud Functions Test SDK'sı, aslında 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ı nedir?
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. Bununla birlikte, emülatör, container mimarisine alınmış üretim ortamının tamamını taklit etmez. Bu nedenle, işlev kodunuz gerçekçi bir şekilde yürütülse de ortamınızın diğer özellikleri (ör. yerel dosyalar, işlevler çökmesi sonrası davranış) farklı olacaktır.
Cloud IAM
Firebase Emulator Suite, IAM ile ilgili çalışma amaçlı davranışları kopyalamaya veya bunlara saygı göstermeye çalışmaz. Emülatörler, sağlanan Firebase Güvenlik Kurallarına uyar ancak IAM'nin normalde kullanılması gereken durumlarda (ör. Cloud Functions'ın hizmet hesabını çağırıp izinleri ayarlamak için kullanılır) emülatör yapılandırılamaz ve doğrudan yerel komut dosyası çalıştırmaya benzer şekilde geliştirici makinenizde küresel olarak kullanılabilen 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 uygulamasını geliştirirken kullandığınız yerel ortamı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 de farklı sürümlere ihtiyacınız varsa veya Linux olmayan bir ortamda geliştirme yapıyorsanız üretimden farklı olabilir. 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.