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

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 aracını 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 projesi için ürünleri emüle eder.

Kullanılacak projeyi seçmek için emülatörleri başlatmadan önce KSA'da çalışma dizininizde firebase use komutunu çalıştırın. Alternatif olarak, her emülatör komutuna --project işaretini iletebilirsiniz.

Local Emulator Suite, gerçek Firebase projelerinin ve demo projelerin emülasyonunu destekler.

Proje türü Özellikler Emülatörlerle kullanma
Real

Gerçek bir Firebase projesi, oluşturduğunuz ve 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üle etmediğiniz ürünler için uygulamalarınız ve kodunuz canlı kaynakla (veritabanı örneği, depolama alanı paketi, işlev vb.) etkileşim kurar.

Demo

Demo Firebase projesinde gerçek Firebase yapılandırması ve canlı kaynaklar yoktur. Bu projelere genellikle codelab'ler veya diğer eğitimler üzerinden erişilir.

Demo projelerinin proje kimliklerinde demo- ön eki 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 çalışmadığı bir kaynakla etkileşim kurmaya ç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ırabildiğiniz için daha kolay kurulum
  • Kodunuz yanlışlıkla emüle edilmemiş (ü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 sunulur.

Uygulamanızı emülatörlerle iletişim kuracak şekilde yapılandırma

Uygulamanızı çağrılabilir işlevler için hazırlama

Prototip ve test etkinlikleriniz çağrılabilir arka uç işlevleri içeriyorsa 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)
Unity
FirebaseFunctions functions = FirebaseFunctions.DefaultInstance;
// Connects to the Functions Emulator running on port 5001
functions.UseFunctionsEmulator("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 hazırlama

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 hazırlama

Öykünücü, tetikleyici tanımlarına göre öykünülmüş görev sıralarını otomatik olarak ayarlar. 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 öykünücüye yönlendirir.

Üretim ortamında kullanılan sevk sisteminin, emülatörde uygulanandan daha karmaşık olduğunu unutmayın. Bu nedenle, emülasyonlu davranışın üretim ortamlarını tam olarak yansıtmasını beklememelisiniz. Öykünücüdeki parametreler, görevlerin gönderilme ve yeniden denenme hızının üst sınırlarını belirler.

Uygulamanızı arka planda tetiklenen işlevlerin emülasyonu için hazırlama

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 Alerts Emulator

Arka plan etkinliklerini tetiklemek için Emulator Suite UI kullanarak veya uygulamanızı ya da test kodunuzu platformunuzun SDK'sını kullanarak emülatörlere bağlayarak arka uç kaynaklarını değiştirin.

Uzantılar tarafından yayınlanan özel etkinlikler için test işleyicileri

Cloud Functions v2 ile Firebase Extensions özel etkinliklerini 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şleşir.

Etkinlik yayınlayan uzantılar için özel etkinlik işleyicileri 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. EVENTARC_EMULATOR ortam değişkeni ayarlandığında Firebase Admin SDK, Eventarc emülatörüne otomatik olarak bağlanır. Varsayılan bağlantı noktasını Local Emulator Suite yapılandırma 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. Eventarc emülatörü de kayıtlı işleyicileri tetiklemek için Cloud Functions emülatörüne geri çağırma yapar.

İşleyici yürütme işlemiyle ilgili ayrıntılar için Emulator Suite UI adresindeki Functions günlüklerini inceleyebilirsiniz.

Yerel 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 dosyasının içeriği, .env ve projeye özel .env dosyasına göre önceliklidir.

Örneğin, bir projede geliştirme ve yerel test için biraz farklı değerler içeren şu üç dosya bulunabilir:

.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 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. 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 emülatör, izin kısıtlamaları nedeniyle gizli değerlere erişemeyebilir.

Cloud Functions emülatörünün ortam değişkenleri desteğine benzer şekilde, bir .secret.local dosyası oluşturarak gizli anahtar değerlerini 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 prototipleri oluşturmaya 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 verileri taklit edebilir ve Local Emulator Suite tarafından şu anda desteklenmeyen ürünlerle (Analytics, Remote Config ve Crashlytics) etkileşimi simüle etmek için işlev çağrıları yapabilirsiniz.
  • Cloud Functions için Firebase Test SDK'sı, işlev geliştirme için mocha çerçevesine sahip bir Node.js'dir. Cloud Functions Test SDK'sı, Cloud Functions kabuğu ü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 bölümlerinde bulabilirsiniz.

Cloud Functions emülatörünün üretimden farkı

Cloud Functions emülatörü, çoğu kullanım alanı 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 kapsamlı bir çalışma yaptık. Ancak 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ülürken ortamınızın diğer yönleri (ör. yerel dosyalar, işlev kilitlenmelerinden sonraki davranış vb.) farklılık gösterir.

Cloud IAM

Firebase Emulator Suite, çalıştırma için IAM ile ilgili herhangi bir davranışı kopyalamaya veya dikkate almaya çalışmaz. Emülatörler, sağlanan Firebase Güvenlik Kuralları'na uyar ancak normalde IAM'nin kullanılacağı durumlarda (örneğin, Cloud Functions'ı çağıracak hizmet hesabını ve dolayısıyla izinleri ayarlamak için) emülatör yapılandırılamaz ve geliştirici makinenizdeki genel olarak kullanılabilir hesabı kullanır. Bu, yerel bir komut dosyasını doğrudan çalıştırmaya benzer.

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 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 üretimden farklı olabileceğini unutmayın. İşlevleri emülatörle tasarlayıp test ettikten sonra, yürütme sürelerini doğrulamak için üretimde sınırlı testler yapmanızı öneririz.

Yerel ortamlar ve üretim ortamları arası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ümlere ihtiyaç duyuyorsanız veya Linux dışı bir ortamda geliştirme yapıyorsanız üretimden farklı davranışlar sergileyebilir. Eksik programın kendi ikili kopyasını işlev dağıtımınızla birlikte dağıtabilirsiniz.

  • 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 kullanılabilen sürümlerden farklı olabilir. Bu sorunu, yerel komutlar yerine yalnızca Node alternatiflerini kullanarak veya dağıtımınızla birlikte paketlenecek Linux ikili dosyaları oluşturarak çözebilirsiniz.

Tekrar deneniyor

Cloud Functions emülatörü, hata durumunda işlevleri yeniden denemeyi desteklemez.

Sonrasında ne olacak?