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ı anladığınızdan ve Local Emulator Suite'i yükleyip yapılandırdığınızdan ve CLI komutlarını incelediğinizden emin olun.

Firebase projesi seçin

Firebase Local Emulator Suite, tek bir Firebase projesi için ürün emülasyonu yapar.

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

Yerel Emulator Suite, gerçek Firebase projeleri ve demo projelerinin emülasyonunu destekler.

Proje türü Özellikler Emülatörlerle kullanım
Gerçek

Gerçek bir Firebase projesi, sizin 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 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örler çalıştırabilirsiniz.

emüle etmediğiniz tüm ürünler için uygulamalarınız ve kodunuz, canlı kaynakla (veritabanı örneği, depolama paketi, işlev vb.) etkileşime girer.

Demo

Demo Firebase projesinin gerçek bir Firebase yapılandırması yoktur ve canlı kaynak yoktur. Bu projelere genellikle codelab'ler veya diğer eğiticiler aracılığıyla erişilir.

Demo projeleri için proje kimlikleri demo- önekine sahiptir.

Demo Firebase projeleriyle çalışırken uygulamalarınız ve kodunuz yalnızca emülatörlerle etkileşime girer. 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 emüle edilmemiş (üretim) kaynakları çağırırsa veri değişikliği, kullanım ve faturalandırma söz konusu olmayacağından daha yüksek güvenlik
  • SDK yapılandırmanızı indirmek için internete erişmeniz gerekmediğinden daha iyi çevrimdışı destek.

Emülatörlerle konuşmak için uygulamanızı kullanın

Çağrılabilir işlevler için uygulamanızı kullanın

Prototipiniz ve test etkinlikleriniz çağrılanabilir arka uç işlevleri içeriyorsa Cloud Functions for Firebase emülatörüyle etkileşimi şu şekilde 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ızda HTTPS işlevleri emülasyonu için araç kullanma

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 konumda sunulur:

https://localhost:5001/$PROJECT/us-central1/helloWorld

Arka planda tetiklenen işlevler emülasyonu için uygulamanızda kullanın

Cloud Functions emülatörü, aşağıdaki kaynaklardan gelen arka planda tetiklenen işlevleri destekler:

  • Realtime Database emülatörü
  • Cloud Firestore emülatörü
  • Kimlik doğrulama emülatörü
  • Pub/Sub emülatörü

Arka plan etkinliklerini tetiklemek için Emulator Suite kullanıcı arayüzünü 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 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 amacıyla Eventarc emülatörüyle eşlenir.

Etkinlik yayan uzantılarda özel etkinlik işleyicileri test etmek için Cloud Functions ve Eventarc emülatörlerini yüklemeniz gerekir.

Eventarc emülatörü çalışıyorsa Cloud Functions çalışma zamanı, mevcut süreçte EVENTARC_EMULATOR ortam değişkenini localhost:9299 olarak ayarlar. EVENTARC_EMULATOR ortam değişkeni ayarlandığında Firebase Yönetici SDK'ları, Eventarc emülatörüne otomatik olarak bağlanır. Varsayılan bağlantı noktasını Configure Local Emulator Suite 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'sı, 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 kullanıcı arayüzündeki Functions günlüklerini kontrol edebilirsiniz.

Yerel 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 Cloud Functions emülatörü kullanırken bir .env.local dosyası oluşturarak projeniz için 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

KİTLE=İnsanlar

KİTLE=Dev İnsanlar KİTLE=Yerel İnsanlar

Emülatör, yerel bağlamda başlatıldığında 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ünde gizli anahtarlar ve kimlik bilgileri

Cloud Functions emülatörü, hassas yapılandırma bilgilerini depolamak ve bunlara erişmek için gizli anahtar kullanımı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.

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. Böylece, özellikle gizli anahtar değerine erişiminiz yoksa işlevlerinizi yerel olarak test etmeniz kolaylaşır.

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ş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, Yerel Emulator Suite'in şu anda desteklemediği Analytics, Remote Config ve Crashlytics gibi ürünlerle etkileşimi simüle etmek için verilerle 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 birim testi bölümlerinde 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. Düğüm çalışma zamanındaki her şeyin üretime mümkün olduğunca yakın olmasını sağlamak için yoğun bir emek harcadı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ını zorunlu kılmaz. Ancak emülatör, timeoutSeconds çalışma zamanı bağımsız değişkeni aracılığıyla zaman aşımına uğratma 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. Emülatörle işlevler tasarlayıp test ettikten sonra, yürütme sürelerini onaylamak için üretimde sınırlı testler çalıştırmanızı öneririz.

Yerel ve üretim ortamlarındaki farklılıklar için planlama

Emülatör yerel makinenizde çalıştığından uygulamalar, yerleşik programlar ve yardımcı programlar için kullandığınız yerel ortama bağlıdır.

Cloud Functions'ın geliştirilmesinde kullanılan 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 de farklı sürümlere ihtiyacınız varsa veya Linux olmayan bir ortamda geliştirme yapıyorsanız üretimden farklı olabilir. İşlev dağıtımınızın yanı sıra eksik programın kendi ikili kopyasını dağıtmayı düşünebilirsiniz.

  • Benzer şekilde, özellikle Linux olmayan bir ortamda (ör. macOS) geliştirme yapıyorsanız yerleşik yardımcı programlar (ör. ls, mkdir gibi kabuk komutları), üretimde kullanılabilen sürümlerden farklı olabilir. Yerel komutların yerine yalnızca düğüm alternatiflerini kullanarak veya dağıtımınızla paket halinde sunmak için Linux ikili programları oluşturarak bu sorunu çözebilirsiniz.

Tekrar deneniyor

Cloud Functions emülatörü, hata durumunda işlevlerin yeniden denenmesini desteklemez.

Sonrasında ne olacak?