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 Suiteyükleyip yapılandırdığınızdan ve CLI komutlarını incelediğinizden emin olun.

Bir Firebase projesi seçin

Firebase Local Emulator Suite, tek bir Firebase projesi için ürünleri taklit eder.

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

Local Emulator Suite Gerçek Firebase projelerinin ve demo projelerinin emülasyonunu destekler.

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

Gerçek bir Firebase projesi, sizin oluşturup 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ülasyonunu yapmadığınız tüm ürünler için uygulamalarınız ve kodunuz canlı kaynakla (veritabanı örneği, depolama paketi, işlev vb.) etkileşimde bulunur.

Demo

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

Demo projelerin proje kimlikleri demo- önekine sahiptir.

Demo Firebase projeleriyle çalışırken uygulamalarınız ve kodunuz yalnızca emülatörlerle etkileşimde bulunur. Uygulamanız, emülatörün çalışmadığı bir kaynakla etkileşime girmeye çalışırsa bu kod başarısız olur.

Mümkün olan her durumda demo projeleri kullanmanızı öneririz. Sunulan avantajlar arasında şunlar sayılabilir:

  • Emülatörleri Firebase projesi oluşturmadan çalıştırabileceğiniz için daha kolay kurulum
  • Kodunuz yanlışlıkla emüle edilmemiş (üretim) kaynakları çağırdığında 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 sunar.

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

Uygulamanızı çağrılabilir işlevler için araçlandırın

Prototip ve test etkinliklerinizde çağrılabilir arka uç işlevleri kullanılıyorsa 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)

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 yapılandırma

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 araçlandırın

Emülatör, tetikleyici tanımlarına göre otomatik olarak emüle edilmiş görev kuyrukları 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 alınmış 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, emüle edilen davranışın üretim ortamlarını tam olarak yansıtmasını beklememelisiniz. Emülatördeki parametreler, görevlerin gönderilme ve yeniden denenme hızına üst sınırlar getirir.

Uygulamanızı arka planda tetiklenen işlevlerin emülasyonu için araçlandırın

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 arka uç kaynaklarını değiştirin veya uygulamanızı ya da test kodunuzu platformunuz için SDK'yı kullanarak emülatörlere bağlayın.

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

Firebase Extensions özel etkinliklerini Cloud Functions v2 ile işlemek için uyguladığınız işlevlerde, Cloud Functions emülatörü Eventarc tetikleyicilerini desteklemek üzere Eventarc emülatörüyle eşleşir.

Etkinlik yayan uzantılar için özel etkinlik işleyicilerini 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. Firebase Admin SDK ortam değişkeni ayarlandığında EVENTARC_EMULATOR, Eventarc emülatörüne otomatik olarak bağlanır. Varsayılan bağlantı noktasını YapılandırmaLocal Emulator Suite bölümünde açıklandığı gibi değiştirebilirsiniz.

Ortam değişkenleri düzgün şekilde yapılandırıldığında Firebase Admin SDK, 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 UI bölümündeki işlev günlüklerini kontrol edebilirsiniz.

Yerel test ortamı yapılandırma

İşlevleriniz dotenv tabanlı ortam yapılandırmasına bağlıysa 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=Earth

AUDIENCE=Humans

AUDIENCE=Dev Humans AUDIENCE=Local Humans

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

Cloud Functions ortam değişkenleri için emülatör desteğine benzer şekilde, .secret.local dosyası oluşturarak gizli değerleri 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 prototipi oluşturma ve geliştirme olanağı sağlayan Cloud Functions kabuğu. Kabuk, geliştirme için REPL tarzı bir arayüzle Cloud Functions Emulator'ı kullanır. Cloud Firestore veya Realtime Database emülatörleriyle entegrasyon sağlanmaz. Kabuğu kullanarak verileri taklit edebilir ve Local Emulator Suite'nın şu anda desteklemediği ürünlerle etkileşimi simüle etmek için işlev çağrıları yapabilirsiniz: Analytics, Remote Config ve Crashlytics.
  • Cloud Functions için Firebase Test SDK'sı: İşlev geliştirme için mocha çerçevesiyle Node.js. Cloud Functions Test SDK, 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ı

Cloud Functions emülatörü, kullanım alanlarının büyük çoğunluğu için üretim ortamına oldukça yakındır. Node çalışma zamanındaki her şeyin üretim ortamına mümkün olduğunca yakın olmasını sağlamak için çok çalıştık. Ancak, emülatör tam kapsayıcılı üretim ortamını taklit etmez.Bu nedenle, işlev kodunuz gerçekçi bir şekilde yürütülse de ortamınızın diğer yönleri (ör. yerel dosyalar, işlevler kilitlendikten sonraki davranış vb.) farklılık gösterir.

Cloud IAM

Firebase Emulator Suite, çalıştırma için IAM ile ilgili davranışları kopyalamaya veya bunlara uymaya çalışmaz. Emülatörler, sağlanan Firebase Security Rules'a uyar. Ancak normalde IAM'in kullanılacağı durumlarda (ör. Cloud Functions çağırma hizmet hesabını ve dolayısıyla izinleri ayarlamak için) emülatör yapılandırılamaz ve geliştirici makinenizde genel olarak kullanılabilen hesabı doğrudan yerel bir komut dosyası çalıştırmaya benzer şekilde 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 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 üretimdeki süreden farklı olabileceğini unutmayın. İşlevleri emülatörle tasarlayıp test ettikten sonra yürütme sürelerini onaylamak için üretimde sınırlı testler yapmanı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 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ümler gerektiriyorsanız veya Linux olmayan bir ortamda geliştirme yapıyorsanız üretimden farklı davranışlar gösterebilir. İşlev dağıtımınızla birlikte eksik programın kendi ikili kopyanızı 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 alternatif olarak yalnızca Node'u kullanarak veya dağıtımınızla birlikte paketlenecek Linux ikilileri oluşturarak çözebilirsiniz.

Tekrar deneniyor

Cloud Functions emülatörü, işlevlerin başarısızlık durumunda yeniden denenmesini desteklemez.

Sonrasında ne olacak?