Uygulamanızı Cloud Functions Emulator'a bağlama

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, 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- ön ek bulunur.

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 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'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.
  • Cloud Functions için Firebase Test SDK'sı, işlev geliştirme için mocha çerçevesine sahip bir Node.js. 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?